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