【发布时间】:2018-02-03 15:17:28
【问题描述】:
使用Python函数语法def f(**kwargs),在函数中创建了一个关键字参数字典kwargs,并且字典是可变的,所以问题是,如果我修改kwargs字典,是否有可能在我的职能范围之外有什么影响?
根据我对字典解包和关键字参数打包工作原理的理解,我认为没有任何理由相信它可能不安全,而且在我看来,在 Python 3.6 中没有这种危险:
def f(**kwargs):
kwargs['demo'] = 9
if __name__ == '__main__':
demo = 4
f(demo=demo)
print(demo) # 4
kwargs = {}
f(**kwargs)
print(kwargs) # {}
kwargs['demo'] = 4
f(**kwargs)
print(kwargs) # {'demo': 4}
但是,这是特定于实现的,还是 Python 规范的一部分?我是否忽略了任何情况或实现(除非修改自身可变的参数,例如kwargs['somelist'].append(3))这种修改可能是一个问题?
【问题讨论】:
-
对我来说,你的测试足以证明你的实现是安全的。还是够了吗?我很想知道答案。
-
@Rightleg 这个问题是在 FOSS 库函数的上下文中提出的,该函数旨在支持许多实现和用例。我相当确信它是安全的,但我没有任何铁定的理由会说:“如果这在某些实现中不安全,那就是一个错误。”
标签: python function dictionary scope