Python导入函数

时间:2012-12-12 18:49:46

标签: python import

如果我在代码中定义了函数,则调用foo(),并使用以下代码:

from mod1 import *

如果mod1包含一个同名foo()的函数并且调用foo()函数,那么在评估它时它会覆盖我原来的函数定义吗?

5 个答案:

答案 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)

a.py

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语句的相对顺序。无论哪个执行第二个都将覆盖第一个。