访问所有功能设备

JBe*_*ker 2 python function python-3.x

我有一个带有4个参数的函数,并希望检查这4个参数.目前我这样做:

def function1(arg1, arg2, arg3, arg4):
    arg1 = function2(arg1)
    arg2 = function2(arg2)
    arg3 = function2(arg3)
    arg4 = function2(arg4)

def function2(arg):
    arg = dosomething(arg)
    return arg
Run Code Online (Sandbox Code Playgroud)

我认为这不是一个很好的方法,所以我的想法是做这样的事情:

def function1(arg1, arg2, arg3, arg4):
    for arg in listOfArguments:
        arg = function2(arg)


def function2(arg):
    arg = checkSomething(arg)
    return arg
Run Code Online (Sandbox Code Playgroud)

有没有办法在Python中获取传递给所有参数的列表function1

感谢您的帮助和想法.

Jim*_*ard 6

既然你有一参数的数目只是创建一个迭代了出来,例如,在字面上的元组包的参数名:

for arg in (arg1, arg2, arg3, arg4):
    # do stuff
Run Code Online (Sandbox Code Playgroud)

如果你不介意你的函数能够被更多args调用,那么只需使用*args语法:

def function1(*args):
    for arg in args:
        arg = function2(arg)
Run Code Online (Sandbox Code Playgroud)

然后公开调用函数的参数作为可以迭代的元组.

如果你需要存储的结果每次调用时,最好是改变for-loop列表理解创建返回值的列表.例如,给定一个取值的函数并简单地添加2它:

def add2(arg):
    return arg + 2

def function1(arg1, arg2, arg3, arg4):
    a1, a2, a3, a4 = [add2(arg) for arg in (arg1, arg2, arg3, arg4)]
    print(a1, a2, a3, a4)
Run Code Online (Sandbox Code Playgroud)

我们创建一个列表理解,它将每个arg并提供给它add2,然后将它作为条目存储在列表中,然后我们解压缩到a1,..,aN.这些值现在包含函数调用的结果:

function1(1, 2, 3, 4)
3, 4, 5, 6
Run Code Online (Sandbox Code Playgroud)

在以前的示例(arg1, arg2, arg3, arg4)中,args如果*args在定义函数时使用语法,则总是可以替换,结果将类似.


作为附录,如果你更喜欢函数式编程,你可以随时map使用函数的参数并保存一些字符:-).我将添加这个时间的*args定义function1:

def function1(*args):
    a1, a2, a3, a4 = map(add2, args)
    print(a1, a2, a3, a4)
Run Code Online (Sandbox Code Playgroud)

结果相同.