1. 程式人生 > >Python3基礎之(六)迴圈

Python3基礎之(六)迴圈

在上一講中我們學習了 while 語句進行迴圈控制,接下來我們將要學習另一種迴圈語句 for

一、基本使用

不同程式語言都有 for 語言,比如 C# 語言中的 foreach, Java 語言中的 for,在 Python 中的基本使用方法如下。

for item in sequence:
	expressions

sequence 為可迭代的物件,item 為序列中的每個物件。

二、例項

>>> example_list=[1,2,3,4,5,6,7,8,9,10]
	      
>>> for i in example_list:
print(i) 1 2 3 4 5 6 7 8 9 10

內容依次為 example_list 中的每一個元素 注意 Python 是使用縮排表示程式的結構,如果程式這樣編寫,

example_list=[1,2,3,4,5,6,7,8,9,10]
for i in example_list:
    print(i)
    print('inner of for')
print('outer of for')

輸出:

1
inner of for
2
inner of for
3
inner of for
4
inner of for
5
inner of for
6 inner of for 7 inner of for 8 inner of for 9 inner of for 10 inner of for outer of for

那麼每次迴圈都會輸出 inner of for,在迴圈結束後,輸出 outer of for 一次。

三、進階

range使用
在 Python 內建了工廠函式range 函式將會返回一個序列,總共有三種使用方法

1、 range(start, stop)

其中 start 將會是序列的起始值,stop為結束值,但是不包括該值,類似 數學中的表達 [start, stop),左邊為閉區間,右邊為開區間。

    for i in range(1, 10):
        print(i)

上述表達將會返回 1-9 所有整數,但不包含 10

2、 range(stop)

如果省略了 start 那麼將從 0 開始,相當於 range(0, stop)

3、 range(start, stop, step)

step 代表的為步長,即相隔的兩個值得差值。從 start 開始,依次增加 step 的值,直至等於或者大於 stop

for i in range(0,13, 5):
    print(i)

將會輸出 0, 5, 10。

四、高階主題

4.1 內建集合

Python 共內建了 listtupledictset 四種基本集合,每個 集合物件都能夠迭代。

tuple 型別

>>> tup=('python',24,38)
	      
>>> for i in tup:
	      print(i)

python
24
38

dictionary 型別

>>> dic={}
	      
>>> dic['lan']='python'
	      
>>> dic['version']=2.7
	      
>>> dic['platform']=64
	      
>>> for key in dic:
	      print(key,dic[key])

	      
lan python
version 2.7
platform 64

字典在迭代的過程 中將key 作為可迭代的物件返回。注意字典中key 是亂序的,也就是說和插入 的順序是不一致的。如果想要使用順序一致的字典,請使用 collections 模組 中的 OrderedDict物件。
set 型別

>>> s=set(['python','python2','python3','python'])
	      
>>> for i in s:
	      print(i)

	      
python3
python
python2

set 集合將會去除重複項,注意輸出的 結果也不是按照輸入的順序

4.2 迭代器

:關於迭代器和生成器的更加詳細的講解請參考:python 迭代器與生成器
Python 中的 for 句法實際上實現了設計模式中的迭代器模式 ,所以我們自己也可以按照迭代器的要求自己生成迭代器物件,以便在 for 語句中使用。 只要類中實現了 __iter__next 函式,那麼物件就可以在 for 語句中使用。 現在建立 Fibonacci 迭代器物件

class Fib(object):
    def __init__(self, max):
        self.max = max
        self.n, self.a, self.b = 0, 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.n < self.max:
            r = self.b
            self.a, self.b = self.b, self.a + self.b
            self.n = self.n + 1
            return r
        raise StopIteration()

# using Fib object
for i in Fib(5):
    print(i)

將會輸出前 5 個 Fibonacci 資料 1,1, 2, 3, 5

4.3 生成器

除了使用迭代器以外,Python 使用 yield 關鍵字也能實現類似迭代的效果,yield 語句每次 執行時,立即返回結果給上層呼叫者,而當前的狀態仍然保留,以便迭代器下一次迴圈呼叫。這樣做的 好處是在於節約硬體資源,在需要的時候才會執行,並且每次只執行一次。

def fib(max):
    a, b = 0, 1
    while max:
        r = b
        a, b = b, a+b
        max -= 1
        yield r

# using generator
for i in fib(5):
    print(i)

將會輸出前 5 個 Fibonacci 資料 1,1, 2, 3, 5