gpt4 book ai didi

python getattr 内置方法执行默认参数

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:46 29 4
gpt4 key购买 nike

我不知道这是否是 getattr built_in 方法的预期行为。getattr 也会执行默认的(第三个)参数,即使实际参数(第二个)满足条件。示例:

def func():
print('In Function')

class A:
def __init__(self):
self.param = 12

a = A()

当我运行 getattr(a, 'param', func()) 时,它给出了这个结果:

In Function
12

注意我不想要的 In Function

但是当我执行 getattr(a, 'param1', func()) 即输出时它工作得很好

In Function

但如果满足条件,我只希望结果为 12。请告诉我为什么 getattr 有这样的行为,我们可以阻止他们这样做吗(如果有第二个参数,则不执行第三个参数),如果分享替代方法,我们将不胜感激Pythonic 方式。首先想到的一件事是使用 hasattr 检查 param1 是否存在,然后执行必要的操作。

最佳答案

在执行 getattr 之前,必须评估所有传递的参数。 func() 是这些参数之一,尝试对其求值将执行 print 语句。无论是否找到该属性,func() 都必须先验评估。

这不是 getattr 特有的,它是函数及其参数在 Python 中的工作方式。


考虑以下几点:

>>> def does_nothing(any_arg): pass
...
>>> def f(): print("I'll get printed")
...
>>>
>>> does_nothing(f())
I'll get printed

函数 does_nothing 实际上对传递的参数不做任何事情。但是必须先评估参数,然后才能通过函数调用。


不过,print 语句不会影响 getattr 的结果;有点副作用。如果未找到属性,则使用函数的 return 值。

关于python getattr 内置方法执行默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38589823/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com