1. 程式人生 > >1、【Python】Python 3入門(簡介/基礎語法/運算子/變數/資料型別/位元組)

1、【Python】Python 3入門(簡介/基礎語法/運算子/變數/資料型別/位元組)

一、簡介

    Python 是一種高層次的結合瞭解釋性、編譯性、互動性和麵向物件的指令碼語言。Python 由 Guido van Rossum 於 1989 年底在荷蘭國家數學和電腦科學研究所發明,第一個公開發行版發行於 1991 年。

特點:

  • 易於學習:Python 有相對較少的關鍵字,結構簡單,和一個明確定義的語法,學習起來更加簡單。

  • 易於閱讀:Python 程式碼定義的更清晰。

  • 易於維護:Python 的成功在於它的原始碼是相當容易維護的。

  • 一個廣泛的標準庫:Python 的最大的優勢之一是豐富的庫,跨平臺的,在 UNIX,Windows 和 macOS 相容很好。

  • 互動模式:互動模式的支援,您可以從終端輸入執行程式碼並獲得結果的語言,互動的測試和除錯程式碼片斷。

  • 可移植:基於其開放原始碼的特性,Python 已經被移植(也就是使其工作)到許多平臺。

  • 可擴充套件:如果你需要一段執行很快的關鍵程式碼,或者是想要編寫一些不願開放的演算法,你可以使用 C 或 C++ 完成那部分程式,然後從你的Python 程式中呼叫。

  • 資料庫:Python 提供所有主要的商業資料庫的介面。

  • GUI 程式設計:Python 支援 GUI 可以建立和移植到許多系統呼叫。

  • 可嵌入:你可以將 Python 嵌入到 C/C++ 程式,讓你的程式的使用者獲得”指令碼化”的能力。

  • 面向物件:Python 是強面向物件的語言,程式中任何內容統稱為物件,包括數字、字串、函式等。

二、基礎語法

1、執行Python

互動式直譯器

    在命令列視窗執行python後,進入 Python 的互動式直譯器。exit() 或 Ctrl + D 組合鍵退出互動式直譯器。

命令列指令碼

    在命令列視窗執行python script-file.py,以執行 Python 指令碼檔案。

指定直譯器

    如果在 Python 指令碼檔案首行輸入#!/usr/bin/env python,那麼可以在命令列視窗中執行/path/to/script-file.py以執行該指令碼檔案。

:該方法不支援 Windows 環境。

2、編碼

    預設情況下,3.x 原始碼檔案都是 UTF-8 編碼,字串都是 Unicode 字元。也可以手動指定檔案編碼:

    # -*- coding: UTF-8 -*-

或者

    #encoding: uft-8

注意: 該行標註必須位於檔案第一行

3、識別符號
  • 第一個字元必須是英文字母或下劃線 _ 。
  • 識別符號的其他的部分由字母、數字和下劃線組成。
  • 識別符號對大小寫敏感。

:從 3.x 開始,非 ASCII 識別符號也是允許的,但不建議。

4、保留字

    保留字即關鍵字,我們不能把它們用作任何識別符號名稱。Python 的標準庫提供了一個 keyword 模組,可以輸出當前版本的所有關鍵字:

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
5、註釋

    單行註釋採用#,多行註釋採用’’'或"""。

# 這是單行註釋

'''
這是多行註釋
這是多行註釋
'''

"""
這也是多行註釋
這也是多行註釋
"""
6、行與縮排

    Python 最具特色的就是使用縮排來表示程式碼塊,不需要使用大括號 {}縮排的空格數是可變的,但是同一個程式碼塊的語句必須包含相同的縮排空格數。縮排不一致,會導致執行錯誤。

7、多行語句

    Python 通常是一行寫完一條語句,但如果語句很長,我們可以使用反斜槓""來實現多行語句。

total = item_one + \
        item_two + \
        item_three

在 [], {}, 或 () 中的多行語句,不需要使用反斜槓。

8、空行

    函式之間或類的方法之間用空行分隔,表示一段新的程式碼的開始。類和函式入口之間也用一行空行分隔,以突出函式入口的開始。

    空行與程式碼縮排不同,空行並不是 Python 語法的一部分。書寫時不插入空行,Python 直譯器執行也不會出錯。但是空行的作用在於分隔兩段不同功能或含義的程式碼,便於日後程式碼的維護或重構

記住:空行也是程式程式碼的一部分。

9、等待使用者輸入

    input函式可以實現等待並接收命令列中的使用者輸入。

content = input("請輸入點東西並按 Enter 鍵")
print(content)
10、同一行寫多條語句

    Python 可以在同一行中使用多條語句,語句之間使用分號;分割。

import sys; x = 'hello world'; sys.stdout.write(x + '')
11、多條語句構成程式碼組

    縮排相同的一組語句構成一個程式碼塊,我們稱之程式碼組。

    像if、while、def和class這樣的複合語句,首行以關鍵字開始,以冒號:結束,該行之後的一行或多行程式碼構成程式碼組。

    我們將首行及後面的程式碼組稱為一個子句(clause)

12、print輸出

    print 預設輸出是換行的,如果要實現不換行需要在變數末尾加上end=""或別的非換行符字串:

print('123') # 預設換行
print('123', end = "") # 不換行
13、import 與from ……import

    在Python中用import或則from……import來匯入相應的模組。將整個模組匯入,格式為:

import module_name

    從某個模組匯入某個函式,格式為:

from mudule_name import func1

    從某個模組中匯入多個函式,格式為

from module_name import func1, func2, func3

    將某個模組的全部函式匯入,格式為:

from module_name import *

三、運算子

1、算數運算子
2、比較運算子
3、賦值運算子
4、位運算子
5、邏輯運算子
6、成員運算子
7、身份運算子
8、運算子優先順序

四、變數

    變數在使用前必須先”定義”(即賦予變數一個值),否則會報錯:

>>> name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'name' is not defined

五、資料型別

1、布林(bool)

    只有 True 和 False 兩個值,表示真或假。

2、數字(number)

整型(int)

    整數值,可正數亦可複數,無小數。 3.x 整型是沒有限制大小的,可以當作 Long 型別使用,所以 3.x 沒有 2.x 的 Long 型別。

浮點型(float)

    浮點型由整數部分與小數部分組成,浮點型也可以使用科學計數法表示(2.5e2 = 2.5 x 10^2 = 250)

複數(complex)

    複數由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示,複數的實部 a 和虛部 b 都是浮點型。

數字運算

  • 不同型別的數字混合運算時會將整數轉換為浮點數
  • 在不同的機器上浮點運算的結果可能會不一樣
  • 在整數除法中,除法 / 總是返回一個浮點數,如果只想得到整數的結果,丟棄可能的分數部分,可以使用運算子 //。
  • // 得到的並不一定是整數型別的數,它與分母分子的資料型別有關係
  • 在互動模式中,最後被輸出的表示式結果被賦值給變數 是個只讀變數

數學函式
注:以下函式的使用,需先匯入 math 包。

隨機函式
注:以下函式的使用,需先匯入 random 包。

三角函式
注:以下函式的使用,需先匯入 math 包。

數學常量

3、字串
  • 單引號和雙引號使用完全相同
  • 使用三引號(’’'或""")可以指定一個多行字串
  • 轉義符(反斜槓)可以用來轉義,使用r可以讓反斜槓不發生轉義,如r"this is " a line with ",則會顯示,並不是換行
  • 按字面意義級聯字串,如"this " "is " "string"會被自動轉換為this is string
  • 字串可以用 + 運算子連線在一起,用 * 運算子重複
  • 字串有兩種索引方式,從左往右以 0 開始,從右往左以 -1 開始
  • 字串不能改變
  • 沒有單獨的字元型別,一個字元就是長度為 1 的字串
  • 字串的擷取的語法格式如下:變數[頭下標:尾下標]

轉義字元

字串運算子

字串格式化
    在 Python 中,字串格式化不是 sprintf 函式,而是用 % 符號。例如:

print("我叫%s, 今年 %d 歲!" % ('小明', 10))
// 輸出:我叫小明, 今年 10 歲!

格式化符號:

輔助指令:

    Python 2.6 開始,新增了一種格式化字串的函式 str.format(),它增強了字串格式化的功能。

多行字串

  • 用三引號(’’’ 或 “”")包裹字串內容
  • 多行字串內容支援轉義符,用法與單雙引號一樣
  • 三引號包裹的內容,有變數接收或操作即字串,否則就是多行註釋
string = '''
print(math.fabs(-10))
print(random.choice(li))
'''
print(string)

執行結果:

>>> print (string)

print (math.fabs(-10))
print (random.choice(li))

注意:在 2.x 中,普通字串是以 8 位 ASCII 碼進行儲存的,而 Unicode 字串則儲存為 16 位 Unicode 字串,這樣能夠表示更多的字符集。使用的語法是在字串前面加上字首 u。在 3.x 中,所有的字串都是 Unicode 字串。

字串函式

六、位元組

    在 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')