Python导入函数
如果我的代码中定义了一个函数,那么让我们调用foo(),并使用以下代码: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" 然后启
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