python3之循環


本節主要介紹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

```

####相關鏈接:
[python3入門之類](http://rlovep.com/2015/09/23/python3%E5%85%A5%E9%97%A8%E4%B9%8B%E7%B1%BB/)
[python3入門之函數](http://rlovep.com/2015/09/06/python3%E5%85%A5%E9%97%A8%E4%B9%8B%E5%87%BD%E6%95%B0/)
[python3入門之循環](http://rlovep.com/2015/09/06/python3%E5%85%A5%E9%97%A8%E4%B9%8B%E5%BE%AA%E7%8E%AF/)
[python3之if語句](http://rlovep.com/2015/08/05/python3%E4%B9%8Bif%E8%AF%AD%E5%8F%A5/)
[python3入門之賦值語句介紹](http://rlovep.com/2015/08/03/python3%E5%85%A5%E9%97%A8%E4%B9%8B%E8%B5%8B%E5%80%BC%E8%AF%AD%E5%8F%A5%E4%BB%8B%E7%BB%8D/)
[python3入門之print,import,input介紹](http://rlovep.com/2015/08/03/python3%E5%85%A5%E9%97%A8%E4%B9%8Bprint%EF%BC%8Cimport%EF%BC%8Cinput%E4%BB%8B%E7%BB%8D/)
[python3入門之set](http://www.cnblogs.com/onepeace/p/4791578.html)
[python3入門之字典](http://rlovep.com/2015/07/29/python3%E5%85%A5%E9%97%A8%E4%B9%8B%E5%AD%97%E5%85%B8/)
[python3入門之字符串](http://rlovep.com/2015/07/28/python%E5%85%A5%E9%97%A8%E4%B9%8B%E5%AD%97%E7%AC%A6%E4%B8%B2/)
[python3入門之列表和元組](http://rlovep.com/2015/07/14/python%E5%85%A5%E9%97%A8%E4%B9%8B%E5%88%97%E8%A1%A8%E5%92%8C%E5%85%83%E7%BB%84/)
[python3入門之軟件安裝](http://rlovep.com/2015/07/14/python%E5%85%A5%E9%97%A8%E4%B9%8B%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85/)
[python3爬蟲之入門和正則表達式](http://rlovep.com/2015/09/23/python3%E7%88%AC%E8%99%AB%E4%B9%8B%E5%85%A5%E9%97%A8%E5%92%8C%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM