本节主要介绍python中循环语句的用法以及其他一些语句exec等

循环语句

if是值执行一次而循环时在条件满足情况下可以执行相同语句多次;使用循环可以轻松实现序列,词典等的迭代;

while循环:

用来在任何条件为真的情况下重复执行一个代码快:

while i>0:

代码快

其他代码;

演示如下:

>>>i=10

>>> while i>0:

...     print("i=",i)

...     i-=1

... 

i= 10

i= 9

i= 8

i= 7

i= 6

i= 5

i= 4

i= 3

i= 2

i= 1

>>>

for循环:

一般while循环已经满足我们要求了,但是有些时候还得去选择for循环更加有效;比如要为一个集合(序列和其他可迭代对像)的每个元素都执行一个代码快。这时候可以使用for语句;

基本形式:

for in :

>>> name=("peace","rong","nick")

>>> for i in name:

...     print(i)

... 

peace

rong

nick

>>>

一些迭代工具

之前讲解字典时有讲过字典的迭代,现在介绍一下常用的迭代工具;

并行迭代

程序可以同时迭代两个序列

内建函数zip函数可以用来进行并行迭代,这里需要注意的是python2返回的是元祖列表,而python3中返回的是可迭代对象

##python2.7
>>> num = zip((1, 2), (3, 4))
>>> num
[(1, 2), (3, 4)]
#返回的是元祖列表;

##python3.4
>>> num=zip((1,2),(3,4))
>>> num
<zip object at 0x7fc5b1e7ef08>
>>> 
#返回的是一个对象,并且支持一次遍历。如果需要重新遍历得重新赋值一次;

#但是都支持如下的遍历:
>>> for i,j in num:
...     print(i,j)
... 
1 3
2 4

当然也可以按索引迭代:

有些时候需要访问序列中的对象,同时还想获取当前对象的索引,例如替换字符串可以使用下面的方法:

>>> strings=["peace","rong","nick"]

>>> index=0

>>> for string in strings:

...     if "on" in string:

...         strings[index]="peace"

...     index+=1

... 

>>> strings

['peace', 'peace', 'nick']

>>>

跳出循环:

1.break语句

与其他自然语言c等没有差别;就是结束循环;

2。continue语句:

同样它只是让当次迭代提前结束:

演示如下:

>>> num=[2,4,5,6,]

>>> for i in num:

...     if i==5:

...         break

...     print (i)

... 

2

4

>>> for i in num:

...     if i==5:

...         continue

...     print(i)

... 

2

4

6

>>>

循环中的else语句:

else子句可以加在循环后,他仅在没有调用break语句时执行:还是刚在的例子:

>>> num=[2,4,5,6]

>>> for i in num:

...     if i==7:

...        break

... else:

...     print("not 7")

... 

not 7

#没有执行break打印7

列表推导式

列表推导式就是利用其他的列表创建新的列表;他的工作方式类似于for循环也很简单;

例如:创建由range(10)中每个x的平方组成;

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

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

同样也可以加条件:比如创建只能被4整除的平方数:

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

[0, 16, 64]

>>>

也可以增加更多的for:

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

[[0, 0], [0, 9], [0, 36], [0, 81], [16, 0], [16, 9], [16, 36], [16, 81], [64, 0], [64, 9], [64, 36], [64, 81]]

>>>

pass,del,exec介绍

python3中pass

pass语句就是什么都不做,让程序往下执行:比如可以让if,for,while,等块什么都不做时,我们可以加上pass

>>> for i in range(10):

... 

  File "<stdin>", line 2

    

    ^

IndentationError: expected an indented block

>>> for i in range(10):

...     pass

... 

>>>

#从上可以看到不加pass就出错了。因为python时不允许空块存在的;


>>> x=11

>>> if x>12:

...    print("x>12")

... else:

...    #等下在写

...    pass

... 

>>>

python3中del

del删除语句不仅会删除一个对象的引用,也会删除那个名字本省:演示如下

>>> x=1

>>> del x

>>> x

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'x' is not defined

>>>

#x这个名字已经不存在了

但是当两个引用指向同一个对象时,删掉的只是引用名:

#删掉y后x还是指向原来的对象;

>>> x=[1,2]

>>> y=x

>>> y[1]=4

>>> x

[1, 4]

>>> del y

>>> x

[1, 4]

>>>

python3中exec和eval

有些时候我们可能想要得到动态代码,然后将其作为语句执行或作为表达式计算;

例如执行一个字符串的语句是exec

>>>exec("print(1+3)")

4

当在字符串中定义变量时一定要小心;如果重名了就会发生不必要的错误;可以通过in来解决,起到了放置代码字符串命名空间的字典;

例如:

>>>from math import sin

>>>scope={}

>>>exec("sqrt=1") in scope

>>>sqrt(4)

2

>>>scope['sqrt']

1

eval是类似于exec的内建函数,只不过是eval会计算表达式,并且返回结果;同样可以使用命名空间;

简单演示如下

````

eval(input("enter an expression:"))

enter an expression:6+8*2

42

```