2024-04-19 14:49:50 发布
网友
我试图在python的另一个函数中调用一个函数,但是找不到正确的语法。我想做的是这样的事情:
def wrapper(func, args): func(args) def func1(x): print(x) def func2(x, y, z): return x+y+z wrapper(func1, [x]) wrapper(func2, [x, y, z])
在这种情况下,第一个呼叫将起作用,第二个不起作用。 我要修改的是包装器函数,而不是被调用的函数。
对于可变长度参数,可以使用*args和**kwargs语法。
What do *args and **kwargs mean?
从官方的python教程
http://docs.python.org/dev/tutorial/controlflow.html#more-on-defining-functions
在其他答案上稍加扩展:
行中:
def wrapper(func, *args):
args旁边的*表示“获取给定的其余参数并将它们放入名为args的列表中”。
args
func(*args)
这里args旁边的*表示“获取名为args的列表并将其“展开”到其余参数中。
因此您可以执行以下操作:
def wrapper1(func, *args): # with star func(*args) def wrapper2(func, args): # without star func(*args) def func2(x, y, z): print x+y+z wrapper1(func2, 1, 2, 3) wrapper2(func2, [1, 2, 3])
在wrapper2中,列表被显式传递,但在两个包装器中args都包含列表[1,2,3]。
wrapper2
[1,2,3]
包装函数的最简单方法
func(*args, **kwargs)
。。。是手动编写一个包装器,该包装器将在自身内部调用func():
def wrapper(*args, **kwargs): # do something before try: return func(*a, **kwargs) finally: # do something after
在Python中,函数是一个对象,因此可以将它的名称作为另一个函数的参数传递并返回它。您还可以为任何函数编写包装生成器anyFunc():
def wrapperGenerator(anyFunc, *args, **kwargs): def wrapper(*args, **kwargs): try: # do something before return anyFunc(*args, **kwargs) finally: #do something after return wrapper
还请注意,在Python中,当您不知道或不想命名函数的所有参数时,您可以引用一个参数元组,该参数元组由其名称表示,在函数名称后面的括号中加上星号:
*args
例如,可以定义一个函数,该函数可以接受任意数量的参数:
def testFunc(*args): print args # prints the tuple of arguments
Python提供了对函数参数的进一步操作。您可以允许函数接受关键字参数。在函数体中,关键字参数保存在字典中。在函数名后面的括号中,此字典由两个星号和字典名表示:
**kwargs
打印关键字参数字典的类似示例:
def testFunc(**kwargs): print kwargs # prints the dictionary of keyword arguments
对于可变长度参数,可以使用*args和**kwargs语法。
What do *args and **kwargs mean?
从官方的python教程
http://docs.python.org/dev/tutorial/controlflow.html#more-on-defining-functions
在其他答案上稍加扩展:
行中:
args
旁边的*表示“获取给定的其余参数并将它们放入名为args
的列表中”。行中:
这里
args
旁边的*表示“获取名为args的列表并将其“展开”到其余参数中。因此您可以执行以下操作:
在
wrapper2
中,列表被显式传递,但在两个包装器中args
都包含列表[1,2,3]
。包装函数的最简单方法
。。。是手动编写一个包装器,该包装器将在自身内部调用func():
在Python中,函数是一个对象,因此可以将它的名称作为另一个函数的参数传递并返回它。您还可以为任何函数编写包装生成器anyFunc():
还请注意,在Python中,当您不知道或不想命名函数的所有参数时,您可以引用一个参数元组,该参数元组由其名称表示,在函数名称后面的括号中加上星号:
例如,可以定义一个函数,该函数可以接受任意数量的参数:
Python提供了对函数参数的进一步操作。您可以允许函数接受关键字参数。在函数体中,关键字参数保存在字典中。在函数名后面的括号中,此字典由两个星号和字典名表示:
打印关键字参数字典的类似示例:
相关问题 更多 >
编程相关推荐