将值重新分配给函数的args

时间:2019-06-24 15:48:57

标签: python

我有一个带有大约20-30个参数的函数

def function (a,b,c,d,e,....):

     ....
这些参数可能具有任何值,包括“无”。
我想在函数执行魔术操作之前,为每个具有“ None”值的var重新分配指定的字符串。

但是我不想有大量的代码,例如:

if a is None:
     ....
if b is None: ....

如果满足条件,我该如何遍历每个var并重新分配其值?

ty

3 个答案:

答案 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'