如何使用内置函数如果它的名称被另一个模块占用?
比如,Python里面有一个内置的函数叫做 any
。问题是,当你导入了 numpy
这个模块后,any
函数的定义就会被改变。
那么,我该如何使用原来的 any
函数,也就是在 __builtin__
模块里的那个呢?
举个例子:
from numpy import *
any(i % 3 for i in [3, 3, 4, 4, 3])
但是这段代码是不能运行的!抱歉,我在Python方面还是个新手。
2 个回答
1
你应该尽量避免使用“from name import *”这种写法。因为这样做会引发一些问题,所以大家都不太喜欢这样。
import numpy as np
np.any(i % 3 for i in [3, 3, 4, 4, 3])
这样你就能清楚地知道自己在用什么,以及这些东西是从哪里来的。这样代码看起来更清晰,也更容易理解。
from name import *
这样做其实很糟糕,因为你根本不知道自己到底引入了什么。如果这个包里有很多模块,而你并不需要用到它们,它们都会被一起引入。你只想要你需要用的部分。有些库可能会非常庞大,这样就会引入很多你根本不需要的东西。
11
你仍然可以通过__builtin__
模块来访问这个对象:
import __builtin__
__builtin__.any(i % 3 for i in [3, 3, 4, 4, 3])
(在Python 3中,这个模块被改名为builtins
;去掉了下划线,并且变成了复数形式。)
你可以在导入所有内容之前,把any
赋值给一个不同的名字:
bltin_any = any
from numpy import *
bltin_any(i % 3 for i in [3, 3, 4, 4, 3])
或者不要使用import *
。可以试试用import numpy as np
,然后用np.any()
来调用NumPy的版本。