看板 Translate-CS 關於我們 聯絡資訊
※ [本文轉錄自 Python 看板 #1HYkY8-Z ] 作者: sandwichC (沒回應=掛站) 看板: Python 標題: [翻譯] Google 建議的 Python 風格指南 16 時間: Thu May 9 08:06:28 2013 這種段落分明的短文,其實很適合用類似維基式的方法,結合眾人的力量翻譯完 成。其實更維基的方法應該是讓所有人也都可以編修文章,讓內容愈來愈好,可 惜 ptt 目前沒有這種功能。 Computer scientist 和 engineer 似乎有一個其他領域的人比較少有的特質:樂 於分享。這也許跟 open source 的概念在 CS 界已經存在許久有關。最近跟幾個 化學領域的人合作開發一些工具,發現 computer scientist or engineer 普遍 比 chemist 開放。但這也許是我個人的偏見,而且我的樣本數量也很小。:p Anyway,這幾天較忙所以交稿時間比較亂,上線卻看到幾篇文章已經有人自發性 的翻譯了,覺得很開心,這種類維基的翻譯方式的確是可行的。歡迎更多板友插 隊翻譯讓全文更快完成。 順便幫 Translate-CS 板打個廣告,各位翻譯完也順手把文章轉到該板吧。該板 P 板主整理文章整理得很勤。 ----------正文開始的分隔線---------- 原文網址:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html 靜態可視範圍 可以使用 釋義: 若函式 A 裡有一個嵌入的函式 B,函式B 可以使用函式 A 內宣告的變數,但不能 夠對該變數賦值。python 變數的有效範圍及尋找變數宣告的順序不是依照函式的 呼叫方式,而是按照程式碼的位置決定,這叫做靜態可視範圍。若在一個較大的區 塊內宣告了一個變數 v1,在大區塊內一個較小的區塊 (如:嵌入函式) 對 v1 賦值 ,則小區塊內的變數 v1 自動被視做小區塊內的區域變數,故這兩個 v1 並不相同且 互不影響。若 v1 是一個 module 範圍的變數,在較小區塊內 v1 宣告為 global, 它指的則是 module 範圍的 v1。 範例如下: def get_adder(summand1): """Returns a function that adds numbers to a given number.""" def adder(summand2): return summand1 + summand2 return adder 優點: 通常程式會較為清楚而優雅。有經驗的 LISP、Scheme、Haskell、ML 程式設計師 通常對這種方式感到很自在。 缺點: 有時會導致令人困惑的臭蟲。如下面的例子 (參見 PEP-0227 http://www.python.org/dev/peps/pep-0227/) i = 4 def foo(x): def bar(): print i, # ... # A bunch of code here # ... for i in x: # Ah, i *is* local to Foo, so this is what Bar sees print i, bar() foo([1, 2, 3]) 印出 1 2 3 3 而非 1 2 3 4。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 68.232.121.105 ※ 編輯: sandwichC 來自: 68.232.121.105 (05/09 08:11) ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: sandwichC (68.232.121.105), 時間: 05/09/2013 08:13:02