python 基礎知識

nt1979發表於2021-09-09

[toc]


碼好python的每一篇文章.

圖片描述

1. 基礎語法

1.1 註釋

在編寫程式碼的時候,有些程式碼不需要執行或增加程式碼說明,那麼就需要用到註釋了。

被註釋的文字或程式碼是不會被執行的。

註釋可以使用如下三種方式:

  • # 號
# 第一個註釋,本行程式碼不會執行
print("hello world!") # 第二個註釋
  • ‘’’ 三個單引號

也叫塊註釋,支援換行。

'''
第一行註釋,本行程式碼不會執行
第二行註釋,本行程式碼不會執行
第三行註釋,本行程式碼不會執行
'''
print('hello world!')
  • “”" 三個雙引號

也叫塊註釋,支援換行。

"""
第一行註釋,本行程式碼不會執行
第二行註釋,本行程式碼不會執行
第三行註釋,本行程式碼不會執行
"""
print('hello world!')

1.2 跳脫字元

常用的轉義符:

跳脫字元 描述
(行尾) 續行
反斜槓()
` 單引號(’)
" 雙引號(")
n 換行
r 回車
t Tab鍵(TAB)
  • 行尾,用於續行
>>> print("www
.python.
org")
# 輸出結果
www.python.org
  • ‘’\",兩個反雙斜槓,轉義為1個反斜槓

    非正常結果 示例:

    >>> str = 'c:windowsnote'
    >>> print(str)
    # 輸出結果:' n '當作換行來用了,才會出現如下情況
    c:windows
    ote
    

    正常結果 示例:

    #把'n'改成'\n'就可以解決了
    >>> str = 'c:windows\note'
    >>> print(str)
    # 修改後輸出結果:
    c:windowsnote
    

1.3 縮排

嚴格約定使用4個 空格 和一個 製表符 (tab)作為縮排,切記不能混用,否則報錯IndentationError

def fun():
	print('hello world')
	print('hello world')

1.4 識別符號

識別符號的本質是對應具體資料結構的值,因該值不能被程式設計師直接訪問,所以需要透過呼叫識別符號來訪問。

識別符號格式定義的要求:

  • 由字母(az)、數字(09)、下劃線(_)組成;
  • 不能以數字開頭;
  • 不能與python內建相同名;
  • 字母大小敏感;
  • 不能使用中文、也不建議用拼音

圖片描述

一切都是識別符號。

錯誤識別符號 示例:

# 報語法錯誤,識別符號不能以數字開頭
>>> 123 = '123'
  File "<stdin>", line 1
SyntaxError: can't assign to literal
    
# 報語法錯誤,class是python語言類用到的,不能作為識別符號
>>> class = 'abc'
  File "<stdin>", line 1
    class = 'abc'
          ^
SyntaxError: invalid syntax
  • 保留識別符號
FALSE await else import pass
None break except in raise
TRUE class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield

1.5 語言型別

  • python是動態語言、強型別語言。

    圖片描述

    動態編譯語言

    • 不用事先宣告資料型別,可以隨意賦值其他資料型別;
    • 程式設計時不知道時什麼型別,很難推斷,這也是python的不好的地方,v3.8嚴格在這方便做改進;
    # 識別符號隨意切換資料型別
    x = 123		# 定義x為整數
    x = '123'	# 定義x變為字串
    

    強型別語言

    不同型別之間進行變數賦值時,需要顯示地(強制)進行型別轉換

    >>> x = 123		# 定義x為整數
    >>> y = '456'	# 定義y為字串
    # 報型別錯誤,不同型別不能相加
    >>> print(x + y)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unsupported operand type(s) for +: 'int' and 'str'	
    # 重新強制修改下為同型別        
    >>> print(str(x) + y)
    123456
    

1.6 運算子

1.6.1 算術運算子

常見的算術運算子:加(+)、減(-)、乘(*)、除(/)、取整(//)、取模(%)、冪(**)

  • 加(+) 示例:

    >>> test = 1 + 1
    >>> print(test)
    # 輸出結果如下:
    2
    
  • 減(-) 示例:

    >>> test = 1 - 1
    >>> print(test)
    # 輸出結果如下:
    0
    
  • 乘(*) 示例:

    >>> test = 1 * 1
    >>> print(test)
    # 輸出結果如下:
    1
    
  • 除(/) 示例:

    >>> test = 4 / 2
    >>> print(test)
    # 輸出結果如下:
    2.0    #結果是一個浮點型別
    

    備註:注意python2.x ///都是取整。

  • 取整(//) 示例:
    說明:又叫做向下取整、地板除(往數值小的方向取整數)

    >>> test1 = 5 // 2
    >>> test2 = -5 // 2
    >>> print('test1的結果:',test1)
    >>> print('test2的結果:',test2)
    # 輸出結果如下:
    test1的結果: 2		# 實際結果為2.5,靠近2,所以取2
    test2的結果: -3	# 實際結果為-2.5,靠近-3,所以取-3
    
  • 取模(%) 示例:
    如果都是正數,那麼取餘和取模都是餘數,但特別要注意的地方是使用到正負數,這就要藉助一個公式:

*模值*=x % y=x - [x // y] * y

>>> test1 =  5 % 3
>>> test2 = -5 % 3	#模值=-5 % 3=(-5)-[-5//3]*3=(-5)-(-2)*3=-5+6=1
>>> test3 =  5 % -3	#模值=5 % (-3)=5-[5//(-3)]*(-3)=5-(-2)*(-3)=5-6=-1
>>> test4 = -5 % -3	#模值=-5 % (-3)=-5-[-5//(-3)]*(-3)=-5-(1)*(-3)=-5+3=-2
>>> print('test1的結果:',test1)
>>> print('test2的結果:',test2)
>>> print('test3的結果:',test3)
>>> print('test4的結果:',test4)
# 輸出結果如下:
test1的結果:  2
test2的結果:  1
test3的結果: -1
test4的結果: -2
  • 冪(**) 示例:

    >>> test =  2 ** 2
    >>> print('tests的結果:',test)
    # 輸出結果如下:
    test的結果: 4
    

1.6.2 位運算子

位與(&)、位或(|)、異或(^)、左移(<<)、右移(>>)

計算機的語言都是0 ,1 表示的二進位制,位運算也是以二進位制來計算的。

以下示例採用如下兩個識別符號進行計算:

x = 18	#10進位制轉為二進位制:0001 0010
y = 20 	#10進位制轉為二進位制:0001 0100
  • 位與(&) 示例:

    說明:位與(&)是以二進位制計算兩者位都是 11 ,否則都是 0

    圖片描述

    >>> x = 18
    >>> y = 20
    >>> print('x & y 結果是:', x & y)
    # 輸出結果如下:
    x & y 結果是: 16
    
  • 位或(|)
    說明:位或(|)是以二進位制計算兩者位有一個 11 ,否則都是 0

    圖片描述

    >>> x = 18
    >>> y = 20
    >>> print('x | y 結果是:', x | y)
    # 輸出結果如下:
    x | y 結果是: 22
    
  • 異或(^)
    說明:異或(^)是以二進位制計算兩者位都有 10 ,有一個 11,其他為 0

    圖片描述

    >>> x = 18
    >>> y = 20
    >>> print('x ^ y 結果是:', x ^ y)
    # 輸出結果如下:
    x ^ y 結果是: 6
    
  • 左移(<<)
    左移(<<)是整體向最高位(左邊)移動位數。

    圖片描述

    >>> x = 18
    >>> y = 20
    >>> print('x 左移1位的結果是:', x << 1)
    >>> print('y 左移2位的結果是:', y << 2)
    # 輸出結果如下:
    x 左移1位的結果是: 36
    y 左移2位的結果是: 80
    
  • 右移(>>)
    右移(>>)是整體向最低位(右邊)移動位數。

    圖片描述

    >>> x = 18
    >>> y = 20
    >>> print('x 右移1位的結果是:', x >> 1)
    >>> print('y 右移2位的結果是:', y >> 2)
    # 輸出結果如下:
    x 右移1位的結果是: 9
    y 右移2位的結果是: 5
    

1.6.3 比較運算子

常見的比較運算子:等於(==)、不等於(!=)、大於(>)、大於等於(>=)、小於(<)、小於等於(<=),返回的結果是布林(bool)型別。

比較運算只能用於同一資料型別比較(除了==和!=),比如:同數值型別比較、同字串比較等。

>>> x = '18'
>>> y = 20
>>> print('比較的結果是:', x < y)
# 輸出結果如下:不同型別不能比較
TypeError: '<' not supported between instances of 'str' and 'int'
  • 等於(==) 示例:

    >>> x = 18
    >>> y = 20
    >>> print('比較的結果是:', x == y)
    # 輸出結果如下:
    比較的結果是: False
    
  • 不等於(!=) 示例:

    >>> x = 18
    >>> y = 20
    >>> print('比較的結果是:', x != y)
    # 輸出結果如下:
    比較的結果是: True
    
  • 大於(>) 示例:

    >>> x = 18
    >>> y = 20
    >>> print('比較的結果是:', x > y)
    # 輸出結果如下:
    比較的結果是: False
    
  • 大於等於(>=) 示例:

    >>> x = 18
    >>> y = 20
    >>> print('比較的結果是:', x >= y)
    # 輸出結果如下:
    比較的結果是: False
    
  • 小於(<) 示例:

    >>> x = 18
    >>> y = 20
    >>> print('比較的結果是:', x < y)
    # 輸出結果如下:
    比較的結果是: True
    
  • 小於等於(<=) 示例:

    >>> x = 18
    >>> y = 20
    >>> print('比較的結果是:', x <= y)
    # 輸出結果如下:
    比較的結果是: True
    

1.6.4 邏輯運算子

常見的邏輯運算子:與(and)、或(or)、非(not)

邏輯運算子返回的不一定是布林型別(bool),比如:1 and 'abc’返回的是‘abc’

另外,先提前瞭解下為假(False)物件有如下這些,易於理解:

圖片描述

  • 與(and) 示例:

說明:所有條件為真(True),返回結果才為真,否則為假(False)

x = 1
y = -1	#負數物件都是真(True)
if x and y:
    print('x and y 均為真')
else:
	print('x and y 其中有一個為假')
# 輸出結果如下:
x and y 均為真
######################################
x = 1
y = ''	#空字串物件都是假(False)
if x and y:
	print('x and y 均為真')
else:
    print('x and y 其中有一個為假')
# 輸出結果如下:
x and y 其中有一個為假
  • 或(or) 示例:
    說明:只要有一個條件為真(True),返回結果為真,否則為假(False)

    x = 1
    y = []
    if x or y:
        print('x or y 為真')
    else:
        print('x or y 都為假')
    #輸出結果如下:
    'x or y 為真
    ######################################
    x = 0
    y = []
    if x or y:
        print('x or y 為真')
    else:
        print('x or y 都為假')  
    #輸出結果如下:
    x or y 都為假
    
  • 非(not) 示例:
    說明:將真假物件置為相反,比如not 物件為True,則變為False,not 物件為False,則變為True

    x = 1
    if not x:
        print('其實x物件為假')
    else:
        print('其實x物件為真')
    #輸出結果如下:
    其實x物件為真
    ######################################
    x = {}
    if not x:
        print('其實x物件是假的')
    else:
        print('其實x物件是真的')
    #輸出結果如下:
    其實x物件為假
    

1.6.5 賦值運算子

先來個示例:x = 1, 賦值就是=號右邊的數值1賦值給左邊的變數x(記住始終先執行右邊表示式)。

常見的運算子:=、+=、-=、*=、=、%=、**=、=

另外,還可以使用鏈式賦值:x=y=z=1,即x=1,y=1,z=1

簡單賦值示例:

>>> x = 1	#右邊數值1賦值給了左邊X
>>> y = 'hello'	#右邊字串'hello'賦值給了左邊y

複雜賦值示例:

>>> x = 1
>>> x += 1	#等價於:x = x + 1,先執行=號右邊表示式,在賦值給左邊X
>>> print('x的結果是:',x)
#輸出結果如下:
2

1.6.6 成員運算子

常見的成員運算子:innot in

in 表示x的成員是否在目標y物件裡面,如果有則返回True,否則返回False。

>>> x = 'a'
>>> y = 'abcdefg'
>>> print('x的成員在y裡面:', x in y)	
#輸出結果如下:
x的成員在y裡面: True	# x的成員字串'a'在y的成員字串裡面,所以結果為True

not in 表示x的成員不在目標y物件裡面,如果不在返回True,否則返回False。

>>> x = 'a1'
>>> y = 'abcdefg'
>>> print('x的成員不在y裡面:', x not in y)
#輸出結果如下:
x的成員不在y裡面: True	# x的成員字串'a'在y的成員字串裡面,所以結果為True

1.6.7 身份運算子

身份運算子使用isis not來判斷識別符號是否在記憶體地址引用同一物件。

身份運算子經常在字面上容易讓大家踩坑,首先要區分下==is的區別:

  • ==:指的是賦值的內容是否一樣;

  • is:指的是識別符號引用記憶體地址同一物件,使用id()函式來識別;

這裡透過邏輯圖演示一下,方便理解:

圖片描述

示例如下:

>>> x = ['a','b','c']
>>> y = ['a','b','c']
>>> print('x的ID是:',id(x))
>>> print('y的ID是:',id(y))
>>> print('x 和 y是否等價(=):',x == y)
>>> print('x 和 y是否在記憶體地址引用同一物件(id):',x is y)
#輸出結果如下:
x的ID是: 1986422101448
y的ID是: 1986422101960
x 和 y是否等價(=): True
x 和 y是否在記憶體地址引用同一物件(id): False

1.6.8 運算優先順序

我們先來看一個運算子例子,請問下該從哪一步算起、第二步…到最後返回的結果是啥?

圖片描述

-1 + 10 > 5 and 2 < 1
# 輸出結果如下:
False

運算優先順序,從上往下,優先順序高到低:

圖片描述

1.7 內建函式

常見的內建函式:

內建函式名稱 函式簽名 說明
print print(value, sep=’ ‘, end=’n’) 將資料輸出到控制檯,預設使用空格作為分隔符(sep)、換行(n)
input input(value) 在控制檯和使用者互動,接收使用者輸入,並返回字串
int int(value) 將資料轉換成整數(int本質是類class)
str str(value) 將資料轉換成字串(str本質是類class)
type type(value) 判斷物件是什麼型別(本質是元類)
isinstance isinstance(obj,tuple) 判斷物件的型別
  • print 示例:

    >>> print('www','python','org',sep='.',end='')	#字串之間用sep='.'分割,end=''不換行
    # 輸出結果如下:
    www.python.org
    
  • input 示例:

    圖片描述

  • int 示例:

    >>> x = '123'	# '123'為字串
    >>> y = int(x)	# int將字串'123'轉換為整數 123
    >>> print('字串轉換為整數:',type(y), y)
    # 輸出結果如下:
    字串轉換為整數: <class 'int'> 123
    
  • str 示例:

    >>> x = 123
    >>> y = str(x)
    >>> print('整數轉換為字串:',type(y), y)
    # 輸出結果如下:
    整數轉換為字串: <class 'str'> 123
    
  • type 示例:

    >>> x = '123'
    >>> y = 123
    >>> print('x是什麼型別',type(x))
    >>> print('y是什麼型別',type(y))
    # 輸出結果如下:
    x是什麼型別 <class 'str'>
    y是什麼型別 <class 'int'>
    
  • isinstance 示例:

    >>> x = '123'
    >>> y = 123
    >>> print('x是整數嗎?',isinstance(x, int))
    >>> print('y是整數嗎?',isinstance(y,(int,str))	#(int,str)位元組,或關係
    # 輸出結果如下:
    x是整數嗎? False
    y是整數嗎? True
    

1.8 迴圈語句

一個程式能否正常執行,必須的有順序、分支、迴圈執行,如果條件控制不對就會導致死迴圈。

正常的順序:從上到下一條條執行;

分支:分單分支和多分支,如條件滿足則執行條件下的語句;

  • 單分支

    if 條件:
        程式碼塊
    
    # 示例:
    x = 1
    if x > 0:	#如條件為真,執行下面程式碼塊
        print('hello world!')
    
  • 多分支

    if 條件1:
        程式碼塊
    elif 條件2:
        程式碼塊
    elif 條件3:
        程式碼塊
    ...
    else:
        程式碼塊
        
    # 示例:
    x = 1
    if x < 0:
        print("x是負數")
    elif x==0:
        print('x是零')
    else:
        print('x是正數')
    

迴圈:條件滿足就反覆執行,不滿足就不執行;

常見的迴圈語句:for語句、while語句、continue語句、break語句;

  • for 語句
    標準格式:

    for [元素] in [可迭代物件]:
        程式碼塊
    

    for 語句結合range()函式 示例:

    說明:range() 是惰性物件,需要去撥動它,撥一下便返回一個值

    #range(stop),range(5)表示[0,5)前包後不包,返回(0,1,2,3,4)序列,
    for i in range(5):
        print(i)
    # 輸出結果如下:
    0
    1
    2
    3
    4
    #################################################
    #range(start,stop,step),step表示步長
    for i in range(0,10,2):
        print(i)
    # 輸出結果如下:
    0
    2
    4
    6
    8
    
  • while 迴圈

    說明:多用於死迴圈或不明確知道迴圈次數的場景。
    標準語句:

    while 條件:
        程式碼塊
    

    死迴圈 示例:

    #死迴圈
    while 1:
        print('這是死迴圈')
    

    正常迴圈 示例:

    x = 3
    while x:
        print(x)
        x -= 1
    # 輸出結果如下:
    3
    2
    1
    

    另外,思考下,上面結果為啥只有3 2 1。

  • continue

    說明:continue是跳過當前迴圈的當次迴圈,繼續下一次迴圈

    圖片描述

    for x in range(10):
        if x % 2 == 0:
            continue
            print('這是不會執行的')	#永遠都不會執行
        print(x)
        x -= 1
    # 輸出結果如下:
    1
    3
    5
    7
    9
    
  • break
    說明:結束當前迴圈

    x = 0
    while True:
        x += 1
        if x > 3:
            break
        print(x)
    # 輸出結果如下:
    1
    2
    3
    

    如果遇到迴圈有多層巢狀,要注意break隻影響當前迴圈

    圖片描述


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4822/viewspace-2824815/,如需轉載,請註明出處,否則將追究法律責任。

相關文章