Python関数のオプションの引数に外部変数と同じ名前を付けても大丈夫ですか?以下に定義されている関数fとgは同じ出力を提供するため、正常に機能しているようです。しかし、これは悪い習慣と見なされ、場合によっては失敗しますか?
a = 1
def f(x,A=a): return x*A
def g(x,a=a): return x*a
print g(2)
>> 2
print g(2,a=2)
>> 4
Python関数のオプションの引数に外部変数と同じ名前を付けても大丈夫ですか?以下に定義されている関数fとgは同じ出力を提供するため、正常に機能しているようです。しかし、これは悪い習慣と見なされ、場合によっては失敗しますか?
a = 1
def f(x,A=a): return x*A
def g(x,a=a): return x*a
print g(2)
>> 2
print g(2,a=2)
>> 4
それは動作しますが、少し混乱する可能性がありますが、完全に有効です。これは、関数と関数の呼び出しが異なる名前空間で発生するためです。したがって、次のように記述します。
def some_function(var1,var2=somevalue): #var1 & var2 of functions namespace
some things happening here
var1 = somevalue #mainspace var1
var2 = somevalue #mainspace var2
some_function(var1,var2=var2)
#upper line: first var2 = from function, second var2 = from mainspace
main名前空間のvar1は、functions名前空間のvar1とはまったく異なる変数であるため、機能します。また、var2を1行で2回使用しているように見えても、somefunctionの呼び出しは次のように機能します。しかし、説明しながら難しさを見るとわかるように、これを行うと混乱が生じるので、できればそのようなことはスキップしたほうがいいでしょう。他のいくつかの言語に対するPythonの主な利点の1つは、読みやすさです。コーディングスタイルを通じてそれをサポートする必要があります。
また、変数aやその他の変数Aに名前を付けることも、避ける必要があります。ここでpyhtonの命名規則について読んでください:www.python.org/doc/essays/styleguide.htmlそしてここで名前空間について読んでください: http: //bytebaker.com/2008/07/30/python-namespaces/
それは機能しますが、混乱しやすいので、多くの人がそれを思いとどまらせると思います。
プログラミングの仕事の半分は、機能するコードを取得することです。残りの半分は、あなた(または他の誰か)が1年後にそれを理解できるように、明確で明白なコードを書くことです。
Python で「変数」という言葉を使うのはやめましょう!
「値が変化する可能性のあるメモリのチャンク」という意味での変数はありません
また、「識別子」または「名前」の同義語としての「変数」の使用は混乱を招きます。
お願いします!
変数を渡したい場合は失敗します。
ただし、最良の命名方法は、関数と変数がa、f、g、xと呼ばれない方法です。そうすれば、衝突する可能性は低くなります。