Python筆記_2基礎之關鍵知識點解析
前言導讀
本章也是從小編學習的各種資料中提取而來的知識點,
它全面而有簡單的介紹了python基礎的關鍵知識點.
1 互動式直譯器
在命令列視窗執行python
後,進入 Python 的互動式直譯器。exit()
或 Ctrl + D
組合鍵退出互動式直譯器。
2 指定直譯器
如果在 Python 指令碼檔案首行輸入#!/usr/bin/env python
,那麼可以在命令列視窗中執行/path/to/script-file.py
以執行該指令碼檔案。
4 編碼
預設情況下,3.x 原始碼檔案都是 UTF-8 編碼,字串都是 Unicode 字元。也可以手動指定檔案編碼:
# -*- coding: utf-8 -*-
或者
# encoding: utf-8
注意: 該行標註必須位於檔案第一行
5 識別符號
- 第一個字元必須是英文字母或下劃線
_
。 - 識別符號的其他的部分由字母、數字和下劃線組成。
- 識別符號對大小寫敏感。
注:從 3.x 開始,非 ASCII 識別符號也是允許的,但不建議。
9 數字運算
- 不同型別的數字混合運算時會將整數轉換為浮點數
- 在不同的機器上浮點運算的結果可能會不一樣
- 在整數除法中,除法
/
總是返回一個浮點數,如果只想得到整數的結果,丟棄可能的分數部分,可以使用運算子//
。 //
得到的並不一定是整數型別的數,它與分母分子的資料型別有關係- 在互動模式中,最後被輸出的表示式結果被賦值給變數
_
_
是個只讀變數
10 Unicode
在 2.x 中,普通字串是以 8 位 ASCII 碼進行儲存的,而 Unicode 字串則儲存為 16 位 Unicode 字串,這樣能夠表示更多的字符集。使用的語法是在字串前面加上字首 u
。
在 3.x 中,所有的字串都是 Unicode 字串。
11 位元組(bytes)
在 3.x 中,字串和二進位制資料完全區分開。文字總是 Unicode,由 str 型別表示,二進位制資料則由 bytes 型別表示。Python 3 不會以任意隱式的方式混用 str 和 bytes,你不能拼接字串和位元組流,也無法在位元組流裡搜尋字串(反之亦然),也不能將字串傳入引數為位元組流的函式(反之亦然)。
- bytes 型別與 str 型別,二者的方法僅有 encode() 和 decode() 不同。
- bytes 型別資料需在常規的 str 型別前加個
b
以示區分,例如b'abc'
。 - 只有在需要將 str 編碼(encode)成 bytes 的時候,比如:通過網路傳輸資料;或者需要將 bytes 解碼(decode)成 str 的時候,我們才會關注 str 和 bytes 的區別。
bytes 轉 str:
b'abc'.decode()
str(b'abc')
str(b'abc', encoding='utf-8')
str 轉 bytes:
'中國'.encode()
bytes('中國', encoding='utf-8')
12 自定義函式
函式(Functions)是指可重複使用的程式片段。它們允許你為某個程式碼塊賦予名字,允許你通過這一特殊的名字在你的程式任何地方來執行程式碼塊,並可重複任何次數。這就是所謂的呼叫(Calling)函式。
13 引數
必需引數
必需引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。
關鍵字引數
關鍵字引數和函式呼叫關係緊密,函式呼叫使用關鍵字引數來確定傳入的引數值。 使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 Python 直譯器能夠用引數名匹配引數值。
def print_info(name, age):
"列印任何傳入的字串"
print("名字: ", name)
print("年齡: ", age)
return
print_info(age=50, name="john")
預設引數
呼叫函式時,如果沒有傳遞引數,則會使用預設引數。
def print_info(name, age=35):
print ("名字: ", name)
print ("年齡: ", age)
return
print_info(age=50, name="john")
print("------------------------")
print_info(name="john")
不定長引數
- 加了星號
*
的引數會以元組的形式匯入,存放所有未命名的變數引數。 - 如果在函式呼叫時沒有指定引數,它就是一個空元組。我們也可以不向函式傳遞未命名的變數。
def print_info(arg1, *vartuple):
print("輸出: ")
print(arg1)
for var in vartuple:
print (var)
return
print_info(10)
print_info(70, 60, 50)
- 加了兩個星號
**
的引數會以字典的形式匯入。變數名為鍵,變數值為字典元素值。
def print_info(arg1, **vardict):
print("輸出: ")
print(arg1)
print(vardict)
print_info(1, a=2, b=3)
14 模組
編寫模組有很多種方法,其中最簡單的一種便是建立一個包含函式與變數、以 .py 為字尾的檔案。
另一種方法是使用撰寫 Python 直譯器本身的本地語言來編寫模組。舉例來說,你可以使用 C 語言來撰寫 Python 模組,並且在編譯後,你可以通過標準 Python 直譯器在你的 Python 程式碼中使用它們。
模組是一個包含所有你定義的函式和變數的檔案,其後綴名是.py
。模組可以被別的程式引入,以使用該模組中的函式等功能。這也是使用 Python 標準庫的方法。
當直譯器遇到 import 語句,如果模組在當前的搜尋路徑就會被匯入。
搜尋路徑是一個直譯器會先進行搜尋的所有目錄的列表。如想要匯入模組,需要把命令放在指令碼的頂端。
一個模組只會被匯入一次,這樣可以防止匯入模組被一遍又一遍地執行。
搜尋路徑被儲存在 sys 模組中的 path 變數。當前目錄指的是程式啟動的目錄。
name 統一屬性
每個模組都有一個 __name__
屬性,當其值是 '__main__'
時,表明該模組自身在執行,否則是被引入。
一個模組被另一個程式第一次引入時,其主程式將執行。如果我們想在模組被引入時,模組中的某一程式塊不執行,我們可以用 __name__
屬性來使該程式塊僅在該模組自身執行時執行。
if __name__ == '__main__':
print('程式自身在執行')
else:
print('我來自另一模組')
dir 函式檢視模組定義名稱
內建的函式 dir()
可以找到模組內定義的所有名稱。以一個字串列表的形式返回。
如果沒有給定引數,那麼 dir()
函式會羅列出當前定義的所有名稱。
在 Python 中萬物皆物件,int
、str
、float
、list
、tuple
等內建資料型別其實也是類,也可以用 dir(int)
檢視 int
包含的所有方法。也可以使用 help(int)
檢視 int
類的幫助資訊。
15 包
包是一種管理 Python 模組名稱空間的形式,採用”點模組名稱”。
比如一個模組的名稱是 A.B, 那麼他表示一個包 A中的子模組 B 。
就好像使用模組的時候,你不用擔心不同模組之間的全域性變數相互影響一樣,採用點模組名稱這種形式也不用擔心不同庫之間的模組重名的情況。
在匯入一個包的時候,Python 會根據 sys.path 中的目錄來尋找這個包中包含的子目錄。
目錄只有包含一個叫做 __init__.py
的檔案才會被認作是一個包,主要是為了避免一些濫俗的名字(比如叫做 string)不小心的影響搜尋路徑中的有效模組。
最簡單的情況,放一個空的 __init__.py
檔案就可以了。當然這個檔案中也可以包含一些初始化程式碼或者為 __all__
變數賦值。
16 迭代器
- 迭代器是一個可以記住遍歷的位置的物件。
- 迭代器物件從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
- 迭代器有兩個基本的方法:
iter()
和next()
。 - 字串,列表或元組物件都可用於建立迭代器。
迭代器可以被 for 迴圈進行遍歷:
li = [1, 2, 3]
it = iter(li)
for val in it:
print(val)
迭代器也可以用 next() 函式訪問下一個元素值:
import sys
li = [1,2,3,4]
it = iter(li)
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
17 生成器
- 在 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))
except StopIteration:
sys.exit()
(本章完)
所有資源均有PDF目錄版,如想獲得請掃碼關注右側公眾號自動獲取