コードで定義された関数がある場合は、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 番目に実行された方が最初の実行をオーバーライドします。