继续昨天的Python的使用技巧学习:
一、复合语句
Good:
Python代码
if foo == 'blah':
do_something()
do_one()
do_two()
do_three()
Bad:
Python代码
if foo == 'blah': do_something()
do_one(); do_two(); do_three()
文档注释(Docstrings) & 注释
文档注释 = 用于解释如何使用代码
文档注释公约:http://www.python.org/dev/peps/pep-0257/
注释 = 为什么 (理由) & 代码如何工作的如:
Python代码
# !!! BUG: ...
# !!! FIX: This is a hack
# ??? Why is this here?
注释对于任何语言开发者来说已经最基本的东西了,这里就不详细说了.
二、交换变量
在其它语言的交换变量的做法一般是:
Java代码
temp = a
a = b
b = temp
Python的做法:
Python代码
b, a = a, b
也许你见到过这样的情况,但是你知道它是如何工作的吗?
◆ 首先,逗号是元组构造语法。
◆ 等号的右边是定义一个元组 (tuple packing).
◆ 其左边为一个目标元组 (tuple unpacking)).
右边的元组根据名称被 unpacked 到左边的无组。
更多关于 unpacked例子:
Python代码
>>> info =['David', 'Pythonista', '+1250']
>>> name, title, phone = info
>>> name
'Davids'
>>> title
'Pythonista'
>>> phone
'+1250'
在结构化的数据上使用循环:
info 是在上面定义的一个 list . 所以下面的 people 有两个项, 两个项都是分别都拥有三个项的 list.
Python代码
>>> people = [info, ['Guido', 'BDFL', 'unlisted']]
>>> for (name, title, phone) in people:
... print name, phone
...
David +1250
Guido unlisted
以上循环中,people中的两个项(list item),都已经被 unpacked 到 (name, title, phone) 无组中。
可以任意嵌套(只要左右两边的结构一定要能够匹配得上):
Python代码
>>> david, (gname, gtitle, gphone) = people
>>> gname
'Guido'
>>> gtitle
'BDFL'
>>> gphone
'unlisted'
>>> david
['David', 'Pythonista', '+1250']
三、更多关于 Tuples
我们看到的是元组通过逗号构造,而不是括号。例如:
Python代码
>>> 1,
(1,)
Python的解释器会为你显示括号,所以建议你使用括号:
Python代码
>>> (1,)
(1,)
千万不要忘记逗号!
Python代码
>>> (1)
1
在只有一个元素的元组,尾随逗号是必须的,在2 + 元素的元组,尾随逗号是可选的。 如果创建一个 0或空元组,一对括号是快捷的语法:
Python代码
>>> ()
()
>>> tuple()
()
一个常见的错误当你并不想要一个无组,却无意的添加了一个逗号,很容易造成你在代码中的错误,如:
Python代码
>>> value = 1,
>>> value # is a tuple, not a int
(1,)
所以,当你发现一个元组时,赶紧去找一下那个‘,’号吧。
四、关于 ""
是一个非常有用的功能,但是却很少有人知道。
当你在交互式模式下(如 IDEL)计算一个表达式或调用一个函数后,其结果必然是一个临时名称,(下划线):
Python代码
>>> 1 + 1
2
>>> _
2
在 _ 中存储最后输出的值。
当输出的结果是 None 或没有任何输出时,而 _ 的值并不会改变,仍然保存上一次的值。这就是方便所在。
当然,这只能交互式的模式中使用,在模块中不能支持。
这在交互式模式中是非常有用的,当你在过程中没有保存计算结果 或 你想看最后一步的执行的输出结果:
Python代码
>>> import math
>>> math.pi / 3
1.0471975511965976
>>> angle = _
>>> math.cos(angle)
0.50000000000000011
>>> _
0.50000000000000011