首页 > 代码库 > 读书笔记--Python基础教程 001

读书笔记--Python基础教程 001

name = raw_input(‘please enter your name: ‘) or ‘<unknown>‘

换句话说,如果raw_input语句的返回值为真(不是空字符串),那么他的值就会赋给name,否则将默认的‘<unknown>’赋值给name。

这类短路逻辑可以用来实现C和Java中所谓的‘三元运算符’(或条件运算符)。

a if b else c

如果b为真,返回a,否则,返回c。(注意,这个运算符不用引入临时变量,就可以直接使用,从而得到与raw_input例子中同样的结果。)

 

while 循环

name = ‘‘

while not name:  #改为while not name.strip(): 是不是更合理呢?!

  name = raw_input(‘please enter your name: ‘)

print ‘Hello, %s!‘ %name

这个简单的while循环,让输入name,但是没有考虑到name 是空格的情况,是空格了虽然不报错,你也不知道名字啊啊啊啊,嘿嘿

for 循环

words = [‘this‘, ‘is‘, ‘an‘, ‘ex‘, ‘parrot‘]

for word in words:

  print word

因为迭代(循环的另外一种说法)某范围的数字是常见的,所以有个内建的范围函数供使用:

>>> range(0,10)  #话说此函数又下限(即0),但不包含上限()

[0,1,2,3,4,5,6,7,8,9]

_____________________________________________________

提示:如果能使用for循环,就尽量不要使用while 循环。

当然还有个xrange 函数,当迭代一个巨大的序列时 xrange函数 会更高效,不过一般就算了。

 

一些迭代工具:

并行迭代

names = [‘anne‘, ‘beth‘, ‘george‘, ‘damon‘]

ages = [12, 34,23,103]

如果想打印名字和对应的年龄,可以向下面这样做:

for i in range(len(names)):

  print names[i], ‘is‘, ages[i], ‘years old‘

 

而内建的 zip 函数就可以用来进行并行迭代,可以把两个序列‘压缩’在一起,然后返回一个元组的列表:

>>>zip(names, ages)

[(‘anne‘, 12), (‘beth‘, 34), (‘george‘, 23), (‘damon‘, 103)]

现在我可以在循环中解包元组:

for name, age in zip(names, ages):

  print name , ‘is‘, age, ‘years old‘

zip 函数也可以作用于任意多的序列。 关于它很重要的一点是zip可以处理不等长的序列,当最短的序列 “用完” 的时候就会停止。

for example #(容我卖弄风骚一下,呵呵)

>>>zip(range(5), xrange(10000000))

[(0,0), (1,1), (2,2), (3,3), (4,4)]

在上面的代码中,不推荐使用range 替换xrange ——尽管只需要前5个数字, 但是range会计算所有的数字,这要花费很长的时间。

而使用xrange就没有这个问题了,它只计算前5个数字。

 

for index, string in enumerate(strings):

  if ‘xxx‘ in string:

    string[index] = ‘[censored]‘

enumerate这个函数可以在提供索引的地方迭代 “索引-值” 对。

 

循环中的else子句

from math import sqrt

for n in range(99,81, -1):

  root = sqrt(n)

  if root == int(root):

    print n

    break

else:

  print ‘Didnt find it !‘

 

列表推导式——轻量级循环

列表推导式(list comprehension)是利用其它列表创建新列表(类似数学术语中的集合推导式)的一种方法。

>>>[x*x for x in range(10)]

[0,1,4,9,16,25,36,49,64,81]

>>>[x*x for x in range(10) if x%3 == 0 ]

[0,9,36,81]

也可以增加更多for 语句的部分:

>>>[(x,y) for x in range(3) for y in range(3)]

[(0,0), (0,1), (0,2), (1,0), (1,1), ……]

作为对比,下面的代码使用两个for 语句创建了相同的列表:

result = []

for x in range(3):

  for y in range(3):

    result.append((x,y))

 

pass、del、exec

 

读书笔记--Python基础教程 001