为了交互式地测试我的python脚本,我想创建一个Namespace对象,类似于返回的对象argparse.parse_args().显而易见的方式,
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.parse_args()
Namespace()
>>> parser.parse_args("-a")
usage: [-h]
: error: unrecognized arguments: - a
Process Python exited abnormally with code 2
Run Code Online (Sandbox Code Playgroud)
可能导致Python repl退出(如上所述)一个愚蠢的错误.
那么,使用给定属性集创建Python命名空间的最简单方法是什么?
例如,我可以动态创建dict(dict([("a",1),("b","c")]))但我不能将其用作Namespace:
AttributeError: 'dict' object has no attribute 'a'
Run Code Online (Sandbox Code Playgroud) 是否有一种pythonic方法将字典值分配给其键,以便将字典条目转换为变量?我试过这个:
>>> d = {'a':1, 'b':2}
>>> for key,val in d.items():
exec('exec(key)=val')
exec(key)=val
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
更新:也许我应该更具体:我确实知道键值对是正确的,因为它们之前被我定义为变量.然后我将这些变量存储在字典中(作为键值对),并希望在不同的函数中重用它们.我可以在新函数中重新定义它们,但因为我可能有一个包含大约20个条目的字典,我认为可能有一种更有效的方法.
假设我有一个字典:
d = {'a': 3, 'b':4}
Run Code Online (Sandbox Code Playgroud)
我想创建一个函数f,该函数执行的功能与此函数完全相同:
def f(x, a=d['a'], b=d['b']):
print(x, a, b)
Run Code Online (Sandbox Code Playgroud)
(不一定要打印,但是可以对变量进行一些操作并直接从其名称中调用)。
但是我想直接从字典创建此函数,也就是说,我想拥有一个看起来像的东西
def f(x, **d=d):
print(x, a, b)
Run Code Online (Sandbox Code Playgroud)
并且其行为类似于先前定义的功能。我的想法是,我有一个很大的字典,其中包含函数参数的默认值,并且我不想这样做
def f(a= d['a'], b = d['b'] ...)
Run Code Online (Sandbox Code Playgroud)
我不知道在python中是否有可能。任何见识表示赞赏!
编辑:想法是能够打电话f(5, a=3)。Edit2:问题不在于将字典中存储的参数传递给函数,而是要定义一个函数,其参数名称和默认值存储在字典中。
在python中是否存在创建空对象的特殊类?我尝试了object(),但它不允许我添加字段.我想这样使用它:
obj = EmptyObject()
obj.foo = 'far'
obj.bar = 'boo'
Run Code Online (Sandbox Code Playgroud)
我应该每次(在几个独立的脚本中)定义这样的新类吗?
class EmptyObject:
pass
Run Code Online (Sandbox Code Playgroud)
我用python2.7
我argparse在 python 代码中用作参数解析器。将字典解析为 argparse 对象的最佳方法是什么?
例如,我的字典是:
{
"activation_dropout": 0.0,
"activation_fn": "gelu",
"attention_dropout": 0.0,
"beam": 1,
}
Run Code Online (Sandbox Code Playgroud)
我期望的是一个argparse.Namespace具有属性activation_dropout、activation_fn、attention_dropout和 的对象beam
我希望有一种方法argparse可以将输入作为字典并给出一个argparse名称空间作为这些变量。