欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python運(yùn)算符優(yōu)先級(jí)詳細(xì)整理

 更新時(shí)間:2023年01月07日 15:32:09   作者:十年的碼爺  
在一個(gè)表達(dá)式中可能包含多個(gè)有不同運(yùn)算符連接起來(lái)的、具有不同數(shù)據(jù)類型的數(shù)據(jù)對(duì)象,由于表達(dá)式有多種運(yùn)算,不同的運(yùn)算順序可能得出不同結(jié)果甚至出現(xiàn)錯(cuò)誤運(yùn)算錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于Python運(yùn)算符優(yōu)先級(jí)的相關(guān)資料,需要的朋友可以參考下

前言

雖然本文講的是Python,但其實(shí)它也適用于所有的編程語(yǔ)言。因?yàn)檫@里面蘊(yùn)含著編程之魂。所以本文標(biāo)題沒(méi)有顯著的使用Python關(guān)鍵詞。當(dāng)然以前的文章用了Python關(guān)鍵詞是因?yàn)楫?dāng)時(shí)我并沒(méi)有想到這一點(diǎn),很多內(nèi)容也適用所有編程語(yǔ)言。

本文是運(yùn)算符相關(guān)教程的最后一篇,將介紹運(yùn)算符的最后一個(gè)匯總性的概念——運(yùn)算符的優(yōu)先級(jí)。

優(yōu)先級(jí)概述

所謂優(yōu)先級(jí),是指優(yōu)先計(jì)算的順序。比如小學(xué)中我們學(xué)過(guò)的加減乘除基本四則運(yùn)算,乘除要先于加減計(jì)算,因?yàn)槌顺膬?yōu)先級(jí)比加減要高。小括號(hào)擁有最高優(yōu)先級(jí),如果想先計(jì)算加減,可用小括號(hào)將其包圍起來(lái),在Python中也是如此,很顯然,計(jì)算順序不同,其結(jié)果也是不同的:

相同優(yōu)先級(jí)

有些運(yùn)算是互逆的,交換它們的位置不影響運(yùn)算結(jié)果,所以區(qū)分它們的優(yōu)先級(jí)是沒(méi)有必要的,比如加和減(包括正號(hào)和負(fù)號(hào))、乘和除、左移和右移、is與is not、in與not in。這些運(yùn)算符都具有相同的優(yōu)先級(jí)。

當(dāng)然,有些運(yùn)算符交換位置會(huì)影響結(jié)果,但它們本身只是表示同一種算法的不同結(jié)果,難以區(qū)分不同的優(yōu)先級(jí)。比如比較運(yùn)算符中的等于、大于、小于、不等于、大于等于、小于等于都具有相同的優(yōu)先級(jí)。

需要特別注意的是,雖然Python支持諸如下例所示的連續(xù)的比較運(yùn)算符:

a > b == c

但它其實(shí)是 a > b and b == c 的簡(jiǎn)略寫(xiě)法,而不是表示先進(jìn)行計(jì)算 a > b ,然后用結(jié)果判斷是否等于c,也不是判斷a是否大于 b == c 的結(jié)果,下面的示例可以證明這點(diǎn),無(wú)論哪個(gè)運(yùn)算符先計(jì)算,其結(jié)果都與原始表達(dá)式結(jié)果不同,只有轉(zhuǎn)換成兩個(gè)表達(dá)式才一樣(注:False等價(jià)于0,True等價(jià)于1):

這一點(diǎn),對(duì)于<等其他比較運(yùn)算符,規(guī)則也是如此。

當(dāng)然,大多數(shù)運(yùn)算符的優(yōu)先級(jí)是不同的。

結(jié)合性

與運(yùn)算符優(yōu)先級(jí)相關(guān)的另一個(gè)重要概念是結(jié)合性,它決定了同一種運(yùn)算符是從左往右計(jì)算,還是從右往左。下面是一個(gè)優(yōu)秀的著名例子:

 它證明乘方運(yùn)算的結(jié)合性是從右往左。

大多數(shù)運(yùn)算符都是從左往右開(kāi)始計(jì)算的,簡(jiǎn)稱左結(jié)合性。只有少部分運(yùn)算符具有右結(jié)合性。下面是右結(jié)合性運(yùn)算符列表:

按位取反(位非)、正負(fù)號(hào)、位與、邏輯非、賦值系列運(yùn)算符

運(yùn)算符優(yōu)先級(jí)一覽表

其中上一行比下一行的優(yōu)先級(jí)高,同一行表示優(yōu)先級(jí)相同。在同一個(gè)表達(dá)式中,按照優(yōu)先級(jí)從高到低依次計(jì)算,優(yōu)先級(jí)相同則按照從左到右的順序計(jì)算。同一類型的運(yùn)算符則按結(jié)合性計(jì)算。

注:其中@為矩陣乘法運(yùn)算符,大多數(shù)資料中都沒(méi)有記錄此運(yùn)算符。官方文檔記錄:“The @ (at) operator is intended to be used for matrix multiplication. No builtin Python types implement this operator.”(@(at)運(yùn)算符打算用于矩陣乘法。沒(méi)有任何內(nèi)置的Python類型可以實(shí)現(xiàn)此操作符。)

賦值系列運(yùn)算符的優(yōu)先級(jí)最低,比or還要低:

另外賦值運(yùn)算符支持連續(xù)的賦值,這和比較運(yùn)算符類似,但其實(shí)也是相當(dāng)于兩個(gè)分開(kāi)的賦值,與優(yōu)先級(jí)無(wú)關(guān):

本表參考于Python3.7.3官方文檔:

Python3.10.4官方文檔也一樣,但是沒(méi)有前者友好,順序是相反的:

 運(yùn)算符優(yōu)先級(jí)重點(diǎn)說(shuō)明

運(yùn)算符優(yōu)先級(jí)的概念并不需要去刻意地記憶,如果對(duì)某個(gè)運(yùn)算符的優(yōu)先級(jí)不太確定,可以使用小括號(hào)將其包圍起來(lái)。

當(dāng)然,記住一些重要的優(yōu)先級(jí)概念,有助于對(duì)程序的閱讀理解與編寫(xiě)維護(hù)。下面是一些重要的優(yōu)先級(jí):

小括號(hào)具有最高優(yōu)先級(jí)。

運(yùn)算符優(yōu)先級(jí)按類別排序:算術(shù) > 位 > 身份 >成員 > 比較 > 邏輯 > 賦值。 算術(shù)最高,賦值被低。位非運(yùn)算符是個(gè)另外,它高于乘除。

身份、成員、比較、賦值運(yùn)算符,同類中優(yōu)先級(jí)相同。

算術(shù)運(yùn)算符中:乘方最高,乘除整除取余次之,加減最低。

位運(yùn)算符中:位非 > 左右移 > 位與 > 位異或 > 位或

邏輯運(yùn)算符中:非最高,與次之,或最低。

另外,我沒(méi)有聽(tīng)說(shuō)過(guò)任何編程語(yǔ)言有降低運(yùn)算優(yōu)先級(jí)——與小括號(hào)功能正好相反的運(yùn)算符。這應(yīng)該是沒(méi)有必要的,因?yàn)楦鶕?jù)相對(duì)性原理,給一個(gè)運(yùn)算符最高優(yōu)先級(jí),就相當(dāng)于給其他運(yùn)算符最低優(yōu)先級(jí)了,所以,如果想給一個(gè)運(yùn)算符最低的優(yōu)先級(jí),可以將其余的運(yùn)算符全部用小括號(hào)包圍起來(lái)。

最后,除了可以用于提高運(yùn)算符的優(yōu)先級(jí)之外,在Python中,小括號(hào)還有另外一個(gè)重要的功能——做為元組的定界符。

身為Python特有的四大基本數(shù)據(jù)類型之一,元組(tuple)已經(jīng)在本教程中出現(xiàn)過(guò)很多次了,在以后還會(huì)出現(xiàn)更多次,所以,下一篇將正式介紹元組。敬請(qǐng)關(guān)注。

結(jié)語(yǔ)

通過(guò)本文的編寫(xiě),我意識(shí)到自己對(duì)Python的認(rèn)知還有很大的局限——我剛剛才得知Python中有@矩陣乘法運(yùn)算符!

雖然我接觸編程已有14年了,初識(shí)Python也有五六年了,使用Python編寫(xiě)的大大小小的程序工程也有近百個(gè),但是如果不是今天對(duì)網(wǎng)上運(yùn)算符優(yōu)先級(jí)資料正確性的質(zhì)疑,沒(méi)有查看官方文檔的話,不知道還要多少年之后才會(huì)得知這一點(diǎn)。

我以前無(wú)論找到的與運(yùn)算符相關(guān)還是運(yùn)算符優(yōu)先級(jí)相關(guān)的Python資料都沒(méi)有提到@,這也說(shuō)明網(wǎng)上絕大部分的資料的正確性也需要證明。比如關(guān)于乘方運(yùn)算符的右結(jié)合性,網(wǎng)絡(luò)上大多資料都錯(cuò)誤的記錄為左結(jié)合性。

我寫(xiě)作這樣的文章也很困難,因?yàn)槲掖得蟠玫男愿褚笪冶仨殞?xiě)出全網(wǎng)獨(dú)一無(wú)二的最優(yōu)秀的精品內(nèi)容,獨(dú)一無(wú)二是很容易的,我的任何一篇文章都有自己獨(dú)特的理解,并不是簡(jiǎn)單的對(duì)其他地方資料的搬運(yùn)整合,最優(yōu)秀就非常困難了,這不僅需要無(wú)私的分享精神,更需要卓越的洞察與理解能力,我正在朝這個(gè)方向努力。

如果不能做到這一點(diǎn),我覺(jué)得就沒(méi)有寫(xiě)出來(lái)的必要,雖然我的文章點(diǎn)擊率很低,但最近的文章都有近十分之一的閱讀收藏率證明了讀者對(duì)它的認(rèn)可,這也是頭條給予1萬(wàn)推薦的原因所在,否則至多100個(gè)推薦就到頭了。

到此這篇關(guān)于Python運(yùn)算符優(yōu)先級(jí)的文章就介紹到這了,更多相關(guān)Python運(yùn)算符優(yōu)先級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)

    python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家總結(jié)的是一篇關(guān)于python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-07-07
  • python中sklearn庫(kù)predict及python sklearn linearmodel(安裝過(guò)程)

    python中sklearn庫(kù)predict及python sklearn linearmodel(

    Scikit-learn(sklearn)是機(jī)器學(xué)習(xí)中常用的第三方模塊,對(duì)常用的機(jī)器學(xué)習(xí)方法進(jìn)行了封裝,包括回歸(Regression)、降維(Dimensionality Reduction)、分類(Classfication)、聚類(Clustering)等方法,今天小編給大家分享python中sklearn庫(kù)predict的問(wèn)題,感興趣的朋友一起看看吧
    2024-02-02
  • 詳解在Python和IPython中使用Docker

    詳解在Python和IPython中使用Docker

    這篇文章主要介紹了詳解在Python和IPython中使用Docker,Docker是一個(gè)吸引人的新系統(tǒng),可以用來(lái)建立有趣的新技術(shù)應(yīng)用,特別是云服務(wù)相關(guān)的,需要的朋友可以參考下
    2015-04-04
  • Python使用sorted排序的方法小結(jié)

    Python使用sorted排序的方法小結(jié)

    這篇文章主要介紹了Python使用sorted排序的方法,結(jié)合三個(gè)實(shí)例分析了Python使用sorted方法進(jìn)行元素排序操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • python中的queue隊(duì)列類型及函數(shù)用法

    python中的queue隊(duì)列類型及函數(shù)用法

    這篇文章主要介紹了python中的queue隊(duì)列類型及函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 合并Excel工作薄中成績(jī)表的VBA代碼,非常適合教育一線的朋友

    合并Excel工作薄中成績(jī)表的VBA代碼,非常適合教育一線的朋友

    每次學(xué)生考試,評(píng)分完畢之后,把每個(gè)科的成績(jī)收集起來(lái),就得到了一個(gè)有若干工作表,每個(gè)表有學(xué)生學(xué)號(hào)、分?jǐn)?shù)等列的Excel工作薄。
    2009-04-04
  • Python matplotlib 動(dòng)畫(huà)繪制詳情

    Python matplotlib 動(dòng)畫(huà)繪制詳情

    這篇文章主要介紹了Python matplotlib 動(dòng)畫(huà)繪制,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • python報(bào)錯(cuò)TypeError: ‘NoneType‘ object is not subscriptable的解決方法

    python報(bào)錯(cuò)TypeError: ‘NoneType‘ object is not subscriptable的解決

    這篇文章主要給大家介紹了關(guān)于python報(bào)錯(cuò)TypeError: ‘NoneType‘ object is not subscriptable的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解基于django實(shí)現(xiàn)的webssh簡(jiǎn)單例子

    詳解基于django實(shí)現(xiàn)的webssh簡(jiǎn)單例子

    這篇文章主要介紹了基于 django 實(shí)現(xiàn)的 webssh 簡(jiǎn)單例子,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 基于Python編寫(xiě)將文本轉(zhuǎn)換為語(yǔ)音的簡(jiǎn)易應(yīng)用

    基于Python編寫(xiě)將文本轉(zhuǎn)換為語(yǔ)音的簡(jiǎn)易應(yīng)用

    這篇文章主要介紹了如何使用Python編寫(xiě)一個(gè)簡(jiǎn)單的應(yīng)用程序,將文本轉(zhuǎn)換為語(yǔ)音,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2023-08-08

最新評(píng)論