您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么理解Python使用行為”,在日常操作中,相信很多人在怎么理解Python使用行為問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解Python使用行為”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Python中的所有內容都是一個對象-包括數字。 這很重要,因為數字-5 ; 256是在運行時分配的,訪問它們會返回對該對象的引用,因此使您可以永久更改這些數字的值(在Python實例中)。 現在我還不知道它有多少實際用途,但確實很有趣。
熱身
您需要一些基本的C知識和ctypes庫。 首先,更改一個相對未使用的數字的值,例如31:
>>> import ctypes >>> def changeNum(oldNum, newNum): ... ctypes.cast(id(oldNum), ctypes.POINTER(ctypes.c_int))[6] = newNum >>> changeNum(31, 100) # changes 31 to 100 >>> 31100
讓我們嘗試一些基本的算法:
>>> 31 + 31200 >>> 31 ** 0.510.0 >>> 31 ** 210000
此輸出使我感到非常不舒服,如果您也有這種感覺,對即將發生的事情感到抱歉。 現在,讓我們真正運行該手套:
>>> 31 == 100 True >>> changeNum(100, 200) >>> 31100 >>> 100200 >>> 31 == 100 False >>> 31 == 200 False >>> 31 * 2 == 200 True>>> 31 * 2 == 100 True
更改值后,它就消失了。 您可以嘗試找回原始值,但已將其刪除。
>>> changeNum(100, 500 // 5) >>> 100200 >>> changeNum(100, 50 * 2) >>> 100200
絕對混亂
如果您尚未意識到,則對象本身會進行全局更改。 這意味著與該數字的任何交互都是"未定義的"。 讓我們看看行為在for循環中是如何"定義"的:
>>> changeNum(5, 100) >>> for i in range(5): ... print(i) ...012 ...99
相當標準; 作為一個不一致的數字系統可以得到的標準。 變得很奇怪:如果我更改5的值,則5在技術上不再存在。 這會導致基本操作中非常奇怪的交互:
>>> changeNum(5, 20) >>> 5 - 7 == 13 True >>> 5 - 7 - 8 == 5 True
如果您真的想傷害您的大腦,請弄亂另外幾個數字并做一些數學運算:
>>> changeNum(29, 100) >>> changeNum(5, 20) >>> changeNum(120, 200) >>> 5 + 9100 >>> 5 + 9 + 5200 >>> 5 + 9 + 5 + 5220 >>> (5 + 9) * 52000
您還可以制作一個非常令人困惑的無限while循環:
>>> while 5 // 4 == 5: ... pass ... # Do loop stuff
崩潰的Python
我們現在去釣大魚吧; 我們已經解決了其他不重要的數字,但是如果我們改變1會發生什么?
>>> changeNum(1, 2) >>> 1 Segmentation fault (core dumped)
它崩潰了。 這不足為奇,因為1是非常重要的計算中使用的非常重要的數字。 我不確定更改1是否會影響True,但如果確實如此,我會想像一下后果。
到此,關于“怎么理解Python使用行為”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。