可以將python函數中的可選參數賦予與外部變量相同的名稱嗎? 它似乎正常工作,因爲下面定義的函數f和g給出相同的輸出。但是,這被認爲是不好的做法,並且在某些情況下會失敗嗎?python函數中可選參數的命名練習
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給出相同的輸出。但是,這被認爲是不好的做法,並且在某些情況下會失敗嗎?python函數中可選參數的命名練習
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
它會工作,但我認爲很多人會因此而灰心喪氣,因爲它很容易混淆。
編程工作的一半是獲取有效的代碼。另一半是編寫清晰明瞭的代碼,以便你(或其他人)一年後可以瞭解它。
如果您想將變量傳遞給它,它會失敗。
但是最好的命名實踐是你的函數和變量不叫a,f,g,x。那麼你不太可能會發生碰撞。
如果您想將變量傳遞給它,它會如何失敗? – 2015-06-08 00:15:47
它會工作,雖然它可以很容易有點混亂,但它是完全有效的。這是由於函數和對函數的調用發生在不同的名稱空間中。所以,如果你寫:
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
它會工作,作爲主命名空間VAR1比在功能命名空間VAR1一個完全不同的變量。而且某些功能的調用將如圖所示工作,即使你在一行中看到 - 使用var2兩次。但是,正如你在解釋困難時看到的那樣,這樣做會產生一些混淆,所以如果可以的話,更好地跳過這樣的事情。 Pythons的主要優點之一是它的可讀性,你應該通過你的編碼風格來支持它。
命名變量a和其他變量A是你應該避免的東西。請閱讀pyhton的命名約定:www.python.org/doc/essays/styleguide.html並閱讀有關命名空間的信息:http://bytebaker.com/2008/07/30/python-namespaces/
停止在Python中使用「變量」一詞!
有在意義上的「的存儲器塊,其值可以改變」
而使用的「可變的」是「識別符」或「名稱」的同義詞是混亂不變量;
Pleaaaase!
Pleeease!停止堅持「變量」一詞意味着一大塊內存。這意味着一個名稱的價值可能會隨着時間而變化。 Python有他們。 – 2012-12-09 17:00:07
你稱之爲「可選參數」是什麼? A還是? – eyquem 2011-03-24 00:18:41