1. 程式人生 > 其它 >Python筆記_2基礎之關鍵知識點解析

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 中萬物皆物件,intstrfloatlisttuple等內建資料型別其實也是類,也可以用 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目錄版,如想獲得請掃碼關注右側公眾號自動獲取