Python學習手冊(1):寫在前面

2020-08-13 13:16:15

Python基本介紹

Python是一門通用型的程式語言,逐漸受到越來越多人的追捧。一言以蔽之,Python是一種解釋性、物件導向的語言;具體點說,Python是一門融合了程序導向、函數式和麪向物件程式設計範式的多目標語言。

Python的特點

可讀性強;簡潔簡潔;物件導向;免費和開源;可移植性和跨平臺;豐富的庫;可拓展性。

應用範圍

1.科學計算2.人工智慧3.WEB伺服器端和大型網站後端4.GUI開發(使用者圖形介面開發)5.遊戲開發6.移動裝置7.嵌入式裝置8.系統運維9.大數據10.雲端計算

Python的缺點

Python是解釋執行,效能較低,因此,影響效能的功能可以使用C/C++/JAVA/GO等語言去開發。

版本和相容性問題

Python 2:2000年10月發佈,最新版本是2.7,已停止更新
Python 3:2008年發佈,對比Python 2有較大提升,不相容Python2
相容性問題的解決:Python 3 的許多新特性也被移植到了Python2.7作爲過渡,如果程式可以在2.7版本上執行,可以通過2to3(Python自帶的指令碼)的轉換工具無縫遷移到Python3

Python直譯器簡介

直譯器是一種能讓其他程式執行起來的程式。當你編寫一段Python程式,Python直譯器將讀取程式,並按照其中的命令執行,得出結果。實際上,直譯器就是程式碼與機器的計算機硬體之間的軟體邏輯層。
Python程式的執行依賴於Python直譯器,常見的Python直譯器有: PyPy,CPython,Jython,IronPython,Stackless等;

Python下載與安裝(直譯器)

  1. 進入官網:https://www.python.org/downloads/
  2. 下載Python包
    图2-1		Python下载界面
  3. 安裝python:與安裝一般軟體差別不大,不再贅述
  4. 環境變數問題
    勾選「Add Python to environment variable」,這樣就可以將Python新增到環境變數Path中,我們在windows的命令列模式下執行Python直譯器。
    图2-2		Python安装示意图
    图2-3		安装成功示意图

互動式命令列模式

  1. 互動式執行程式碼
    图2-4		交互式运行代码示意图
  2. 互動式執行指令碼檔案:指令碼檔案以.py後綴結尾
    图2-5		运行以.py结尾的脚本文件示意图以及将运行结果存放在txt文件中示意图
  3. 執行指令碼檔案並將其結果儲存在txt檔案中(程式碼如上,執行結果如下)
    图2-6		将结果存储在txt文件中示意图

匯入和過載

每個以拓展名.py結尾的Python原始檔都是一個模組,其他檔案可以通過匯入一個模組讀取這個模組定義的內容——匯入操作從本質上來說就是載入另一個檔案,並給予讀取這個檔案內容的許可權。
預設情況下,在互動對話中,每個模組的的匯入只會執行一次。要想在同一次對話中再次執行這個檔案,而不停止和重新啓動對話,需要呼叫imp 標準庫模組中可用的reload函數。(此函數在Python2中內建,在Python3中不內建)
图2-7		导入与重载示意图

獲取模組的屬性

可以通過兩種不同的方式來從其他元件中獲取模組的屬性
图2-8		获取模块的属性示意图

使用exec執行模組檔案

這種方法也可以實現執行模組檔案中儲存的程式碼
图2-9		exec使用示意图

程式設計基本格式

恰當的空格,縮排問題

1.邏輯行首的空白(空格和製表符)用來決定邏輯行的縮排層次,從而用來決定語句的分組。
2.語句從新行的第一列開始。
3.縮排風格統一:
① 每個縮排層次使用單個製表符或者四個空格(IDE)會自動將製表符設定成4個空格)
② Python用縮排而不是{}表示程式塊
[縮排的報錯提醒: IndentationError: unexpected indent ]

Python區分大小寫

註釋

1.行註釋
每行註釋前加#號。當直譯器看到#,則忽略這一行#後面的內容。註釋可以用ctrl+/快捷鍵。
2.段註釋
使用三個連續單引號(’’’),當直譯器看到’’’,則會掃描下一個’’’,然後忽略他們之間的內容。

變數和數據型別

什麼是變數

變數是一段有名字的連續儲存的空間,我們可以通過定義變數來申請並命名這樣的儲存空間,並通過變數的名稱來使用這段儲存空間。

變數的建立

一個變數(即變數名),當程式碼第一次給它賦值時就建立了它。之後的賦值將改變這個變數名的值。可以理解爲最初的賦值操作在建立變數。

變數型別

變數永遠不會擁有和它關聯的型別資訊或約束。型別的概念存在於物件而不是變數名中。變數原本是相通的,只是在特定的一個時間點,簡單地參照了一個特定的物件而已。

變數使用

當變數出現在表達式中時,它會馬上被當前參照的物件所替代,無論這個物件是什麼型別。此外,所有的變數必須在使用前被明確地賦值,使用未賦值的變數會產生錯誤。

檢視變數當前參照的物件的數據型別

使用type函數,type(變數);
如:

a=10
print(type(a))

變數的命名規則

  • 變數必須以字母(a—z,A—Z)或者是下劃線(_)開頭。
  • 其他字元可以是字母、數位或者下劃線。
  • 變數區分大小寫。
  • python 關鍵字不能作爲變數名。
    图3-1		Python关键字
    [補充]:以下劃線開頭的識別符號是有特殊意義的。以單下劃線開頭 _foo 的代表不能直接存取的類屬性,需通過類提供的介面進行存取,不能用 from xxx import * 而匯入。
    以雙下劃線開頭的 __foo 代表類的私有成員,以雙下劃線開頭和結尾的 foo 代表 Python 裡特殊方法專用的標識,如 init() 代表類別建構函式。
    Python 可以同一行顯示多條語句,方法是用分號 ‘; ’分開。

命名規範

  • 見名知意,如:password作爲密碼。
  • 小駝峯命名法,如:userName作爲使用者名稱。
  • 大駝峯命名法,如:UserName作爲使用者名稱。
  • 下劃線命名法,如:user_name作爲使用者名稱。

運算子

這裏以a=10,b=20爲例。

算數運算子

運算子 描述
+ 加:兩個物件相加
- 減:得到負數或是一個數減去另一個數
* 乘:兩個數相乘或是返回一個被重複若幹次的字串
/ 除:x除以y
% 取模:返回除法的餘數
** 冪:返回x的y次冪
// 取整除:返回商的整數部分(向下取整)

程式碼範例如下:

a=10
b=20
print('a+b=',a+b)
print('a-b=',a-b)
print('a*b=',a*b)
print('a/b=',a/b)
print('a%b=',a%b)
print('a**b=',a**b)
print('a//b=',a//b)

執行結果如下:
a+b= 30
a-b= -10
a*b= 200
a/b= 0.5
a%b= 10
a**b= 100000000000000000000
a//b= 0

比較運算子

所有比較運算子返回1表示真,返回0表示假。這分別與特殊的變數True和False等價。

運算子 描述
== 等於:比較物件是否相等
!= 不等於:比較兩個物件是否不相等
<> 不等於:比較兩個物件是否不相等。python3 已廢棄
> 大於:返回x是否大於y
< 小於:返回x是否小於y
>= 大於等於:返回x是否大於等於y
<= 小於等於:返回x是否小於等於y

程式碼範例如下:

a=10
b=20
print('a==b的值',a==b)
print('a!=b的值',a!=b)
# python3 已廢棄<>運算子
# print('a<>b的值',a<>b)
print('a>b的值',a>b)
print('a<b的值',a<b)
print('a>=b的值',a>=b)
print('a<=b的值',a<=b)

執行結果如下:
a==b的值 False
a!=b的值 True
a>b的值 False
a<b的值 True
a>=b的值 False
a<=b的值 True

賦值運算子

賦值運算子和C語言中相同,s[str]=x等價於s=s[str]x。這裏的str代表+、-、*、/、%、**、//等符號。其中,允許x,y=10,20這種賦值方式。

運算子 描述
= 簡單的賦值運算子
+= 加法賦值運算子
-= 減法賦值運算子
*= 乘法賦值運算子
/= 除法賦值運算子
%= 取模賦值運算子
**= 冪賦值運算子
//= 取整除賦值運算子

位運算子

位運算子首先將變數轉換爲2進位制,然後進行相關位元運算,返回結果是已經轉換爲10進位制的數值。

運算子 描述
& 按位元與運算子:參與運算的兩個值,如果兩個相應位都爲1,則該位的結果爲1,否則爲0
| 按位元或運算子:只要對應的二個二進位有一個爲1時,結果位就爲1
^ 按位元互斥或運算子:當兩對應的二進位相異時,結果爲1
~ 按位元取反運算子:對數據的每個二進制位取反,即把1變爲0,把0變爲1 。~x 類似於 -x-1
<< 左移動運算子:運算數的各二進位全部左移若幹位,由 << 右邊的數位指定了移動的位數,高位丟棄,低位補0
>> 右移動運算子:把">>"左邊的運算數的各二進位全部右移若幹位,>> 右邊的數位指定了移動的位數

程式碼範例如下:

a=10
b=20
print('a&b=',a&b)
print('a|b=',a|b)
print('a^b=',a^b)
print('~a=',~a)
print('a<<2=',a<<2)
print('a>>2=',a>>2)

執行結果如下:
a&b= 0
a|b= 30
a^b= 30
~a= -11
a<<2= 40
a>>2= 2
[補充]:由於負數在計算機中是以二補數的形式存在的,所以負數進行位運算時,需要先將其轉換爲二補數形式,然後再進行位運算子,最後輸出10進位制結果。

邏輯運算子

運算子 邏輯表達式 描述
and x and y 布爾"與" :如果 x 爲 False,x and y 返回 False,否則它返回 y 的計算值。(除非x爲0,返回0[false],否則返回y的值)
or x or y 布爾"或" :如果 x 是非 0,它返回 x 的值,否則它返回 y 的計算值。(除非x爲0,返回y的值,否則返回x的值)
not x not y 布爾"非" :如果 x 爲 True,返回 False 。如果 x 爲 False,它返回 True

成員運算子

Python還支援成員運算子,測試範例中包含了一系列的成員,包括字串,列表或元組。

運算子 描述
in 如果在指定的序列中找到值返回 True,否則返回 False
not in 如果在指定的序列中沒有找到值返回 True,否則返回 False

身份運算子

身份運算子用於比較兩個物件的儲存單元是否參照同一個物件

運算子 描述
is is 是判斷兩個識別符號是不是參照自一個物件,如果參照的是同一個物件則返回 True,否則返回 False。類似於id(x) == id(y)
is not is not 是判斷兩個識別符號是不是參照自不同對象,如果參照的是不同對象則返回 True,否則返回 False。類似於id(x) != id(y)

運算子優先順序比較

運算子 描述
** 指數 (最高優先順序)
~ + - 按位元翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法、減法
>> << 右移,左移運算子
& 位 ‘AND’
^ /
<= < > >= 比較運算子
<> == != 等於運算子
= %= /= //= -= += *= **= 賦值運算子
is is not 身份運算子
in not in 成員運算子
not and or 邏輯運算子

python的輸入與輸出

格式化輸出

  • Python有一個簡單的格式化方法,使用%佔位符,%後面的跟的是變數的數據型別。
    程式碼範例如下:
a=10
c='niro'
print('我今年%d歲了,我的名字是%s!'%(a,c))

執行結果如下:
我今年10歲了,我的名字是niro!

  • 格式化輸出的另外一種形式,.format()。它可以通過編號來更改順序。
    程式碼範例如下:
a=10
c='niro'
print('我今年{1}歲了,我的名字是{0}!'.format(c,a))

執行結果如下:
我今年10歲了,我的名字是niro!

輸入

Python提供了input的方式進行獲取鍵盤輸入(input獲取的輸入都是str型別的,如果需要輸入數位型,需要進行型別轉換)

程式碼範例如下:

# 通過input函數進行輸入,字串參數爲輸入提示
a=input('請輸入a:')
# 使用input輸入的內容都是字串型別
print(a,type(a))
# 強制型別轉換爲int型,數位10代表10進位制
b=int(a,10)
print(b,type(b))

執行結果如下:
請輸入a:10
10 <class ‘str’>
10 <class ‘int’>