1. 程式人生 > >python_運算符與表達式

python_運算符與表達式

variable 成員 cab 矩陣 條件 span 字符 邏輯或 table

運算符與表達式

  • python運算符

    運算符功能說明
    + 算術加法,列表、元組、字符串合並與連接,正號
    - 算術減法,集合差集,相反數
    * 算術乘法,序列重復
    / 真除法
    // 求整商,但如果操作數中有實數的話,結果為實數形式的整數
    % 求余數,字符串格式化
    ** 冪指數
    <,<=,>,>=,==,!= (值)大小比較,集合的包含關系比較
    or 邏輯或
    and 邏輯與
    not 邏輯非
    in 成員測試
    is
    對象同一性測試,即測試是否為同一對象或內存地址是否相同
    |,^,&,<<,>>,~ 位或,位異或,位與,左移位,有移位,位求反
    &,|,^ 集合交集、並集、對稱差集
    @ 矩陣相乘運算符

算術運算符

  • +運算符除了用於算術加法以外,還可以用於列表、元組、字符串的連接,但不支持不同類型的對象之間相加或連接

    >>> [1,2,3] + [4,5,6]
    [1, 2, 3, 4, 5, 6]
    >>> (1,2,3) + (4,)
    (1, 2, 3, 4)
    >>> ‘abc‘ + ‘1234‘
    ‘abc1234‘
    >>> ‘A‘ + 1 # 不支持字符與數字相加,拋出異常
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: must be str, not int
    >>> True + 3
    4
    >>> False + 3
    3
  • *運算符除了表示算術乘法,還可用與列表、元組、字符串這幾個序列類型與整數的乘法,表示序列元素的重復,生成新的序列對象。字典和集合不支持與整數的相乘,因為其中的元素是不允許重復的。

    >>> True*3
    3
    >>> False * 4
    0
    >>> [1,2,3] * 3
    [1, 2, 3, 1, 2, 3, 1, 2, 3]
    >>> (1,2,3) * 2
    (1, 2, 3, 1, 2, 3)
    >>> ‘abc‘*3
    ‘abcabcabc‘
  • 運算符/和//在python中分別表示算術除法和算術求整商

    >>> 3/2
    1.5
    >>> 15 // 4
    3
    >>> 15.0 // 4
    3.0
    >>> -15 // 4 # 向下取整
    -4
  • %運算符可以用與整數或實數的求余數運算,還可以用於字符串格式化,但是並不推薦這種用法

    >>> 789 % 23
    7
    >>> 123.45 % 3.2
    1.849999999999996
    >>> ‘%c,%d‘%(65,65)
    ‘A,65‘
    >>> ‘%f,%s‘%(65,65)
    ‘65.000000,65‘
  • **運算符表示冪乘,等價與內置函數pow()

    >>> 3 ** 2
    9
    >>> pow(3,2,8) # 等價於(3**2)%8
    1
    >>> 9 ** 0.5
    3.0
    >>> (-9)**0.5 # 可以計算負數的平方根
    (1.8369701987210297e-16+3j)

關系運算符

  • python關系運算符最大的特點是可以連用,其含義於我們日常的理解完全一致。使用關系運算符的一個最中要的前提是,操作數之間必須可以比較大小

    >>> 1<3<5 # 等價於1<3 and 3<5
    True
    >>> 1<5>2
    True
    >>> 1>6<8
    False
    >>> 1>6<math.sqrt(9) # 具有惰性求值或者邏輯短路的特點
    False
    >>> 1<6<math.sqrt(9)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name ‘math‘ is not defined
    >>> import math
    >>> 1<6<math.sqrt(9)
    False
    >>> ‘Hello‘>‘world‘ # 比較字符串的大小
    False
    >>> {1,2,3}<{1,2,3,4} # 測試是否是子集
    True
    >>> [1,2,3]<[1,2,4] # 比較列表的大小
    True
    >>> [1,2,3]<[1,2,3]
    False
    >>> [1,2,3]<[1,1,4]
    False
    >>> ‘Hello‘>3 # 字符串和數字不能比較
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: ‘>‘ not supported between instances of ‘str‘ and ‘int‘
    >>> {1,2,3}=={3,2,1} # 測試兩個集合是否相等
    True
    >>> {1,2,4}>{1,2,3}
    False
    >>> {1,2,4}>{1,2} # 測試是否子集True>>> {1,2,4}>{1,2,4}False

成員測試運算符in與同一性測試運算符is

  • 成員測試運算符in

    >>> 3 in [1,2,3]
    True
    >>> 5 in range(1,10,1) # range()是用來生成指定範圍數字的內置函數
    True
    >>> ‘abc‘ in ‘abcfhdgd‘
    True
    >>> for i in (3, 5, 7):
    ... print(i,end=‘\t‘)
    ...
    3 5 7 >>>
    ?
  • 同一性測試運算符is

    測試兩個對象是否是同一個,如果兩個對象是同一個,兩者具有相同的地址

    >>> 3 is 3
    True
    >>> x = [300, 300, 300] # 基於值的內存管理,同一個值在內存中只有一份
    >>> x[0] is x[1]
    True
    >>> x = [1, 2, 3]
    >>> y = [1, 2, 3]
    >>> x is y
    False
    >>> x[0] is y[0]
    True
    >>> x.append(4)
    >>> x
    [1, 2, 3, 4]
    >>> x = y
    >>> x
    [1, 2, 3]
    >>> x is y
    True
    >>> x.append(4)
    >>> x
    [1, 2, 3, 4]
    >>> y
    [1, 2, 3, 4]
    >>>

位運算與集合運算

  • 位運算符只能用於整數

  • 位運算規則

    # 位與運算&
    1 & 1 = 1
    1 & 0 = 0 & 1 = 0 & 0 = 0
    # 位或運算
    1 | 1 = 1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0
    # 位異或運算
    1 ^ 1 = 0 ^ 0 = 0
    0 ^ 1 = 1 ^ 0 = 1
    # 左位移時右側補0,每左位移一位相當於乘以2;右位移時左側補0,每右位移一位相當於除以2
  • 示例

    >>> 3 << 2
    12
    >>> 23 >> 2
    5
    >>> 3 & 7
    3
    >>> 3 | 8
    11
    >>> 3 ^ 5
    6
  • 集合的並集、交集、對稱差集、差集

    >>> {1, 2, 3} | {3, 4, 5} # 並集
    {1, 2, 3, 4, 5}
    >>> {1, 2, 3} & {3, 4, 5} # 交集
    {3}
    >>> {1, 2, 3} ^ {3, 4, 5} # 對稱差集
    {1, 2, 4, 5}
    >>> {1, 2, 3} - {3, 4, 5} # 差集
    {1, 2}

邏輯運算符

  • 邏輯運算符and、or、not常用來連接條件表達式構成更加復雜的條件表達式,並且and和or具有惰性求值或邏輯短路的特點;註意:運算符and和or並不一定會返回True或False,而是得到最後一個被計算的表達式的值,但是運算符not一定會返回True或False。

    >>> 3 > 5 and a > 5
    False
    >>> 3 > 5 or a > 5
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name ‘a‘ is not defined
    >>> 3 < 5 or a > 5
    True
    >>> 3 and 6
    6
    >>> 3 and 5 > 2
    True
    >>> 3 not in [1, 2, 3]
    False
    >>> 3 is not 5
    True
    >>> not 3
    False
    >>> not 0
    True
    >>>

矩陣運算符@

>>> import numpy        # numpy是用於科學計算的Python擴展庫
>>> x = numpy.ones(3) # ones()函數用於生成全1矩陣,參數表示矩陣大小
>>> m = numpy.eye(3) * 3 # eye()函數用於生成單位矩陣
>>> m[0,2] = 5
>>> m[2,0] = 3
>>> x
array([1., 1., 1.])
>>> m
array([[3., 0., 5.],
[0., 3., 0.],
[3., 0., 3.]])
>>> x@m
array([6., 3., 8.])

python_運算符與表達式