国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Python不支持 i ++ 語法的原因解析

瀏覽:42日期:2022-07-16 15:53:22

簡要討論為什么它不提供++作為運算符

Python不支持 i ++ 語法的原因解析

正常情況下,當(dāng)有人問起++原因而不是Python中的運算符時,這一行引起了我的注意。

如果您想知道最初的原因,則必須翻閱舊的Python郵件列表,或詢問那里的某個人(例如Guido)〜通過stackoverflow

這迫使我像上圖一樣思考。 真的我必須問Guido原因嗎? 好的,也許但是在那之前,我應(yīng)該嘗試一下,這促使我寫這篇文章

在C / C ++ / Java之類的語言中,對整數(shù)變量進(jìn)行自增或自減運算是標(biāo)準(zhǔn)的,可以分為前綴運算(++ i和?i)和后綴運算(i ++和i?), 每個都有細(xì)微的差異和不同的目的。

當(dāng)這些語言的用戶進(jìn)入Python時,他們可能會想知道為什么它不提供++或-操作。

盡管前綴++ i可能出現(xiàn)在Python中,但它不是' ++'自增運算符。

在這種情況下,它只是兩個' +'(正號)的疊加,而根本不支持' ++'后綴! (SyntaxError:語法無效)。

那么,為什么Python不支持i ++增量語法?

首先,Python當(dāng)然可以實現(xiàn)自我增強的效果,即以i + = 1或i = i + 1的形式編寫,這在其他語言中也很常見。

盡管Python在底部使用了不同的魔術(shù)方法(add ()和__iadd __())來完成計算,但是表面上的效果卻完全相同。

因此,我們的問題可以轉(zhuǎn)換為:為什么以上兩種書寫風(fēng)格會比i ++更好,并成為Python的最終選擇?

1. Python整數(shù)是不可變的類型

當(dāng)我們定義i = 1000時,不同的語言會區(qū)別對待它們。

諸如C(寫入int = 1000)的語言將適用于內(nèi)存空間,并將其``綁定’’到固定名稱i上,同時寫入變量值1000。

這里,i的地址和類型是固定的,而值是可變的。

Python(寫i = 1000)也將申請內(nèi)存空間,但是它將'綁定'到數(shù)字1000,即該1000的地址和類型是不可變的

因此,當(dāng)我們使我'自我增加'(i = i + 1)時,兩者都被區(qū)別對待。

諸如C之類的語言首先找到存儲在i地址中的值,然后將其加1。 操作后,新值將替換舊值 Python的操作過程是將i指向的數(shù)字加1,然后,將結(jié)果綁定到新應(yīng)用的存儲空間,然后將名稱標(biāo)簽'粘貼'到新數(shù)字。

打個比方:C中的i就像是一個寄生了1000的主機,而Python中的1000就像了一個寄生了i的主機。 所以我在C語言中與Python中的1000相同

綜上所述,讓我們看一下i ++,不難發(fā)現(xiàn):

在C之類的語言中,i ++可以表示i的數(shù)值屬性的增加,既不會打開新的內(nèi)存空間,也不會創(chuàng)建新的一等公民 在像Python這樣的語言中,如果i ++是對其name屬性的操作,則這沒有任何意義。 如果將其理解為對數(shù)字本體的一種操作,那么情況將會很復(fù)雜。

它將生成一個新的一等公民1001,因此需要為其分配一個內(nèi)存地址。 如果此時占用的地址為1000,則將涉及舊對象的回收,并且與1000的原始引用關(guān)系也將受到影響。 因此只能為1001打開新的內(nèi)存空間

如果Python支持i ++,則其操作過程將比C ++復(fù)雜,并且其含義不再是'將數(shù)字增加1'(遞增),而應(yīng)是'創(chuàng)建新數(shù)字'。

Python理論上可以實現(xiàn)i ++操作,但是它必須重新定義'增量運算符',這將導(dǎo)致具有其他語言經(jīng)驗的人誤解。

最好讓每個人都直接寫i + = 1或i = i + 1。

2. Python具有可迭代的對象

諸如C / C ++之類的語言已將i ++設(shè)計為主要是為了方便使用三部分的for循環(huán)結(jié)構(gòu)。

Python不支持 i ++ 語法的原因解析

這種程序與數(shù)字本身的自增過程有關(guān)。 數(shù)字的增加與程序主體的執(zhí)行有關(guān)。

Python中沒有這種結(jié)構(gòu),它提供了一種更優(yōu)雅的方法:

Python不支持 i ++ 語法的原因解析

這里反映了不同的思維方式。

它關(guān)心值范圍內(nèi)的迭代遍歷。 它不在乎或不需要人為添加數(shù)字。

Python中的可迭代對象/迭代器/生成器提供了很好的迭代/遍歷用法,并且可以完全替代i ++。

例如,Python可以使用enumerate()與上述示例中的值同時遍歷下標(biāo)和特定值。

Python不支持 i ++ 語法的原因解析

再舉一個例子,對于字典遍歷,Python提供了keys(),values(),item()和其他遍歷方法,這些方法非常易于使用:

Python不支持 i ++ 語法的原因解析

不僅在Python中很少使用i + = 1或i = i + 1,而且迭代對象的可用性使操作值范圍變得容易,并且很少有人要求對其進(jìn)行累加。

因此,回到我們最初的問題,這兩種'自增'方法并不比i ++好多少,僅僅是因為它們是通用操作

這就是為什么無需引入新的運算符,Python會繼續(xù)提供基礎(chǔ)支持的原因。 真正的贏家是各種各樣的可迭代對象!

摘要

Python不支持遞增運算符,原因如下:

因為它的整數(shù)是一類不變的一等公民,所以如果要支持增量運算(++),將會帶來歧義

含糊不清的原因:在本故事中

主要是因為它具有更合適的實現(xiàn),即迭代對象,它對遍歷操作具有良好的支持。

到此這篇關(guān)于Python不支持 i ++ 語法的原因解析的文章就介紹到這了,更多相關(guān)Python不支持 i ++ 語法內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产精品日韩一区二区三区 | 黄色网址在线免费观看 | 精品一区二区三区四区在线 | 国产精品特黄一级国产大片 | 欧美高清一区二区三 | 中文字幕日韩一区二区不卡 | a毛片免费观看完整 | 国产成人深夜福利在线观看 | 秀人网私拍福利视频在线 | 成人性色生活片全黄 | a欧美在线 | 久久久久久久久久综合情日本 | 久久精品在线 | 国产伦精品一区二区三区 | 国产精品高清视亚洲一区二区 | 久久久久9999 | 噜噜噜狠狠夜夜躁精品 | 手机在线看片国产日韩生活片 | 久草97| 5x性区m免费毛片视频看看 | 欧美一区二区三区不卡免费观看 | 午夜三级网站 | 精品99久久| 在线播放国产一区二区三区 | 欧美性巨大欧美 | 久久r视频 | 一级特一级特色生活片 | 免费男女乱淫真视频播放 | 日本三级毛片 | 欧美成人在线视频 | 日本www免费视频网站在线观看 | 亚洲国产精品久久日 | 台湾精品视频在线观看 | 国产一区私人高清影院 | 日韩一级黄色毛片 | 亚洲国产精品免费观看 | 波多野结衣中文在线 | 欧美人与鲁交大毛片免费 | 成人高清视频免费观看 | 亚洲精品手机在线 | 亚洲欧美另类日本久久影院 |