2011-03-20 54 views
1

可以將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 
+0

你稱之爲「可選參數」是什麼? A還是? – eyquem 2011-03-24 00:18:41

回答

1

它會工作,但我認爲很多人會因此而灰心喪氣,因爲它很容易混淆。

編程工作的一半是獲取有效的代碼。另一半是編寫清晰明瞭的代碼,以便你(或其他人)一年後可以瞭解它。

-2

如果您想將變量傳遞給它,它會失敗。

但是最好的命名實踐是你的函數和變量不叫a,f,g,x。那麼你不太可能會發生碰撞。

+0

如果您想將變量傳遞給它,它會如何失敗? – 2015-06-08 00:15:47

2

它會工作,雖然它可以很容易有點混亂,但它是完全有效的。這是由於函數和對函數的調用發生在不同的名稱空間中。所以,如果你寫:

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/

-1

停止在Python中使用「變量」一詞!

有在意義上的「的存儲器塊,其值可以改變」

而使用的「可變的」是「識別符」或「名稱」的同義詞是混亂不變量;

Pleaaaase!

+1

Pleeease!停止堅持「變量」一詞意味着一大塊內存。這意味着一個名稱的價值可能會隨着時間而變化。 Python有他們。 – 2012-12-09 17:00:07