Python导入函数

Python导入函数,python,import,Python,Import,如果我的代码中定义了一个函数,那么让我们调用foo(),并使用以下代码: from mod1 import * 由于mod1包含一个同样名为foo()的函数并调用foo()函数,在对其求值时,这会覆盖我对该函数的原始定义吗 据我所知,会的 您需要重命名您所构建的foo()函数,或者将模块输入更改为 导入mod1并随后定义从mod1到mod1.foo()的foo()函数的任何用法,我得到以下信息: 文件mod1.py包含 def foo(): print "hello foo" 然后启

如果我的代码中定义了一个函数,那么让我们调用foo(),并使用以下代码:

from mod1 import *

由于mod1包含一个同样名为foo()的函数并调用foo()函数,在对其求值时,这会覆盖我对该函数的原始定义吗

据我所知,会的

您需要重命名您所构建的
foo()
函数,或者将模块输入更改为
导入mod1
并随后定义从
mod1
mod1.foo()
foo()
函数的任何用法,我得到以下信息:

文件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”

取决于函数的位置:

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
无论如何,模块导入中的
*
被认为是一种非常糟糕且容易出错的做法。它是一种使用名称空间std的
——C++中的类似事物。尽量避免它。

a.py 试验
它取决于函数定义和
import
语句的相对顺序。第二个执行的函数将覆盖第一个函数。

是导入之前还是之后的函数定义?(一般来说,这就是为什么最好避免
import*
)它是在导入之前定义的,是的,这只是我的一个类的练习,所以我理解它通常是糟糕的form-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