我想在函数外部使用函数中定义的一堆局部变量.所以我传递x=locals()了返回值.
如何将该字典中定义的所有变量加载到函数外部的命名空间中,这样x['variable']我就可以简单地使用,而不是使用值来访问该值variable.
为了交互式地测试我的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) 我正在寻找一种优雅的方法来从Python字典中提取一些值到本地值.
与此相当的东西,但对于更长的值列表更清晰,以及更长的键/变量名称:
d = { 'foo': 1, 'bar': 2, 'extra': 3 }
foo, bar = d['foo'], d['bar']
Run Code Online (Sandbox Code Playgroud)
我原本希望得到以下内容:
foo, bar = d.get_tuple('foo', 'bar')
Run Code Online (Sandbox Code Playgroud)
我可以轻松编写一个不错的函数:
def get_selected_values(d, *args):
return [d[arg] for arg in args]
foo, bar = get_selected_values(d, 'foo', 'bar')
Run Code Online (Sandbox Code Playgroud)
但我一直怀疑还有一些其他的内置方式.
假设我有这个:
def a(dict):
locals().update(dict)
print size
def b():
size = 20
f(locals())
Run Code Online (Sandbox Code Playgroud)
如何size直接从a函数中访问变量我该怎么办?我知道 :
size = dict["size"]
Run Code Online (Sandbox Code Playgroud)
但我认为应该有更直接的方式.我尝试使用locals().update(dict)但它没有用.有更好的方式吗?