2010-04-08 78 views
1

在Python中,無法區分參數,局部變量和全局變量。最簡單的方式這樣做可能是有一些編碼約定如Python中的參數,局部變量和全局變量編碼約定

  • 全局變量開始_和大寫字母
  • 參數與結束_
 
_Gvariable = 10 
def hello(x_, y_): 
    z = x_ + y_ 

這是一個Pythonian方式去?我的意思是,是否有完善的/一致的編碼標準來區分它們在python中?

=== ===的新增

我只想參數和局部變量之間進行區分。由於參數是從外部給出的,並且更像ROM,因爲它不被認爲是隻讀的。 C++提供了const關鍵字來防止參數發生變化,但不能用於python。我認爲追加_可以成爲在python中模仿這個特性的一種方法。

+6

閱讀PEP 8:http://www.python.org/dev/peps/pep-0008/ – 2010-04-08 15:44:26

+1

是什麼激勵你想要這樣做?通常情況下,一個名字來源於此,而且很容易(除非你做了一些瘋狂的事情)從通過閱讀代碼中找出答案。 – 2010-04-08 16:50:30

+1

如果你想阻止函數改變參數,比如const,你可以在你傳入的對象上使用'copy'模塊作爲參數,這樣你就可以傳入一個副本而不是實際的對象。儘管如此,這也可能令人困惑。也許最好只編寫完全符合你想要的代碼,並編寫單元測試來確保。 – 2010-04-08 22:41:51

回答

2

我會根據PEP 8指南來做所有的python編程。任何必須閱讀你的代碼的人都會感謝你。

http://www.python.org/dev/peps/pep-0008/

爲什麼有必要參數和局部變量之間的區別,因爲一個僅僅是其他的子集。如果您遇到本地全局問題,則可以使用locals(),globals()vars()查看範圍。 inspect模塊也可以提供幫助。如果可能,儘可能避免使用全局變量。

0

這絕對是可怕的。沒有任何理由使用全局和本地對象的特殊命名方案。你也應該避免擁有全局對象,除非它們是函數,類或常量。

常量的名稱應該是大寫的,並用下劃線LIKE_THIS分隔,類名稱看起來像這樣,函數和方法名稱應該看起來像任何其他名稱。對於具體實現的對象名稱,可以隨時更改/刪除,或者由於任何其他原因不能依賴,應該以下劃線爲前綴。

您還應該閱讀Python styleguide PEP 8,其中涵蓋了這些以及更多與風格相關的規則,只要它們不會讓代碼不易讀。大多數Python項目遵循這個或至少是這個樣式指南的兼容版本。

1

python通常很明顯哪些變量是本地變量,哪些是全局變量,因爲要修改全局變量,您必須在函數的開頭使用關鍵字global來聲明它。不過,我有時候會添加一個全局聲明,即使python不需要編譯它,以強調一個對象是全局的 - 例如,修改可變的全局數據結構。

參數應該很明顯,因爲它們在函數聲明中。

正如其他人所說的常量應該在UPPER_CASE_WITH_UNDERSCORES中,這是一個由許多語言共享的約定。

如果您發現您在記錄全局,局部和參數變量時遇到困難,我建議您的問題可能是您的功能太長而且做得太多。功能&方法應該是簡短的並且完成一件事。如果我的函數經過大約10-20行代碼,我開始得到重構癢。

我推薦閱讀Robert Martin的Clean Code。這些例子是用Java編寫的,但是這些原則適用於所有的語言。