摘要:迭代器和生成器字符串,列表或元組對象都可用于創(chuàng)建迭代器。創(chuàng)建自己的迭代器,需要在類中實現(xiàn)實現(xiàn)兩個方法與。方法返回一個特殊的迭代器對象,這個迭代器對象實現(xiàn)了方法并通過異常標識迭代的完成。要反向遍歷一個序列,首先指定這個序列,然后調(diào)用函數(shù)。
先計算右邊表達式,然后再同時賦值給左邊。
條件控制
if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3
while 循環(huán)
while condition: statement_block else: # 可有可無 statement_block
for 循環(huán)
forin : else:
range() 函數(shù)
>>> a = list(range(3)) >>> a [0, 1, 2] >>> a = list(range(1, 5, 2)) >>> a [1, 3]
break 語句可以跳出 for 和 while 的循環(huán)體。如果你從 for 或 while 循環(huán)中終止,任何對應(yīng)的循環(huán) else 塊將不執(zhí)行。
pass是空語句,是為了保持程序結(jié)構(gòu)的完整性。pass 不做任何事情,一般用做占位語句。
字符串,列表或元組對象都可用于創(chuàng)建迭代器。
>>> a = [1, 2, 3, 4] >>> it = iter(a) >>> next(it) 1 >>> next(it) 2 >>> next(it) 3 >>> next(it) 4 >>> next(it) Traceback (most recent call last): File "", line 1, in StopIteration >>> it = iter(a) >>> for i in it: ... print(i) ... 1 2 3 4 >>>
創(chuàng)建自己的迭代器,需要在類中實現(xiàn)實現(xiàn)兩個方法 __iter__() 與 __next__() 。__iter__() 方法返回一個特殊的迭代器對象, 這個迭代器對象實現(xiàn)了 __next__() 方法并通過 StopIteration 異常標識迭代的完成。
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 5: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for i in range(5): print(next(myiter)) for x in myiter: print(x) >>> 1 2 3 4 5
在 Python 中,使用了 yield 的函數(shù)被稱為生成器(generator)。跟普通函數(shù)不同的是,生成器是一個返回迭代器的函數(shù),只能用于迭代操作,更簡單點理解生成器就是一個迭代器。在調(diào)用生成器運行的過程中,每次遇到 yield 時函數(shù)會暫停并保存當(dāng)前所有的運行信息,返回 yield 的值, 并在下一次執(zhí)行 next() 方法時從當(dāng)前位置繼續(xù)運行。
import sys def fibonacci(n): # 生成器函數(shù) - 斐波那契 a, b, counter = 0, 1, 0 while True: if counter > n: return yield a a, b = b, a + b counter += 1 f = fibonacci(10) # f 是一個迭代器,由生成器返回生成 while True: try: print(next(f), end=" ") except StopIteration: sys.exit() >>> 0 1 1 2 3 5 8 13 21 34 55
Python 定義函數(shù)使用 def 關(guān)鍵字,一般格式如下:
def function_name(args1, args2): statement return
return [表達式] 結(jié)束函數(shù),選擇性地返回一個值給調(diào)用方。不帶表達式的 return 相當(dāng)于返回 None。
可更改(mutable)與不可更改(immutable)對象
在 Python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list, dict 等則是可以修改的對象。
不可變類型:變量賦值 a = 5 后再賦值 a = 10,這里實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變 a 的值,相當(dāng)于新生成了 a 。
可變類型:變量賦值 la = [1,2,3,4] 后再賦值 la[2] = 5 則是將 list la 的第三個元素值更改,本身 la 沒有動,只是其內(nèi)部的一部分值被修改了。
Python 函數(shù)的參數(shù)傳遞:
不可變類型:類似 c++ 的值傳遞,如整數(shù)、字符串、元組。如 fun(a),傳遞的只是 a 的值,沒有影響 a 對象本身。比如在 fun(a) 內(nèi)部修改 a 的值,只是修改另一個復(fù)制的對象,不會影響 a 本身。
可變類型:類似 c++ 的引用傳遞,如列表,字典。如 fun(la),則是將 la 真正的傳過去,修改后 fun 外部的 la 也會受影響。
Python 中一切都是對象,嚴格意義我們不能說值傳遞還是引用傳遞,我們應(yīng)該說傳不可變對象和傳可變對象。
參數(shù)
必需參數(shù)。必需參數(shù)須以正確的順序傳入函數(shù),調(diào)用時的數(shù)量必須和聲明時的一樣。
關(guān)鍵字參數(shù) 。關(guān)鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值。使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序與聲明時不一致,因為 Python 解釋器能夠用參數(shù)名匹配參數(shù)值。
默認參數(shù)。調(diào)用函數(shù)時,如果沒有傳遞參數(shù),則會使用默認參數(shù)。
不定長參數(shù)。你可能需要一個函數(shù)能處理比當(dāng)初聲明時更多的參數(shù),這些參數(shù)叫做不定長參數(shù),它們在聲明時不會命名。
def functionname([formal_args,] *var_args_tuple ): "函數(shù)_文檔字符串" function_suite return [expression]
加了星號 * 的參數(shù)會以元組(tuple)的形式導(dǎo)入,存放所有未命名的變量參數(shù)。如果在函數(shù)調(diào)用時沒有指定參數(shù),它就是一個空元組。我們也可以不向函數(shù)傳遞未命名的變量。
def functionname([formal_args,] **var_args_dict ): "函數(shù)_文檔字符串" function_suite return [expression]
加了兩個星號 ** 的參數(shù)會以字典的形式導(dǎo)入。
匿名函數(shù)
所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數(shù)。
lambda 只是一個表達式,函數(shù)體比 def 簡單很多。
lambda 的主體是一個表達式,而不是一個代碼塊。僅僅能在 lambda 表達式中封裝有限的邏輯進去。
lambda 函數(shù)擁有自己的命名空間,且不能訪問自己參數(shù)列表之外或全局命名空間里的參數(shù)。
雖然 lambda 函數(shù)看起來只能寫一行,卻不等同于 C 或 C++ 的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時不占用棧內(nèi)存從而增加運行效率。
sum = lambda arg1, arg2: arg1 + arg2 print ("相加后的值為 : ", sum( 10, 20 )) print ("相加后的值為 : ", sum( 20, 20 )) >>> 相加后的值為 : 30 相加后的值為 : 40
vec = [2, 4, 6] [3 * x for x in vec if x > 3] >>> [12, 18] matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ] [[row[i] for row in matrix] for i in range(4)] >>> [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
在序列中遍歷時,索引位置和對應(yīng)值可以使用 enumerate() 函數(shù)同時得到。
同時遍歷兩個或更多的序列,可以使用 zip() 組合。
要反向遍歷一個序列,首先指定這個序列,然后調(diào)用 reversed() 函數(shù)。
要按順序遍歷一個序列,使用 sorted() 函數(shù)返回一個已排序的序列,并不修改原值。
a = [2, 4, 6] for i, v in enumerate(a): print(i, v) >>> 0 2 1 4 2 6 >>> b = ["sen", "ius", "en"] >>> for i, j in zip(a, b): ... print(i, j) ... 2 sen 4 ius 6 en >>> for i in reversed(a): ... print(i) ... 6 4 2 >>> for i in sorted(b): ... print(i) ... en ius sen >>>
參考資料 菜鳥教程
獲取更多精彩,請關(guān)注「seniusen」!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44850.html
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:菜鳥教程這是一個屬性其值是字符串菜鳥教程同上這是一個屬性其值是字符串用于定義的函數(shù),可以通過來返回函數(shù)值。它們都有前綴,以便與用戶定義的屬性區(qū)分開來。 開篇語 我最近學(xué)習(xí)了js,取得進步,現(xiàn)在學(xué)習(xí)vue.js.建議新手學(xué)習(xí),請不要用npm的方式(vue-cli,vue腳手架),太復(fù)雜了. 請直接下載vue.js文件本地引入,就上手學(xué)習(xí)吧參照菜鳥教程網(wǎng)站的vue.js教程http://...
摘要:是你學(xué)習(xí)從入門到專家必備的學(xué)習(xí)路線和優(yōu)質(zhì)學(xué)習(xí)資源。的數(shù)學(xué)基礎(chǔ)最主要是高等數(shù)學(xué)線性代數(shù)概率論與數(shù)理統(tǒng)計三門課程,這三門課程是本科必修的。其作為機器學(xué)習(xí)的入門和進階資料非常適合。書籍介紹深度學(xué)習(xí)通常又被稱為花書,深度學(xué)習(xí)領(lǐng)域最經(jīng)典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導(dǎo)讀】本文由知名開源平...
閱讀 2689·2023-04-25 20:28
閱讀 1876·2021-11-22 09:34
閱讀 3706·2021-09-26 10:20
閱讀 1863·2021-09-22 16:05
閱讀 3099·2021-09-09 09:32
閱讀 2533·2021-08-31 09:40
閱讀 2117·2019-08-30 13:56
閱讀 3330·2019-08-29 17:01