python3之循环

x33g5p2x  于2021-03-13 发布在 其他  
字(3.2k)|赞(0)|评价(0)|浏览(449)

本节主要介绍python中循环语句的用法以及其他一些语句exec等,文章后面附有之前的文章;

循环语句

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

while循环:

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

while i>0:

  1. 代码快

其他代码;

演示如下:

  1. >>>i=10
  2. >>> while i>0:
  3. ... print("i=",i)
  4. ... i-=1
  5. ...
  6. i= 10
  7. i= 9
  8. i= 8
  9. i= 7
  10. i= 6
  11. i= 5
  12. i= 4
  13. i= 3
  14. i= 2
  15. i= 1
  16. >>>

for循环:

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

基本形式:

for <迭代数> in <对象集合>:

  1. >>> name=("peace","rong","nick")
  2. >>> for i in name:
  3. ... print(i)
  4. ...
  5. peace
  6. rong
  7. nick
  8. >>>

一些迭代工具

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

并行迭代

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

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

  1. ##python2.7
  2. >>> num = zip((1, 2), (3, 4))
  3. >>> num
  4. [(1, 2), (3, 4)]
  5. #返回的是元祖列表;
  6. ##python3.4
  7. >>> num=zip((1,2),(3,4))
  8. >>> num
  9. <zip object at 0x7fc5b1e7ef08>
  10. >>>
  11. #返回的是一个对象,并且支持一次遍历。如果需要重新遍历得重新赋值一次;
  12. #但是都支持如下的遍历:
  13. >>> for i,j in num:
  14. ... print(i,j)
  15. ...
  16. 1 3
  17. 2 4

当然也可以按索引迭代:

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

  1. >>> strings=["peace","rong","nick"]
  2. >>> index=0
  3. >>> for string in strings:
  4. ... if "on" in string:
  5. ... strings[index]="peace"
  6. ... index+=1
  7. ...
  8. >>> strings
  9. ['peace', 'peace', 'nick']
  10. >>>

跳出循环:

1.break语句

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

2。continue语句:

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

演示如下:

  1. >>> num=[2,4,5,6,]
  2. >>> for i in num:
  3. ... if i==5:
  4. ... break
  5. ... print (i)
  6. ...
  7. 2
  8. 4
  9. >>> for i in num:
  10. ... if i==5:
  11. ... continue
  12. ... print(i)
  13. ...
  14. 2
  15. 4
  16. 6
  17. >>>

循环中的else语句:

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

  1. >>> num=[2,4,5,6]
  2. >>> for i in num:
  3. ... if i==7:
  4. ... break
  5. ... else:
  6. ... print("not 7")
  7. ...
  8. not 7
  9. #没有执行break打印7

列表推导式

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

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

  1. >>> [x*x for x in range(10)]
  2. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

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

  1. >>> [x*x for x in range(10) if x%4==0]
  2. [0, 16, 64]
  3. >>>

也可以增加更多的for:

  1. >>> [[x*x,y*y] for x in range(10) for y in range(10) if x%4==0 if y%3==0]
  2. [[0, 0], [0, 9], [0, 36], [0, 81], [16, 0], [16, 9], [16, 36], [16, 81], [64, 0], [64, 9], [64, 36], [64, 81]]
  3. >>>

pass,del,exec介绍

python3中pass

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

  1. >>> for i in range(10):
  2. ...
  3. File "<stdin>", line 2
  4. ^
  5. IndentationError: expected an indented block
  6. >>> for i in range(10):
  7. ... pass
  8. ...
  9. >>>
  10. #从上可以看到不加pass就出错了。因为python时不允许空块存在的;
  11. >>> x=11
  12. >>> if x>12:
  13. ... print("x>12")
  14. ... else:
  15. ... #等下在写
  16. ... pass
  17. ...
  18. >>>

python3中del

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

  1. >>> x=1
  2. >>> del x
  3. >>> x
  4. Traceback (most recent call last):
  5. File "<stdin>", line 1, in <module>
  6. NameError: name 'x' is not defined
  7. >>>
  8. #x这个名字已经不存在了

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

  1. #删掉y后x还是指向原来的对象;
  2. >>> x=[1,2]
  3. >>> y=x
  4. >>> y[1]=4
  5. >>> x
  6. [1, 4]
  7. >>> del y
  8. >>> x
  9. [1, 4]
  10. >>>

python3中exec和eval

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

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

  1. >>>exec("print(1+3)")
  2. 4

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

例如:

  1. >>>from math import sin
  2. >>>scope={}
  3. >>>exec("sqrt=1") in scope
  4. >>>sqrt(4)
  5. 2
  6. >>>scope['sqrt']
  7. 1

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

简单演示如下

  1. >>>eval(input("enter an expression:"))
  2. enter an expression:6+8*2
  3. 42

相关文章