0

コードで定義された関数がある場合は、foo() を呼び出して、次のコードを使用します。

from mod1 import *

同じ名前の関数 foo() を含む mod1 を使用して foo() 関数を呼び出すと、関数が評価されるときに関数の元の定義が上書きされますか?

4

5 に答える 5

3

私の知る限り、そうなります。

foo()作成した関数の名前を変更するか、モジュール入力を読み取りに変更し import mod1その後foo()関数の使用mod1を定義する必要があります。mod1.foo()

于 2012-12-12T18:55:08.883 に答える
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 *非常に悪い、エラーが発生しやすい慣行と見なされます。using namespace std;これは、 C++の一種のようなものです。できるだけ避けてください。

于 2012-12-12T18:55:10.410 に答える
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」と出力されます

于 2012-12-12T18:55:09.587 に答える
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
于 2012-12-12T18:57:12.270 に答える
0

関数定義とimportステートメントの相対的な順序によって異なります。2 番目に実行された方が最初の実行をオーバーライドします。

于 2012-12-12T20:20:17.543 に答える