Bas*_*asj 18 python module function python-import
这里:
from os.path import exists as foo
print foo.__name__
Run Code Online (Sandbox Code Playgroud)
我们得到:'exists'.为什么不'foo'呢?哪个属性会给出'foo'?
tim*_*geb 34
您可以只查看import foo as bar作业.在为函数__name__指定其他名称时,您不希望函数更改其属性.
>>> def foo(): pass
>>>
>>> foo.__name__
'foo'
>>> bar = foo
>>> bar.__name__
'foo'
Run Code Online (Sandbox Code Playgroud)
谢谢.那么变量的哪个属性
bar会返回字符串'bar'呢?
没有这样的属性.Names(bar)单向引用值(函数对象).
__name__函数的属性设置为使用
def ...语法定义函数的名称.这就是为什么__name__如果定义匿名函数并foo在创建名称后指定名称,则不会获得有意义的属性.
>>> foo = lambda: None
>>> foo.__name__
'<lambda>'
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 15
导入对象只是绑定一个新变量,所有添加的as newname操作都允许您选择一个替代名称用于当前命名空间中的变量.
在__name__对象上的属性没有提到它当前绑定到,你可以有任意数量的变量以及容器,如列表或字典指向同一个对象,毕竟名称:
def foo(): pass
bar = foo
spam = foo
list_of_functions = [foo]
dictionary_of_functions = {'monty': foo, 'python': foo}
Run Code Online (Sandbox Code Playgroud)
上面创建了4个对函数对象的附加引用; 你不能foo.__name__反映所有这些,并且引用中list_of_functions和dictionary_of_functions不(直接)具有名称.
由于import foo,import bar as foo,from module import foo和from module import bar as foo所有刚刚成立的名字foo在当前模块中,处理它们的确切方式与其他任务一样.您也可以使用不同的名称多次导入该函数.
相反,__name__函数的值设置为在def <name>(...):语句中定义的名称.它至多是一个调试辅助工具.例如,它用于回溯,以便更容易识别回溯中显示的代码行.__name__如果有助于更好地识别位置,您只需将其设置为其他内容.(注意:在Python 3中,还有一个__qualname_属性,而不是__name__因为它包含有关在类上嵌套或定义时定义函数的位置的更多信息).