Python 为动态参数提供默认值,而不使用代码访问原始变量

Python 为动态参数提供默认值,而不使用代码访问原始变量,python,python-3.x,Python,Python 3.x,因此,这是给定错误变量名时的默认行为: >>> foo Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'foo' is not defined >>> (foo自动分配为无) 我在动态参数处理中使用它,并且希望使用一种行为,如果没有给出参数,则使用默认值。我有一些我无法控制的代码,它们使用了None处理

因此,这是给定错误变量名时的默认行为:

>>> foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> 
foo
自动分配为无)

我在动态参数处理中使用它,并且希望使用一种行为,如果没有给出参数,则使用默认值。我有一些我无法控制的代码,它们使用了
None
处理。我是否可以只添加一些如下所示的动态标题,通过不更改所有其他代码来避免混乱

# This may work in python2 but not python3
def foo(self,params):
    local = locals()
    for key in params:
        local[key] = params[key]
    # Do important things onwards, cannot change
编辑:解决上述特定问题的一种方法是提供一个默认选项,例如:

options = foo.get_default_params()
# do whatsoever changes to modify options
result = foo.call(options)
这假定默认参数表可用。当您甚至没有默认的参数表,或者无法生成一个(无限可能的参数,如print())时,它仍然可行吗


编辑:为了将问题集中到方法论中,我重新表述了标题并删除了覆盖NameError的引用。

我不认为Python提供了类似的功能。但是,您始终可以这样做:

try:
    foo
except NameError:
    foo = None

# do whatever with foo
如果您试图定义一个函数,我会这样定义它:

def baz_func(foo=None):
    # function body here

您可以将其称为
baz_func()
baz_func(foo=5)

这听起来像是一个糟糕的想法。这就像运行VB时没有在程序开头添加“Options Explicit”。是的,我认为这是一个糟糕的(开发模式方面的)想法,会使错误无法检测到,我只是想知道这是否可行。完全重构可能是另一种方式,但成本很高。正如文档所示,分配给
局部变量
条目甚至不起作用。为什么不使用
get
方法的
params
,或者默认参数值,或者
defaultdict(lambda:None)
,或者任何比这里更好的选项呢?如果我能控制这部分代码(或者说,我可以重构),肯定会有很多更好的操作。当变量在旧代码中已经被引用为函数参数,而我无法更改它,但仍然希望获得param dict的好处时,有什么好的方法来处理这个问题吗?原因有两个。1.如果不是foo,您已经有了由
引发的
namererror
。2.事实上,他所要求的在Python中是可能的。我编辑了我最初打算写的答案,但我不知道Python提供了类似的东西。谢谢。我是问你是否“你不知道参数列表”。还有可能吗?
def baz_func(foo=None):
    # function body here