有人可以解释函数 getattr(Object, function) 在传递变量时如何工作吗?
Could someone please explain how the function getattr(Object, function) works when passed variables?
所以我正在研究一些 hackerrank 问题,有人发布了以下代码片段作为解决方案的一部分,我很好奇是否有人可以向我解释一下?
getattr(l, parts[0])(*(map(int, parts[1:])))
在以下线程中:
Python using getattr to call function with variable parameters
Mgilson 提到这可以对任何 function/method 完成,我感到困惑。
在 getattr() 文档中,我没有发现在函数后传递 *args 的信息,因此感到困惑。这种方法是否普遍适用于所有功能?如果是这样,有人可以提供一些基本示例并解释为什么这是真的吗?
非常感谢!
您不会在 getattr
的文档中找到它,因为通过
使用 *
运算符的函数参数是完全不同的
东西。
此代码:
l = "my_fun"
getattr(l, parts[0])(*(map(int, parts[1:])))
实际上等同于:
l = "my_fun"
fun = getattr(l, parts[0])
fun(*(map(int, parts[1:])))
你得到了名为my_fun
的函数,然后调用这个函数。 map(int, parts[1:])
将 parts[1:]
的项目映射到整数,然后 *
运算符解压缩这些整数以将它们用作 fun
.
的参数
所以只要调用的函数有多个
参数等于 len(parts[1:])
.
这是另一个包含两个文件的示例。
# my_pack/__init__.py
def fun1(x):
print('x =', x)
def fun2(x, y):
print('x =', x, ', y =', y)
# test.py
import my_pack
args = [1]
fun = getattr(my_pack, 'fun1')
fun(*args)
# equivalent solution
fun = getattr(my_pack, 'fun1')(*args)
args = [1, 2]
fun = getattr(my_pack, 'fun2')(*args)
@mgilson说的就是这个调用函数的原理
没有明确列出它的所有参数,而是使用 *
运算符完全独立于 getattr
。比如这里
我不使用 getattr
:
的地方
def my_cool_func(a, b, c):
print(a, b, c)
my_cool_func(*[1, 2, 3]) # prints "1 2 3"
所以我正在研究一些 hackerrank 问题,有人发布了以下代码片段作为解决方案的一部分,我很好奇是否有人可以向我解释一下?
getattr(l, parts[0])(*(map(int, parts[1:])))
在以下线程中:
Python using getattr to call function with variable parameters
Mgilson 提到这可以对任何 function/method 完成,我感到困惑。
在 getattr() 文档中,我没有发现在函数后传递 *args 的信息,因此感到困惑。这种方法是否普遍适用于所有功能?如果是这样,有人可以提供一些基本示例并解释为什么这是真的吗?
非常感谢!
您不会在 getattr
的文档中找到它,因为通过
使用 *
运算符的函数参数是完全不同的
东西。
此代码:
l = "my_fun"
getattr(l, parts[0])(*(map(int, parts[1:])))
实际上等同于:
l = "my_fun"
fun = getattr(l, parts[0])
fun(*(map(int, parts[1:])))
你得到了名为my_fun
的函数,然后调用这个函数。 map(int, parts[1:])
将 parts[1:]
的项目映射到整数,然后 *
运算符解压缩这些整数以将它们用作 fun
.
所以只要调用的函数有多个
参数等于 len(parts[1:])
.
这是另一个包含两个文件的示例。
# my_pack/__init__.py
def fun1(x):
print('x =', x)
def fun2(x, y):
print('x =', x, ', y =', y)
# test.py
import my_pack
args = [1]
fun = getattr(my_pack, 'fun1')
fun(*args)
# equivalent solution
fun = getattr(my_pack, 'fun1')(*args)
args = [1, 2]
fun = getattr(my_pack, 'fun2')(*args)
@mgilson说的就是这个调用函数的原理
没有明确列出它的所有参数,而是使用 *
运算符完全独立于 getattr
。比如这里
我不使用 getattr
:
def my_cool_func(a, b, c):
print(a, b, c)
my_cool_func(*[1, 2, 3]) # prints "1 2 3"