1. 程式人生 > >python學習筆記表達式和運算符(一)

python學習筆記表達式和運算符(一)

python

表達式和運算符

什麽是表達式?

1+2*3 就是一個表達式,這裏的加號和乘號叫做運算符,1、2、3叫做操作數。1+2*3 經過計算後得到的結果是7,就1+2*3 = 7。我們可以將計算結果保存在一個變量裏,ret = 1-2*3 。 所以表達式就是由操作數和運算符組成的一句代碼或語句,表達式可以求值,可以放在“=”的右邊,用來給變量賦值。


算術運算符 : + - * / //(取整除) %(取余) **

>>> 2+3
>>> 3-2
>>> 2*3
>>> 5/2
2.5
>>> 5//2
>>> 5%2
>>> 2**3
賦值運算符: = 、+= -= *= /= %= //= **=
>>> num = 2    
>>> num += 1   # 等價於 num = num + 1
>>> num -= 1   # 等價於 num = num - 1
>>> num *= 1   # 等價於 num = num * 1
>>> num /= 1   # 等價於 num = num / 1
>>> num //= 1   # 等價於 num = num // 1
>>> num %= 1   # 等價於 num = num % 1
>>> num **= 2   # 等價於 num = num ** 2


比較運算符:>、 <、 >=、 <=、 ==、!=   True False簡單講一下
顧名思義,比較運算符是用來做比較的,比較的結果會有兩種,分別是成立和不成立,成立的時候,結果是 True,不成立的時候結果是False。 True和False 用來表示比較後的結果。
>>> a = 5
>>> b = 3
>>> a > b  # 檢查左操作數的值是否大於右操作數的值,如果是,則條件成立。 True
>>> a < b  # 檢查左操作數的值是否小於右操作數的值,如果是,則條件成立。False
>>> a <= b  # 檢查左操作數的值是否小於或等於右操作數的值,如果是,則條件成立。False
>>> a >= b  # 檢查左操作數的值是否大於或等於右操作數的值,如果是,則條件成立。True
>>> a == b  # 檢查,兩個操作數的值是否相等,如果是則條件變為真。False
>>> a != b  # 檢查兩個操作數的值是否相等,如果值不相等,則條件變為真。True

邏輯運算符: not 、and、 or
邏輯運算符是用來做邏輯計算的。像我們上面用到的比較運算符,每一次比較其實就是一次條件判斷,都會相應的得到一個為True或False的值。而邏輯運算符的的操作數就是一個用來做條件判斷的表達式或者變量。
>>> a > b and  a < b  # 如果兩個操作數都是True,那麽結果為True,否則結果為False。False
>>> a > b or  a < b  # 如果有兩個操作數至少有一個為True, 那麽條件變為True,否則為False。True
>>> not a > b  # 反轉操作的狀態,操作數為True,則結果為False,反之則為TrueFalse
結果為True的時候,我們一般稱 結果為 真, 邏輯運算符會有一個真值表。

技術分享

成員運算符: not in 、in (判斷某個單詞裏是不是有某個字母)

成員運算符用來判斷一個元素是否是另一個元素的成員。 比如說我們可以判斷 “hello” 中是否有 “h”, 得到的結果也是True 或者 False。

>>> "h" in "hello"  # 這裏的意思是 “h” 在“Hello” 中,判斷後結果為TrueTrue 
>>> "h" not in "hello"  # 這裏的意思是 “h” 不在“Hello” 中,判斷後結果為FalseFalse


身份運算符: is、is not(講數據類型時講解,一般用來判斷變量的數據類型)

用來判斷身份。


>>> a = 123456
>>> b = a
>>> b is a   #判斷  a 和 b 是不是同一個 123456True
>>> c = 123456
>>> c is a  #判斷  c 和 a 是不是同一個 123456False
>>> c is not a   #判斷  c 和 a 是不是不是同一個 123456True


這裏我們首先將123456賦值給a,後有將a賦值給b, 這樣其實是 a和b 的值都是123456, 但是後面c的值也是123456,為什麽 第一次a is b 的結果為True ,c和 a 的結果為False 呢?

原因是這樣的: 我們知道程序是運行在內存裏的,第一次 我們將123456賦值給a的時候,其實是在內存裏開辟了一塊空間,將123456放在這塊空間裏,為了找到這裏的123456, 會有一個指向這塊空間的地址,這個地址叫做內存地址,是123456存儲在內存中的地址。a其實指向的就是存儲123456的內存空間的地址。執行了b=a,就是讓b指向的地址和a一樣。之後我們執行了 c = 123456 ,這裏就會再開辟一塊內存空間,並將指向該空間的內存地址賦值給c ,這樣的話 ,a和b 指向的是同一個123456, c 指向的是另外一個123456 。

技術分享

位運算符:

先了解一個概念:

我們平時用到的數字在計算機中是以二進制表示的, 這個二進制數叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數為0, 負數為1.

比如:十進制中的數 +7 ,計算機字長為8位,轉換成二進制就是00000111。如果是 -7 ,就是 10000111 。那麽,這裏的 00000111 和 10000111 就是機器數。

  原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值. 比如如果是8位二進制:

  [+1] = 0000 0001

  [-1] = 1000 0001

  第一位是符號位. 因為第一位是符號位, 所以8位二進制數的取值範圍就是:
  11111111 到 01111111 即 -127 到 127

  反碼的表示方法是:
  正數的反碼是其本身
  負數的反碼是在其原碼的基礎上, 符號位不變,其余各個位取反.

  [+1] = [00000001] = [00000001]

  [-1] = [10000001] = [11111110]

  補碼的表示方法是:
  正數的補碼就是其本身
  負數的補碼是在其原碼的基礎上, 符號位不變, 其余各位取反, 最後+1. (即在反碼的基礎上+1)

  [+1] = [00000001] = [00000001] = [00000001]

  [-1] = [10000001] = [11111110] = [11111111]


我們設置a=234 (二進制為 11101010), b=44 (二進制為 101100)

& 按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

技術分享

| 按位或運算符:只要對應的二個二進位有一個為1時,結果位就為1。

技術分享

^ 按位異或運算符:當兩對應的二進位相異時,結果為1

技術分享

~ 按位取反運算符:對數據的每個二進制位取反,即把1變為0,把0變為1

   a = 10000000 = 128

    ~a

   result: 01111111 = 127

<< 左移動運算符:運算數的各二進位全部左移若幹位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0。

    a = 10110011 = 179

    a << 2

result: 1011001100


>> 右移動運算符:把">>"左邊的運算數的各二進位全部右移若幹位,">>"右邊的數指定移動的位數

    a = 10110011 = 179

    a >> 2

result: 00101100 = 44


位運算符一般用於二進制操作,一般用於底層,我們很少用,知道就可以了。

優先級

技術分享

運算符那麽多,優先級記不住怎麽辦? 使用小括號。通過使用小括號,我們就可以很方便的進行優先級的區分。

本文出自 “on_the_road” 博客,請務必保留此出處http://cqtesting.blog.51cto.com/8685091/1957869

python學習筆記表達式和運算符(一)