作者sandwichC (没回应=挂站)
看板Translate-CS
标题Fw: [翻译] Google 建议的 Python 风格指南 16
时间Thu May 9 08:13:02 2013
※ [本文转录自 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