2014-04-30 170 views
-1

函數調用變量,我有點新的Python的 - 初學者移動到中間 - 並想知道更多有經驗的Python程序員如何命名他們的電話和函數變量。相同功能

具體而言,我喜歡的名字調用變量一樣被調用函數的「接收」的變量。同上返回變量。

工作正常,但在那裏我可能會遇到的問題,在未來的變化,以global變量之外?

一個例子電話:v_Array = f_InitSpecified2DArray(v_Width,v_Length) 調用的例子或「接收」功能:def f_InitSpecified2DArray(v_Width, v_Length): 和我做同樣的回報,以及:return v_Array

def f_InitSpecified2DArray(v_Width, v_Length): 
    v_Array = [v_Width, v_Length] 
    return v_Array 

v_Array = f_InitSpecified2DArray(v_Width,v_Length) 

的問題是:我應該期望產生的任何衝突從函數return內部的名稱v_Array的重用以及後來的調用代碼中,它被分配到具有相同名稱的變量v_Array

謝謝。

回答

1

不,這不會引起您的困難,並且不會引起混淆 - 對於您,您的讀者或Python解釋器。當然,爲了與參數名稱不同,混淆不清新名稱是不必要的。事實上,你會經常遇到被同時用於命名參數和它的參數相同的名稱,如

runner = DocTestRunner(verbose=verbose, optionflags=optionflags) 

它來自doctest.py中(對於Python 3.3)的標準庫。

在標準庫中搜索此模式<name>=<same_name>(濫用我將在稍後解決的表示法)是有益的,因爲它的出現只是您詢問的示例。在OS X和Linux,以下命令將顯示在標準庫與模式的出現所有行(加站點包):

grep -Er --include=*.py '(\b[[:alnum:]]+\b)=\1\b' /path/to/pythonlib 

在Mac上,例如,/path/to/pythonlib爲Python 3.3,通常是/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3

此命令顯示多少行功能的結構,其中有許多多次出現:

grep -Er --include=*.py '(\b[[:alnum:]]+\b)=\1\b' /path/to/pythonlib | wc -l 

我得到的1129計數,其中包括我的站點包子目錄幾十個。換句話說,這很常見。

+0

Brian,好東西。感謝您的答案和信息。 –

+0

不客氣。你的問題讓我好奇,它是多麼普遍。現在我們知道 - 非常:) – BrianO

+0

PS在grep正則表達式中的第二個'\ b'是不必要的。 – BrianO

0

閱讀PEP 008題爲「風格指南Python代碼」

你似乎尋找的東西更精確,更系統的,這個我明白,但你會安全很多的努力和困惑,以自己和他人處理您的代碼,如果你試圖使用PEP 008。

像往常一樣,你不會發現它隨處可見,但那就是生活。

如果您有關函數名稱和變量的問題--PEP 008建議使用小寫字母名稱,並用下劃線分隔單詞。

局部變量名是無關緊要的,它真的不要緊,你用什麼變量名return

而且不要將移動變量過早計劃到全局範圍內,你實際上應該朝另一個方向工作。

+0

一月,感謝您的回覆。雖然有些新鮮,但我從來沒有聽說過PEP 008.但是,我主要對人們如何在他們的通話中將他們的變量命名爲「狂野」中的功能感到好奇,爲什麼以及潛在的隱患可能會潛伏。 –

+0

@Raw_Input我看到你的方法非常系統化。 PEP 008正在總結您的問題的答案。你也可以檢查許多Python包的源代碼 - 請參閱pypi.python.org,選擇一些託管在GitHub上並查看代碼。樣品包裝是例如請求,鹽,燒瓶,Django,CherryPy ..成千上萬。你會發現許多來自PEP 008的改道,但沒有人使用你提出的風格。 –

+1

1月,我沒有要求提供關於我的變量命名風格的反饋,但是如果在函數調用和函數本身中使用相同的名稱可能存在將來的問題。謝謝。 –