Python 3 學習筆記之——基礎語法
1. a, b = a, a + b
- 先計算右邊表示式,然後再同時賦值給左邊。
2. 條件控制和迴圈語句
- 條件控制
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 迴圈
for <variable> in <sequence>:
<statements>
else:
<statements>
- 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 不做任何事情,一般用做佔位語句。
3. 迭代器和生成器
- 字串,列表或元組物件都可用於建立迭代器。
>>> 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 "<stdin>", line 1, in <module>
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
4. 函式
- 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
-
5. 列表推導式
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]]
6. 遍歷技巧
- 在序列中遍歷時,索引位置和對應值可以使用 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」!
相關文章
- Scala學習筆記(2)-基礎語法筆記
- 真香,理解記憶法學習Python基礎語法Python
- Go 學習筆記 - Go 基礎語法(2)Go筆記
- Go學習筆記 - Go 基礎語法(1)Go筆記
- python菜鳥教程學習3:基礎語法Python
- Python基礎學習筆記Python筆記
- Python學習筆記(語法篇)Python筆記
- Java學習之基礎語法Java
- Python基礎:語法基礎(3)Python
- Java學習之基礎語法練習Java
- 學習python的基礎語法集合Python
- python基礎學習筆記(一)Python筆記
- go 學習記錄--基礎語法Go
- Java基礎 語法筆記Java筆記
- Java基礎語法筆記Java筆記
- 菜鳥學習筆記:Java基礎篇1(基礎語法、物件導向)筆記Java物件
- Python3 基礎語法Python
- python基礎學習筆記(紙質)Python筆記
- c語言程式基礎學習筆記C語言筆記
- 飛機的 PHP 學習筆記之語言基礎篇PHP筆記
- Python基礎語法筆記——帶思維導圖Python筆記
- 從零開始學 Python 之基礎語法Python
- Python零基礎學習筆記(十八)——break語句和continue語句Python筆記
- markdown學習(基礎語法)
- 學習Rust 基礎語法Rust
- hive學習筆記之九:基礎UDFHive筆記
- hive學習筆記之六:HiveQL基礎Hive筆記
- ABAP學習筆記-基礎語法-05-字串的處理(02)筆記字串
- ES6語法學習筆記之promise筆記Promise
- python 基礎習題1--基礎語法Python
- Python 3 學習筆記之——物件導向Python筆記物件
- Latex排版學習筆記(3)——latex基礎教程筆記
- C++基礎知識學習筆記(3)C++筆記
- 初學Python(1)基礎語法Python
- Python學習筆記 - if語句Python筆記
- python 基礎語法之物件導向Python物件
- 大資料學習記錄,Python基礎(3)大資料Python
- CSS 基礎學習筆記CSS筆記