python getattr内置方法执行默认参数
我不知道这是否是python getattr内置方法执行默认参数,python,python-2.7,getattr,Python,Python 2.7,Getattr,我不知道这是否是getattr内置方法的预期行为。 getattr即使实际参数(第2个)满足条件,也会执行默认(第3个)参数。 例如: 当我运行getattr(一个'param',func())时,它给出以下结果: In Function 12 注意我不想要的函数中的 但是当我执行getattr(一个'param1',func())I.e.output时,它工作得非常好 In Function 但是如果满足条件,我只希望结果为12。请让我知道为什么getattr有这样的行为,我们能阻止他们这
getattr
内置方法的预期行为。
getattr
即使实际参数(第2个)满足条件,也会执行默认(第3个)参数。
例如:
当我运行getattr(一个'param',func())
时,它给出以下结果:
In Function
12
注意我不想要的函数中的
但是当我执行getattr(一个'param1',func())
I.e.output时,它工作得非常好
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
函数不执行任何操作
实际上对传递的参数不执行任何操作。但是在函数调用完成之前,必须对参数进行求值
但是,print
语句不会影响getattr
的结果;有点副作用。如果未找到属性,则使用函数的返回值。我认为这将是添加额外函数的开销,相反,我认为应该使用hasattr
检查。尽管如此,谢谢。如果您不想在a
具有attrparam
时计算func()
,您可以更改为:getattr(a,'param',None)或func()
。或
之后的任何有效代码都会变懒。谢谢@Chang.Jian,这是一个有用的技巧。我怎么会错过这个,它不是完全相等的。如果或
之前的值为falsy,如0或False,则或
之后的代码也将运行
>>> def does_nothing(any_arg): pass
...
>>> def f(): print("I'll get printed")
...
>>>
>>> does_nothing(f())
I'll get printed