Fw: [翻译] Google 建议的 Python 风格指南 12

楼主: tiefblau (tiefblau)   2013-05-10 11:13:16
※ [本文转录自 Python 看板 #1HYATNk9 ]
作者: tiefblau (tiefblau) 看板: Python
标题: [翻译] Google 建议的 Python 风格指南 12
时间: Tue May 7 15:03:49 2013
原文网址:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
* Default Argument Values
用于大部分情况
释义:
可以预先指定在在函数参数列尾端的变量数值。
def foo(a, b=0):
当仅用一个引数呼叫foo时,b会被设为0;
当使用两个引数呼叫foo时,b会为第二个引数。
优点:
我们经常使用含有许多默认值的函式,但只在极少情况下会需要覆蓋它,
Default Argument Values提供一个简便的方式达到此目的,而不需要为了少见的例外定义
额外的函式。另外,Python并没有支援重载methods/function,默认参数值是一个"假装"
为重载行为的好方法。
缺点:
导入模组时,Default Argument Values仅会被定义一次,当参数是可变动的变量型态
如:list、dictionary时,如果该函式变动了该变量 (e.g. apped()到list),会改动到预
设的物件,造成问题。
决策:
注意以下警告使用。
1.定义函式时,不要用可变动的物件为默认参数值(Default Argument Values)。
正确:
def foo(a, b=None):
if b is None:
b = []
错误:
def foo(a, b=[]):
...
2.永远使用明确名字呼叫有默认值的参数,会帮助document the code,
当有更多参数加入时,也可帮助避免与侦测interface breakage。
//不太会翻这两句...
def foo (a,b=1):
...
正确
foo(1)
foo(1, b=2)
错误:
foo(1,2)
===
觉得很不错的指南,我也来献丑翻译一下,有哪边不对或是不通顺之处欢迎提出并请多多
包涵啦。
作者: os653   2013-05-07 15:53:00
请问为什么不要用可变动的物件为默认参数值?理解力低不懂..
作者: kilfu0701 (享受人生快乐至上)   2013-05-07 16:08:00
http://zephyrfalcon.org/labs/python_pitfalls.html可以看第五点 有范例程式
作者: os653   2013-05-07 16:33:00
感谢说明,如果发生了还真不好找原因
作者: darkgerm (黑骏)   2013-05-07 17:13:00
因为默认参数值是在"定义时"就配好资源不是"执行时",所以上面那个范例在没给 b 时 b 都是指向同一个 list
作者: hilorrk (Cary)   2013-05-07 17:31:00
这还真是第一次看到,感谢!
作者: timTan (用口头禅区分年记)   2013-05-07 17:42:00
这是python 的雷了,一不注意就会因为这件事出bug~
作者: ya790206 (残云夺月)   2013-05-07 20:41:00
这个雷我同事之前遇过,只能说python对默认参数的处理与其他语言不同,c++ 和 ruby 都没这个雷。 java, golang没默认参数,无法比较
作者: sandwichC ( )   2013-05-07 21:24:00
推!
作者: waitriver (microcosm)   2013-05-08 00:09:00
thanks

Links booklink

Contact Us: admin [ a t ] ucptt.com