10. Python脚本学习笔记十循环语句
本篇名言:“走不完的前程停一停从容出步,急不来的心事想一想暂且丢开,干不尽的事情缓一缓轻松一回,赚不完的钱财思一思身外之物,此语送给你希望不要太辛苦!”
上节学习了IF循环,我们来看下PYTHON下如何来实现循环。
1. WHILE循环
x=1
while x<=100:
print x
x+=1
上面代码实现了循环100次输出1-100的值。
2. FOR循环
words=['this','is','an','ex','parrot']
forwordin words:
print word
这里使用到了迭代器,详见后续介绍。
2.1 循环遍历字典
d={'x':1,'y':2,'z':3}
forkeyin d:
print key,'Corresonds to ',d[key]
输出如下:
yCorresonds to 2
xCorresonds to 1
z Corresondsto 3
字典没有顺序,需要顺序需要的话。可以将键值保持在单独的列表中。
3. 迭代工具
3.1 并行迭代(zip函数)
迭代两个序列,可以使用内建的zip 函数。
names=['a','b','c','d']
ages=[12,13,14,15]
forname,ageinzip(names,ages):
print name,'is', age,'years old'
输出结果:
a is12 years old
b is13 years old
c is14 years old
d is 15 yearsold
3.2 编号迭代enumerate
names=['aoke','boke','cokd','dekq']
forindex,stringinenumerate(names):
if'ok'in string:
names[index]='[error]'
print names
输出:
['[error]','[error]', '[error]', 'dekq']
在迭代序列对象的时候,同时获得当前对象的索引,可以使用enumerate.
3.3 翻转和排序迭代
函数reversed和sorted函数。不过不修改原始对象。
>>> sorted(a)
[1, 2, 3, 4, 5]
>>> a
[5, 4, 3, 2, 1]
>>>sorted('Hello,world!')
['!', ',', 'H','d', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
>>>reversed('Hello,world!')
<reversedobject at 0x023FE4F0>
>>>list( reversed('Hello,world!'))
['!', 'd', 'l','r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'H']
对于字符串,reversed函数是纯粹的反转,而 sorted是根据字符进行排序。
4. 跳出循环
和高级语言类似,跳出可以使用continue和break
Break是跳出循环,continue是结束当前迭代,调到下一轮循环的开始。
5. 列表推导式
列表推导式是利用其它列表创建新列表。
推导0-10中每个x 的平方组成。
>>>[x*x for x in range(10)]
[0, 1, 4, 9, 16,25, 36, 49, 64, 81]
6. 3个常用语句
6.1 PASS
在代码中做占位符使用。
ifTrue:
pass
6.2 DEL
Python 会删除那些不再使用的对象。
>>> x=1
>>> delx
>>> x
Traceback (mostrecent call last):
File "<stdin>", line 1, in<module>
NameError: name'x' is not defined
如下演示:
>>>x=y=1
>>> delx
>>> y
1
>>> x
Traceback (mostrecent call last):
File "<stdin>", line 1, in<module>
NameError: name'x' is not defined
删除Y后,X还在的。因为删除的只是名称,而不是列表本身。在Python中是没有办法删除值的(在需要的时候,解释器会负责内存的回收)
6.3 EXEC
这个会动态的创建Python代码。
如:
>>>exec "print 'hello,world!'"
hello,world!
如下,赋值变量sqrt=1,但是将潜在的代码放入到命名空间作用的字典中,这样不会覆盖sqrt函数。
>>> from math import sqrt
>>> scope={}
>>> exec 'sqrt=1' in scope
>>> sqrt(4)
2.0
>>> scope['sqrt']
1
还有一个eval,类似于exec的内建工具。Eval计算Python表达式(以字符串书写),并且返回结果。
>>> scope={}
>>> scope['a']=2
>>> scope['b']=4
>>> eval('a*b',scope)
8