我有一个带有大约20-30个参数的函数
def function (a,b,c,d,e,....):
....
这些参数可能具有任何值,包括“无”。 但是我不想有大量的代码,例如:
if a is None:
....
if b is None: ....
如果满足条件,我该如何遍历每个var并重新分配其值?
ty
答案 0 :(得分:2)
除非您正在做一些非常奇特的事情,否则通常可以通过在数据结构中收集变量来更好地处理这种事情,例如像这样的dict
:
def function(**kwargs):
default = 42
for key, val in kwargs.items():
if val is None:
kwargs[key] = default
...
print(kwargs)
# Example call
function(a=1, b=None)
您可以使用exec
的法术将其分配给各个变量,但是通常不建议这样做。此外,我不清楚如何在函数内部成功使用此功能,例如exec('a = 42')
实际上并不会更改本地a
变量的值。
答案 1 :(得分:1)
如果函数的参数太多,则可以尝试使用可迭代的拆包运算符*
,而不是显式定义每个参数。这样,您将可以更好地控制参数的内容:-
def function(*args):
args = list(args)
for x, y in enumerate(args):
if y is None:
args[x] = "default_value"
print(args)
然后执行类似于:-
的函数调用function(123, 3, None, "hello")
输出:-
[123, 3, 'default_value', 'hello']
答案 2 :(得分:0)
我不建议您这样做,但是如果您坚持要这么做:
def function(a,b,c,d,e,...):
myvars = locals() # Get a dictionary of parameters
arg_names = myvars.keys() # Get their names
for k in arg_names: # Replace the ones whose value is None
if myvars[k] == None:
myvars[k] = 'None'