1. 程式人生 > 其它 >芯科BG22學習筆記:4-如何列印log

芯科BG22學習筆記:4-如何列印log

一 基本運算子

1.1 算術運算子

python支援的算數運算子與數學上計算的符號使用是一致的,我們以x=9,y=2為例來依次介紹它們

1.2 比較運算子

比較運算用來對兩個值進行比較,返回的是布林值True或False,我們以x=9,y=2為例來依次介紹它們

1.3 賦值運算子

python語法中除了有=號這種簡單的賦值運算外,還支援增量賦值、鏈式賦值、交叉賦值、解壓賦值,這些賦值運算子存在的意義都是為了讓我們的程式碼看起來更加精簡。我們以x=9,y=2為例先來介紹一下增量賦值

1.3.1 增量賦值

1.3.2 鏈式賦值

如果我們想把同一個值同時賦值給多個變數名,可以這麼做

>>> z=10
>>> y=z
>>> x=y
>>> x,y,z
(10, 10, 10)

鏈式賦值指的是可以用一行程式碼搞定這件事

>>> x=y=z=10
>>> x,y,z
(10, 10, 10)

1.3.3 交叉賦值

我們定義兩個變數m與n

>>> m=10
>>> n=20

如果我們想將m與n的值交換過來,可以這麼做

>>> temp=m
>>> m=n
>>> n=temp
>>> m,n
(20, 10)

交叉賦值指的是一行程式碼可以搞定這件事

>>> m=10
>>> n=20
>>> m,n=n,m # 交叉賦值
>>> m,n
(20, 10)

1.3.4 解壓賦值

如果我們想把列表中的多個值取出來依次賦值給多個變數名,可以這麼做

>>> nums=[11,22,33,44,55]
>>> 
>>> a=nums[0]
>>> b=nums[1]
>>> c=nums[2]
>>> d=nums[3]
>>> e=nums[4]
>>> a,b,c,d,e
(11, 22, 33, 44, 55)

解壓賦值指的是一行程式碼可以搞定這件事

>>> a,b,c,d,e=nums # nums包含多個值,就好比一個壓縮包,解壓賦值因此得名
>>> a,b,c,d,e
(11, 22, 33, 44, 55)

注意,上述解壓賦值,等號左邊的變數名個數必須與右面包含值的個數相同,否則會報錯

#1、變數名少了
>>> a,b=nums
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)

#2、變數名多了
>>> a,b,c,d,e,f=nums
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 6, got 5)

但如果我們只想取頭尾的幾個值,可以用*_匹配

>>> a,b,*_=nums
>>> a,b
(11, 22)

ps:字串、字典、元組、集合型別都支援解壓賦值

1.4 邏輯運算子

邏輯運算子用於連線多個條件,進行關聯判斷,會返回布林值True或False

1.4.1 連續多個and

可以用and連線多個條件,會按照從左到右的順序依次判斷,一旦某一個條件為False,則無需再往右判斷,可以立即判定最終結果就為False,只有在所有條件的結果都為True的情況下,最終結果才為True。

>>> 2 > 1 and 1 != 1 and True and 3 > 2 # 判斷完第二個條件,就立即結束,得的最終結果為False
False

1.4.2 連續多個or

可以用or連線多個條件,會按照從左到右的順序依次判斷,一旦某一個條件為True,則無需再往右判斷,可以立即判定最終結果就為True,只有在所有條件的結果都為False的情況下,最終結果才為False

>>> 2 > 1 or 1 != 1 or True or 3 > 2 # 判斷完第一個條件,就立即結束,得的最終結果為True
True

1.4.3 優先順序not>and>or

#1、三者的優先順序關係:not>and>or,同一優先順序預設從左往右計算。
>>> 3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3
False

#2、最好使用括號來區別優先順序,其實意義與上面的一樣
'''
原理為:
(1) not的優先順序最高,就是把緊跟其後的那個條件結果取反,所以not與緊跟其後的條件不可分割

(2) 如果語句中全部是用and連線,或者全部用or連線,那麼按照從左到右的順序依次計算即可

(3) 如果語句中既有and也有or,那麼先用括號把and的左右兩個條件給括起來,然後再進行運算
'''
>>> (3>4 and 4>3) or (1==3 and 'x' == 'x') or 3 >3
False 

#3、短路運算:邏輯運算的結果一旦可以確定,那麼就以當前處計算到的值作為最終結果返回
>>> 10 and 0 or '' and 0 or 'abc' or 'egon' == 'dsb' and 333 or 10 > 4
我們用括號來明確一下優先順序
>>> (10 and 0) or ('' and 0) or 'abc' or ('egon' == 'dsb' and 333) or 10 > 4
短路:       0      ''            'abc'                    
            假     假              真

返回:                            'abc'

#4、短路運算面試題:
>>> 1 or 3
1
>>> 1 and 3
3
>>> 0 and 2 and 1
0
>>> 0 and 2 or 1
1
>>> 0 and 2 or 1 or 4
1
>>> 0 or False and 1
False 

1.5 成員運算子

注意:雖然下述兩種判斷可以達到相同的效果,但我們推薦使用第二種格式,因為not in語義更加明確

>>> not 'lili' in ['jack','tom','robin']
True
>>> 'lili' not in ['jack','tom','robin']
True

1.6 身份運算子

需要強調的是:==雙等號比較的是value是否相等,而is比較的是id是否相等

#1. id相同,記憶體地址必定相同,意味著type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x='Info Tony:18'
>>> y='Info Tony:18'
>>> id(x),id(y) # x與y的id不同,但是二者的值相同
(4327422640, 4327422256)


>>> x == y # 等號比較的是value
True
>>> type(x),type(y) # 值相同type肯定相同
(<class 'str'>, <class 'str'>)
>>> x is y # is比較的是id,x與y的值相等但id可以不同
False