这段代码在python中是什么意思,
它打印:这段代码在python中是什么意思,,python,Python,它打印: def a(): print 'sss' print getattr(a, "_decorated_function", a).__name__ def a(): w='www' print getattr(a,'w') 谢谢 更新 我的代码: a 但它打印: def a(): print 'sss' print getattr(a, "_decorated_function", a).__name__ def a(): w='www'
def a():
print 'sss'
print getattr(a, "_decorated_function", a).__name__
def a():
w='www'
print getattr(a,'w')
谢谢
更新
我的代码:
a
但它打印:
def a():
print 'sss'
print getattr(a, "_decorated_function", a).__name__
def a():
w='www'
print getattr(a,'w')
如果a有一个名为_\u函数的属性,那么它将返回该属性包含的内容,否则它将返回a。说真的,这就是全部。请参阅。它打印a的原因是a没有名为_\u函数的属性,而getattr的第三个参数是在第一个参数没有与第二个参数同名的属性时返回的默认值。因此,您的代码与以下代码相同:
Traceback (most recent call last):
File "D:\zjm_code\a.py", line 8, in <module>
print getattr(a,'w')
AttributeError: 'function' object has no attribute 'w'
毫不奇怪,a的名称是a,因此您可以将其作为输出。顺便说一句,我强烈建议您先搜索Python文档,然后再在StackOverflow上发布问题,因为您更有可能在那里更快地得到答案。您可能还会发现我的自定义搜索引擎在查找相关Python参考文档以供将来查询时非常有用。回答更新的问题
函数必须在声明后指定其属性
print a.__name__
另一种与其他OO语言更相似的方法是使用类。此示例将生成一个静态属性:
def a():
pass
a.w = 'www'
print a.w
这将使w在类a的所有实例之间共享,这是程序中最有用的常量。如果您在另一台计算机上处理变量并更改其值,则最好执行以下操作:
class a:
w = 'www'
print a.w
我猜一下:
代码可分为两个步骤:
class b:
def __init__(self):
self.w = 'www'
c = b()
print c.w
忽略第一行
第二行打印func的名称,在您的例子中,它恰好是“a”。不足为奇
第一行是关于装饰师的:
func = getattr(a, "_decorated_function", a)
print func.__name__
因此,您将调用getattra、\u修饰的\u函数、a的对象应该是函数或修饰了函数的类。您需要开始阅读文档:因为您是初学者,所以不会经常使用getattr,如果有,请更新标题,以便更具体地匹配问题,并可能对其进行澄清。你问这个问题的目的是什么,理解getattr还是在更新的部分中解决你的问题?此外,你完全错了,函数确实有属性。在python中,一切都是对象,记得吗?阅读@KillianDS的前几行抱歉,修正了!KillianDS,从技术上讲,函数确实有诸如name之类的属性,但显然这些属性不是局部变量。我认为您可以通过inspect或parser之类的方法获取局部变量,但这并不容易。