私の質問は、なぜ関数を再び呼び出すことができないのですか?または、どうやって作るのですか?
この関数があるとしましょう:
def a(x, y, z):
if x:
return y
else:
return z
そして私はそれを次のように呼びます:
print a(3>2, 4, 5)
私は4を得る。
しかし、関数と同じ名前の変数を(誤って)宣言するとします。
a=2
今、私がやろうとすると:
a=a(3>4, 4, 5)
または:
a(3>4, 4, 5)
「TypeError: 'int'オブジェクトは呼び出せません」というエラーが発生します
変数「a」を関数に割り当てることはできませんか?
これを行った後:
a = 2
a
はfunctionではなく、単なるintegerです(再割り当てしました!)。したがって、当然、インタプリタは、これを実行しているため、関数のように呼び出そうとすると文句を言います。
2()
=> TypeError: 'int' object is not callable
結論:関数、整数、またはPythonの他のオブジェクトであっても、同じ名前の2つのもの同時を使用することはできません。別の名前を使用してください。
names in pythonは通常、特定のタイプのidentifiers
であり、変数/関数を格納するボックスに名前を付けるようなものです/ methodまたはPythonの任意のオブジェクト。再割り当てするときは、ボックスの名前を変更するだけです。
あなたは以下を行うことでそれを見つけることができます。
最初にa
には、場所9
で値140515915925784
が割り当てられます。関数に同じ識別子を使用するとすぐに、a
は4512942512
でその関数のアドレスを含むボックスを参照するようになります
a
を3
に再割り当てすると、a
が別のアドレスを参照するようになります。
>>> a = 9
>>> id(a)
140515915925784
>>> def a(x):
... return x
...
>>> id(a)
4512942512
>>> a
<function a at 0x10cfe09b0>
>>>
>>>
>>>
>>> a = 3
>>> id(a)
140515915925928
>>> a
3
>>>
関数定義に名前aを割り当ててから、それを整数に再割り当てしています。
それは構文的には正しいですが、あなたが望むものではありません。
関数に渡される引数を使用して何をしているのかを説明する意味論的な名前を関数に与え、どのオブジェクトが指しているのかを説明する変数に意味論的な名前を与えるのが最善です。そうすれば、コードが読みやすくなり、間違いを犯すことはもうありません。