人妻出轨合集500篇最新
  • 首页
  • 4hu44四虎www在线影院麻豆
  • 波多野结衣在线视频
  • 国产成人亚洲综合无码精品
  • sesese在线观看a片
  • 国产成人亚洲综合无码精品

    免费看黄软件 抽絲剝繭,深远分解 Python 如何實現變量交換!

    发布日期:2022-05-19 02:16    点击次数:169

    免费看黄软件

    Python 本事員细目浮现 a,b = b,a,這句話用來交換兩個變量。相較于其它語言需要引入一個 temp 來臨時存儲變量的做法,Python 的這種寫法無疑相配優雅。

    簡潔優雅的 C 寫法:

    int 免费看黄软件a = 1; int b = 2; int temp; temp = a; a = b; b = temp; 

    簡潔優雅的 Python 寫法:

    a,b = 1,2 a,bb = b,a 

    雖然語法相配方便,但我們始終不曾想過:它是怎样運作的?背后支撐它的機制是什么?底下讓我們一步步分析它。

    闲居的說法

    最常見的解釋是:

    a,b = b,a 中右側是元組表達式,即 b,a 是一個兩個元素的 tuple(a,b)。表達式左側是兩個待分派元素,而 = 相當于元組元素拆包賦值操作。

    這種步调,聚首起來最簡單,但實際是這種情況么?

    讓我們從字節碼上看下免费看黄软件,是不是這種情況。

    從字節碼一窺交換變量

    大众可能不太了解 Python 字節碼。Python 解釋器是一個基于棧的虛擬機。Python 解釋器便是編譯、解釋 Python 代碼的二進制本事。

    虛擬機是一種執行代碼的容器,相較于二進制代碼具有方便移植的特點。而 Python 的虛擬機便是棧機器。

    Python 中函數調用、變量賦值等操作,终末都轉換為對棧的操作。這些對棧的具體操作,就保存在字節碼里。

    dis 模塊不错反編譯字節碼,使其變成人類可讀的棧機器辅导。如下,我們看反編譯 a,b=b,a 的代碼。

    >>> import dis >>> dis.dis("a,bb=b,a")   1           0 LOAD_NAME                0 (b)               2 LOAD_NAME                1 (a)               4 ROT_TWO               6 STORE_NAME               1 (a)               8 STORE_NAME               0 (b)              10 LOAD_CONST               0 (None)              12 RETURN_VALUE 

    可見,在 Python 虛擬機的棧上,我們按照表達式右側的 b,a 的順序,先后壓入計算棧中,然后用一個遑急辅导 ROT_TWO,這個操作交換了 a 和 b 的位置,终末 STORE_NAME 操作將棧頂的兩個元素先后彈出,傳遞給 a 和 b 元素。

    棧的特色是先進后出(FILO)。當我們按b,a順序壓入棧的時候,彈出時先出的便是a,再彈出便是b。STORE_NAME辅导會把棧頂元素彈出,并關聯到相應變量上。

    如若沒有第 4 列的辅导 ROT_TWO,这次 STORE_NAME 彈出的第一個變量會是后壓棧的 a,這樣便是 a=a 的效劳。有了 ROT_TWO 則完成了變量的交換。

    好了免费看黄软件,我們浮现靠壓棧、彈棧和交換棧頂的兩個元素,實現了 a,b = b,a 的操作。

    同時,我們也浮现了,男男暴菊gay无套网站上訴元組拆包賦值的說法,是不恰當的。

    那 ROT_TWO 是怎样具體操作的呢?

    后臺怎样執行?

    見名知意,不错猜出來 ROT_TWO 是交換兩個棧頂變量的操作。在 Python 源代碼的層面上,來看是如何交換兩個棧頂的元素。

    下載 Python 源代碼,進入 Python/ceval.c 文献,在 1101 行,我們看到了 ROT_TWO 的操作。

    TARGET(ROT_TWO){  PyObject *top = TOP();  PyObject *second = SECOND();  SET_TOP(second);  SET_SECOND(top);  FAST_DISPATCH();  } 

    代碼比較簡單,我們用 TOP 和 SECOND 宏獲取了棧上的 a,b 元素,然后再用 SET_TOP、SET_SECOND 宏把值寫入棧中。以此完成交換棧頂元素的操作。

    求值順序的奇怪現象!

    底下,我們來看一個奇怪的現象,在這篇著述里,也不错看到這個現象。如下,我們試圖排序這個列表:

    >>> a = [0, 1, 3, 2, 4] >>> a[a[2]], a[2] = a[2], a[a[2]] >>> a >>> [0, 1, 2, 3,国产成人亚洲综合无码精品 4] >>> a = [0, 1, 3, 2, 4] >>> a[2], a[a[2]] = a[a[2]],a[2] >>> a >>> [0, 1, 3, 3, 4] 

    按照聚首 a,b = b,a 和 b,a=a,b 是一樣的結果,但從上例中我們看到,這兩者的結果是不同的。

    導致這一現象的原因在于:求值的順序。毫無疑問免费看黄软件,整個表達式先求右側的兩個元素,然后作為常數保存起來。终末賦值給左側的兩個變量。

    终末賦值時,需要瞩目,我們從左到右轮番賦值,如若 a[2] 先修改的話,勢必會影響到后来的 a[a[2]] 的列表下標。

    “你不错使用反匯編代碼,來分析產生這個現象的具體步驟。” 奇怪的變回拆包現象!!

    當我們使用常數作為右側元組,來給左側變量賦值時;或使用超過三個元素,來完成肤浅交換時,其在字節碼層次上便不是 ROT_TWO 這種操作了。

    >>> dis.dis("a,b,c,d=b,c,d,a")   1           0 LOAD_NAME               3 LOAD_NAME               6 LOAD_NAME               9 LOAD_NAME              12 BUILD_TUPLE              15 UNPACK_SEQUENCE              18 STORE_NAME              21 STORE_NAME              24 STORE_NAME              27 STORE_NAME              30 LOAD_CONST              33 RETURN_VALUE >>> 

    很明顯,這里是在偏移 12 字節處 BUILD_TUPLE 組裝元組,然后解包賦值給左側變量。上文所述的闲居說法,在這里又建造了!

    现有通信加密方法可能难以扩展到5G等高速和超低延迟系统。这是因为加密的本质要求发送方和接收方之间交换信息以加密和解密消息。这种交换使链接容易受到攻击,它还需要增加延迟的计算。对于自动驾驶汽车、机器人和其他网络物理系统而言,最大限度地缩短行动时间至关重要。

    然而,三大运营商近日全部宣布提高资费,最多涨 25%。

    网络团队应考虑以下问题,以帮助确定是否是时候采取新的现代方法来自动化组织的网络配置和合规管理。

    但除规格外,网络工程师还应牢记一些布线最佳做法,以便在电缆被拉出后继续使用。为防止电缆缠绕,请考虑这四种电缆管理思路。

    左:锐捷网络企业行业部副总经理叶永军,右:云智汇科技首席运营官施春豪

    首都医科大学附属北京同仁医院的24小时发热门诊,医院选用锐捷IDV云桌面,快速部署到独立挂号收费工作室、独立诊室,实现一医一患的就诊空间,批量完成应用软件与外接设备的安装与调试,各类信息化外设终端连接无忧,顺畅运行,帮助信息中心跑赢了发热门诊“建设时间”。

    除总部外,这两家银行还在全国各地拥多家分行,庞大的数量和各地不同的情况让此次护网工作变得更加繁重、艰巨,需集中投入大量的人员、精力、时间才能完成。

    尽管软件供应商和开发人员尽了最大努力,但其中许多漏洞已经存在多年。如Microsoft 的Print Spooler中的“PrintNightmare”漏洞表明,仅仅因为某些事情已知并不意味着它很容易被解决。

    也便是說,當小于四個元故人換時,Python 招揽優化的棧操作來完成交換。

    當使用常量大致超過四個元素時,招揽元組拆包賦值的格式來交換。

    至于為什么是四個元素,應該是因為 Python 最多援助到 ROT_THREE 操作,四個元素的話,系統不浮现該怎样優化了。但在新版块的 Python 中,我看到了 ROT_FOUR 操作,是以這時候,四個元素還是 ROT_* 操作來優化的。

    >>>import opcode >>>opcode.opmap["ROT_THREE"] 3 

    此例中,該版块 Python 援助 ROT_THREE 操作,你也不错使用 ROT_FOUR 检察我方 Python 是否援助,進而確定是否不错四個以上元素肤浅交換。

     



    Powered by 人妻出轨合集500篇最新 @2013-2022 RSS地图 HTML地图