如果我在代码中定义了函数,则调用foo(),并使用以下代码:
from mod1 import *
如果mod1包含一个同名foo()的函数并且调用foo()函数,那么在评估它时它会覆盖我原来的函数定义吗?
答案 0 :(得分:3)
据我所知,它会。
您需要重命名已构建的foo()
函数或更改您的模块输入以进行读取
import mod1
随后定义了从foo()
到mod1
mod1.foo()
函数的任何用法
答案 1 :(得分:3)
取决于功能的位置:
def foo():
pass
from mod1 import *
foo() # here foo comes from mod1
# -------
# another interesting case
def foo():
from mod1 import *
foo() # this will also call foo from mod1
foo() # but this one is still the foo defined above.
# ---------
# The opposite
from mod1 import *
def foo():
pass
foo() # here foo is the one defined above
无论如何,from module import *
被认为是非常糟糕且容易出错的做法。它是C ++中的using namespace std;
类似的东西。尽量避免使用它。
答案 2 :(得分:1)
我得到以下内容:
文件mod1.py包含
def foo():
print "hello foo"
然后我启动python解释器并执行以下操作:
>>> def foo():
... print "hello world"
...
>>> from mod1 import *
>>> foo()
hello foo
>>>
是的,它会覆盖。
除非你这样做,否则新的
def foo():
print "new foo"
在这种情况下,它会打印“new foo”
答案 3 :(得分:1)
def foo():
print 'Hello A'
>>> def foo():
... print 'Hello 1'
...
>>> foo()
Hello 1
>>> from a import *
>>> foo()
Hello A
>>> def foo():
... print 'Hello 2'
...
>>> foo()
Hello 2
答案 4 :(得分:0)
它取决于函数定义和import
语句的相对顺序。无论哪个执行第二个都将覆盖第一个。