2017-03-19 4 views
-5

Pythonプログラムでは、ローカルに定義された関数があり、もう1つは他のモジュールからインポートしたものです。どちらが実行されますか?Pythonでは、インポートしたものと同じ名前の関数があるとどうなりますか?どちらが実行されますか?

from example.maths import multiply 

def multiply(a,b): 
    ----- 

multiply(2,3) 

また、私はcythonで関数を記述してインポートしたいと思っています。また、同時に、ユーザーにcythonがインストールされていない場合は、ローカルで定義された関数を保持します。これはどのように達成できますか?

+4

それを試してみて、参照してください。 – TigerhawkT3

+2

@PrakharPratyushあなたはあなたの質問に多少の努力をする必要があります。 See [ask]。 –

+2

downvoteボタンのホバーテキストが始まります。「この質問には研究努力はありません...」 –

答えて

0

同じ名前の2つの名前がある場合は、実行時に渡された新しい名前が残ります。インポートした乗算をオーバーライドしないため、import...asステートメントを使用して、その乗算に別の名前を付けることができます。また、cythonは基本的にインポート時と同じです。

from example.maths import multiply as multi 

def multiply(a,b): 
    ----- 

multiply(2,3) 
# multi(2,3) 
0

まあ、これは良いコーディング手法とは考えられません。インポートされた関数と同じ名前の関数を決して定義するべきではありません。

あなたの場合、ローカルで定義した機能は、インポートされた機能よりも優先されます。このように考える:__main__のコードで定義されているいくつかの変数があり、ある関数の一部の変数に同じ名前を使用すると、その変数は最初の変数を "上書き"します。輸入でも同じことが起こります。

0

です。 新しい関数を定義した後にmultiplyを呼び出すと、ローカルで定義された関数が呼び出されます。前にmultiplyを呼び出すと、インポートされた関数で作業します。

のPython 3で短い例:Pythonプログラムで

import math 
print(math) 
# <module 'math' from '/usr/local/lib/python3.5/lib-dynload/math.cpython-35m-x86_64-linux-gnu.so'> 

def math(): 
    pass 

print(math) 
# <function math at 0x7fe5a376db70> 
0

、我々はローカルに定義された関数、我々はいくつかの他のモジュールからインポートされた別のものを持っている場合。どちらが実行されますか?

あなたのものが前のものに置き換わり、私はIDEがあなたにそれに関する警告を与えると信じています。最初print(globals())が印刷されます

from math import floor 

print(globals()) 

def floor(x): 
    print 'hello, ' + x 

print(globals()) 

{'floor': <built-in function floor>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'test.py', '__package__': None, '__name__': '__main__', '__doc__': None}

あなたはそれを呼び出しての時点で現在のモジュールで使用可能なすべてのグローバルシンボルを参照する組み込み関数globalsを使用することができます

しかし、2番目のものが印刷されます:

{'floor': <function floor at 0x104649cf8>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'test.py', '__package__': None, '__name__': '__main__', '__doc__': None}

記号floorが後のものに置き換えられているのがわかります。

また、私はcythonで関数を書いてそれをインポートしたいと思っています。また、同時に、ユーザーにcythonがインストールされていない場合は、ローカルで定義された関数を保持します。これはどのように達成できますか?

あなたはそれを達成するために以下の方法を使用することができます。

try: 
    from your_module import func_maybe_not_exist 
except ImportError: 
    def func_maybe_not_exist(): 
     print "local implementation" 

if __name__ == '__main__': 
    func_maybe_not_exist() 
関連する問題