Python 操作符全解

2021-02-15 苟日月新
操作符概述

操作符可分為「運算符」(operators)和「分隔符」(delimiters)。

運算符有:

+,-,*,**,/,//,%,詳細用法見 數字運算。

<<,>>,&,|,^,~,詳細用法見 整數及其位運算。

<,>,<=,>=,==,!=,in,not in,is,is not,詳細用法見 比較運算符。

and,or,not,詳細用法見 布爾值及布爾運算。

Python 3.8 新增,將右邊的表達式賦值給左邊的變量, 同時返回表達式的值。

(a := 1+1)

2

運算符還分為一元運算符和二元運算符,一元運算符運算一個對象(操作數),二元運算符運算兩個。一元運算符有 +(正數),-(負數),~(整數按位取反)和 not(布爾運算 非)。if ... else ... 有時稱作三元運算符。

-1, +2, ~3, not 4

(-1, 2, -4, False)

1 + 2 - 3 * 4 # 二元運算符加、減和乘

-9

True if 2 > 3 else False

False

分隔符有:

(,),[,],{,},,,:,.,;,=,+=,-=,*=,/=,//=,%=,&=,|=,^=,>>=,<<=,**=

部分分隔符用法舉例:

圓括號綁定表達式,或元組顯示,方括號用來對序列進行索引、切片取值或列表顯示,花括號字典顯示或集合顯示

3 * (1 + 2) * (1,)

(1, 1, 1, 1, 1, 1, 1, 1, 1)

[1,2,3,4][1:3]

[2, 3]

{'列表':[], '集合':{1,2,3}}

{'列表': [], '集合': {1, 2, 3}}

上述分隔符 = 為賦值操作符,之後的操作符為增強賦值操作符,將名稱綁定(或重新綁定)到特定值,以及修改屬性或可變對象的成員項。詳見 賦值語句。

假設將值 value1 綁定到名稱 name,name = value1,則 name += value2 的結果相當於 name = name + value2,其他操作符類似。

舉例如下:

a = 1
a += 1
a

2

b = 17
b |= 5
b

21

除了運算符和分隔符,還有 ',",\,# 字符,作為其他字符的組成部分時具有特殊含義,或是對詞法分析器有重要意義。

',",\,詳見 字符串概述 和 轉義字符。

# 通常用來注釋代碼,但不能包含在字符串中,注釋在語法分析中會被忽略:

# 這是注釋
'''
# hello world
# hello python
'''

'\n# hello world\n# hello python\n'

操作符除了常規的用法,操作不同的數據類型,相應的數據類型可能定義了特定的操作規則;在特定的應用場景,也有著特殊的用法。詳見 操作符特殊用法

比較運算符

比較運算符有 <,>,<=,>=,==,!=,in,not in,is,is not。

運算符 <,>,>=,<=,== 和 != 比較兩個對象的值,<,>,>= 和 <= 稱為次序比較;== 和 != 稱為一致性比較。

由於所有類型都是 object 的(直接或間接)子類型,它們都從 object 繼承了默認的比較行為,一致性比較是默認的比較行為,因此可在任何對象之間進行。

False == 0 != 'a' != int != {}

True

對象的值在 Python 中是一個相當抽象的概念:

對象的值並不要求具有特定的構建方式,例如由其全部數據屬性組成等;比較運算符實現了一個特定的對象的值概念,可以認為正是通過實現對象比較,間接地定義了對象的值。

主要內置類型的比較行為:

1,數字類型內部可跨類型比較,按數學(算法)規則正確進行比較且不會有精度損失。但複數不支持次序比較。

True == 1 == 1.0

True

3.14 < 3

False

0 >= 0j



TypeError Traceback (most recent call last)

<ipython-input-6-df80cad0b1a4> in <module>
----> 1 0 >= 0j


TypeError: '>=' not supported between instances of 'int' and 'complex'

2,字符串使用其字符的 Unicode 碼位數字值依次進行比較,某個字符比較出大小即停止。如果一個字符串包含另一個,較短的排前面。

ord('a'), ord('b'), ord('c')

(97, 98, 99)

'a' == 'a', 'a' == 'c'

(True, False)

'ab' < 'ac'

True

'abc' > 'ab'

True

3,序列(列表,元組,range 實例)只能進行類型內部比較。跨類型一致性比較結果將是不相等,跨類型次序比較將引發 TypeError。range 不支持次序比較。

比較時按順序對相應元素進行逐個比較,某個元素比較出大小即停止。如果一個序列元素包含另一個,較短的排前面。

(1,2) == [1,2]

False

[1,2] == [1,2]

True

[1,4] > [1,3,7]

True

[1,4] < [1,4,7]

True

(1,2) >= [1,2]



TypeError Traceback (most recent call last)

<ipython-input-22-cb12354bca8e> in <module>
----> 1 (1,2) >= [1,2]


TypeError: '>=' not supported between instances of 'tuple' and 'list'

4, 兩個字典若要相等,必須若且唯若它們具有相同的 鍵值對。次序比較將引發 TypeError。

{1:1} == {True:1.0}

True

{1:1} <= {True:1.0}



TypeError Traceback (most recent call last)

<ipython-input-24-a13e7674e543> in <module>
----> 1 {1:1} <= {True:1.0}


TypeError: '<=' not supported between instances of 'dict' and 'dict'

5,集合 (set 或 frozenset 的實例) 可進行類型內部和跨類型的比較。

它們將比較運算符定義為子集和超集檢測,具體詳見集合知識點。這類關係沒有定義完全排序。相應地,集合不適宜作為依賴於完全排序的函數的參數。

{1,2} == frozenset([1,2,1])

True

{3,1} > {1,2}

False

sorted([{3},{1},{2}])

[{3}, {1}, {2}]

運算符 in 和 not in 用於成員檢測。如果 x 是 s 的成員則 x in s 求值為 True,否則為 False。x not in s 返回 x in s 取反後的值。

所有內置序列和集合類型以及字典都支持此運算,對於字典來說 in 檢測其是否有給定的鍵。

'a' in 'abc'

True

'abc' in 'abbc'

False

1 in [1,2]

True

[1] in [1,2]

False

'a' in {'a':1}

True

運算符 is 和 is not 用於檢測對象的標識號:若且唯若 x 和 y 是同一對象時 x is y 為真。一個對象的標識號可使用 id() 函數來確定。x is not y 會產生相反的邏輯值。

默認的一致性比較是基於對象的標識號。x is y 就意味著 x == y。

a = 1
b = 1
a is b, a == b

(True, True)

a = (1,3)
b = (1,3)
a is b, a == b

(False, True)

操作符優先級

Python 表達式語句中操作符的優先順序從最低優先級(最後綁定)到最高優先級(最先綁定)如下:

in, not in, is, is not, <, <=, >, >=, !=, == 比較運算*, /, //, % 乘,矩陣乘,除,整除,取餘x[index], x[index:index], x(arguments...), x.attribute  抽取,切片,調用,屬性引用(expressions...), [expressions...], {key: value...}, {expressions...} 綁定或加圓括號的表達式,列表顯示,字典顯示,集合顯示

一個表達式語句中可以有多個上述操作符,最終返回一個值(包括返回值為 None 的函數調用)。

而賦值語句中的賦值操作符 =,+=,-=,*=,/=,//=,%=,&=,|=,^=,>>=,<<=,**=,在操作符中優先級最低,它右邊表達式的值計算完之後,才最後綁定到左邊的名稱。

舉例如下:

value = int('2')**(-1) == 2/(3+1)
value

True

int('2')**(-1) == 2/(3+1)

True

[].append(1) is None and not 1 - 1

True

value = 1 if 'a' in 'a b c'.split()[1:3] else 2
value

2

value **= 3 + 2 * 1
value

32

操作符 = 可以用來連續賦值:

a = b = c = 1
a,b,c

(1, 1, 1)

操作符特殊用法

容器類的內置類型,通常對操作符定義了自己特有的的操作行為。

* 操作符,除了數字運算的 乘,還可以用來將可迭代對象拆包。拆包之後置於元組,列表,集合中,或作為參數傳遞給函數:
{*{'a':1, 'b':2}}

{'a', 'b'}

print(*'abc', sep='-')

a-b-c

+,+=,*,*= 可用來對序列類型進行拼接,重複拼接或拼接並賦值(range 類型除外)。由於列表是可變對象,+= 和 *= 在操作列表時,是用來更新列表。具體詳見 列表操作符。
'd-' + 'abc'*2

'd-abcabc'

a = [1]*2
a += [2]
a

[1, 1, 2]

操作符 **,| 和 |= 可以用來操作字典。具體詳見 字典操作符。

操作符 >,<,>=,<= 可對集合進行子集或超集比較;|,&,-,^ 可求集合的併集,交集,差集,對稱差集;|=,&=,-=,^= 可用來更新集合。具體詳見集合知識點。

操作符 % 可以用來格式化字符串,而在「格式化迷你語言」中,定義了非常多的有特殊意義操作符。具體詳見 str.format 格式化 和 字符串操作符。

相關焦點

  • 慢步學習二級python,字符串類型的操作:操作符,函數和方法
    繼續學習二級python考試的大綱內容:4.字符串類型的操作:字符串操作符,處理函數和處理方法字符串和數值是python語言的基礎數據類型。學習字符串類型數據的操作是學習python的基礎。字符串操作符字符串常見操作符有2個+ *在應用中的意義是 連接 和 重複如上圖,第一個指令,「愛」+「你」,得到字符串「愛你」。
  • python自動化辦公手冊之python操作PPT
    基於此,我花了整整一周時間真理出來的python自動化文檔手冊,涉及到五個章節(如下圖所示),① python使用openpyxl操作excel;② python使用PyPDF2和pdfplumber操作pdf;③ python使用python-docx操作word;④ python使用python-pptx操作PPT;⑤ python如何自動收發郵件;⑥ python製作電話號碼歸屬地查詢工具。
  • python-docx節的添加、定位和分節符的設置
    在WORD文檔中添加節要使用「頁面布局」菜單裡「分隔符」按鈕分節符功能,見下圖;而在python-docx包中則要使用add_section()函數添加節,使用start_type來設定或者更改分節符。筆者將從節的添加、節的定位和分節符設置三個部分進行講述python-docx包對節的操作。
  • 在python中的算術操作符
    Python 的算術操作符大多數和大家知道的數學運算符一樣:+ 、一、 * 、% 、**、//前面四個就不用介紹了,加、減、乘、除,大家都懂。不過下面要介紹的小技巧倒不是所有人都知道的。例如,當想對一個變量本身進行算術運算的時候,是不是會覺得寫a=a+1或b=b-3這類操作符特別麻煩?
  • Python變量,輸入和輸出,數字,字符串操作
    python中推薦使用下劃線「_」來連接,但在命名時一定要注意關鍵字。字符串格式化操作:在字符串當中以指定的格式符號進行佔位,然後我們將指定的數據傳入字符串%s 字符串佔位符%d數字佔位符%f 浮點型數字佔位符%.2f 控制浮點型數字佔位符列印字符串print("i come from %s" %('China
  • python運算符優先級,加減乘除只是基礎,學習python第2天
    在計算機編程中少不了運算,而python運算符有哪些呢?python運算符優先級順序又是怎麼樣的?就像數學一樣,加減乘除只是基礎,了解python運算符才能解決實際性的問題。python運算符及其優先級python運算符及其優先級python程序中支持多種運算符,常見的有加減乘除、賦值運算符、算術運算符、邏輯運算符
  • Python 列表(List)操作方法詳解
    序列都可以進行的操作包括索引,切片,加,乘,檢查成員。此外,Python已經內置確定序列的長度以及確定最大和最小的元素的方法。一、創建一個列表只要把逗號分隔的不同的數據項使用方括號括起來即可。/usr/bin/pythonlist1 = ['physics', 'chemistry', 1997, 2000];list2 = [1, 2, 3, 4, 5, 6, 7 ];print "list1[0]: ", list1[0]print "list2[1:5]: ", list2[1:5]以上實例輸出結果:list1
  • python命令是如何操作文件file的?
    用到文件,就必然會有創建文件、打開文件、寫文件、複製文件、刪除文件這些操作,下面我們來看看在python中是如何利用命令來操作file文件的。python操作file的命令及使用1.打開和關閉文件file object= open(file_name [, access_mode][, buffering]),通過open命令來打開一個文件。
  • Python 簡單操作 CSV
    前言這次梳理的篇幅主要是涉及CSV以及如何通過python對CSV進行操作等,對鞏固自己的python知識也是很有幫助的,進一步的對CSV的使用而言也是幫助很大的
  • 什麼是運算符和表達式,在python中是如何處理數學運算的?
    又到了和大家分享的時刻了,初識python,相信很多編程愛好者們對程序的解義在心裡應該有一個概念了吧,對於pycharm的用法與進位的認知,在大家的心裡是否還有印象?前面我們提到了python的核心數據(整數型、浮點型、複數等),那麼大家是否知道,這些數據是用來幹什麼的呢?
  • 用 Python 操作 JSON 類型數據詳解
    Python操作JSONPythone3標準庫有JSON模塊,主要執行序列化和反序列化功能。separators:當使用ident參數時json模塊序列化Python對象後得到的JSON字符串中的」,」號和」:」號分隔符後默認會附加一個空白字符,可以通過separators參數重新指定分隔符,去除無用的空白字符。指定的分隔符一般是一個元祖類型的數據,比如(',',':')。
  • Python 入門系列 —— 22. dict 的基本操作詳解
    > & "C:/Program Files (x86)/Python/python.exe" e:/dream/markdown/python/app/app.pyMustang當然除了中括號,還可以使用 get() 方法來訪問,如下代碼所示:
  • 使用 Python 操作 word文檔
    最近手頭有一個需求是對word文檔內容進行判斷,搜索到一個包感覺不錯,簡單記錄一下關鍵操作:python-docx能做什麼
  • 一文看懂Python列表、元組和字符串操作
    1.2.1 列表腳本操作符列表對 + 和 * 的操作符與字符串相似。+ 號用於組合列表,* 號用於重複列表。對於a[1][0]和b[1][0]還是對於對象1的引用,並沒有重新新建一個對象,這符合python的存儲機制。
  • Python中字符串的操作處理
    學習了字符串的基本用法和簡單格式化,我們再來看一下常用字符串類型的操作。對字符串,Python提供了3個基本的操作符,如下表:演示如下:>>> x = '一個'>>> y = '字符串'>>> x+y'一個字符串'>>> x*3'一個一個一個'>>> s = '某個字符串'>>>
  • 令人窒息的python騷操作
    本文用作記錄,在使用python過程中遇到的一些技巧,有些代碼是本人所寫,有些則是python內置函數,有些則取之網際網路。
  • 基於Python實現對各種數據文件的操作
    本文總結使用Python對常見的數據文件進行讀寫操作
  • Python文件目錄操作就是這麼6
    ._.指在python的交互式解釋器裡,』_』 代表上次你輸入得到的結果,hook是鉤子的意思,將上次的結果鉤過來sys.displayhook(value) #列印出給定的回溯和異常sys.stderr。
  • Python中的運算符,如何通過算術運算符計算數據,實例操作演示
    什麼是Python的運算符在計算機系統中,變量就是存放數據的一個容器,簡單來說變量是用來存儲數據的,存儲數據最基本的作用就是為了運算,運算就會使用到運算符,那麼python中的運算符有哪些?python運算符Python中支持以下類型的運算符:算術運算符
  • 一文看懂Python對文件和文件夾的操作: 含os, shutil和glob模塊.Python學習面試必讀.
    在利用Python或Django從事Web開發時除了必須要了解Python面向對象的編程思想,還必須熟練掌握對文件夾和文件的操作。小編我精心準備了個小結,教你如何利用python進行基本的文件和文件夾操作,並重點介紹了如何使用os, shutil和glob模塊進行常見的文件和文件夾操作,如遍歷,刪除文件和查找文件。