コードで定義された関数がある場合は、foo() を呼び出して、次のコードを使用します。
from mod1 import *
同じ名前の関数 foo() を含む mod1 を使用して foo() 関数を呼び出すと、関数が評価されるときに関数の元の定義が上書きされますか?
私の知る限り、そうなります。
foo()
作成した関数の名前を変更するか、モジュール入力を読み取りに変更し
、import mod1
その後foo()
関数の使用mod1
を定義する必要があります。mod1.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
とにかく、from module import *
非常に悪い、エラーが発生しやすい慣行と見なされます。using namespace std;
これは、 C++の一種のようなものです。できるだけ避けてください。
私は以下を取得します:
ファイル 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():
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
関数定義とimport
ステートメントの相対的な順序によって異なります。2 番目に実行された方が最初の実行をオーバーライドします。