示例解讀 Python 2 和 Python 3 之間的主要差異

開發四年只會寫業務代碼,分布式高并發都不會還做程序員???hot3.png

每門編程語言在發布更新之后,主要版本之間都會發生很大的變化。 在本文中,Vinodh Kumar 通過示例解釋了 Python 2 和 Python 3 之間的一些重大差異,以幫助說明語言的變化。

本教程主要介紹內容:

  • 表達式

  • Print 選項

  • Unequal 操作

  • Range

  • 自動遷移

  • 性能問題

  • 主要的內部事務更改

1、表達式

在 Python 2 中為獲得計算表達式,你會鍵入:

X?=?raw_input?("enter?some?values)

?但在 Python 3 中,你會鍵入:

X?=?input?("enter?some?values")

因此,無論我們輸入什么,值都會分配給 2 和 3 中的變量 x。當在 Python 2 中輸入 2*6 時,結果將是 12,這是評估值。

但是,當在 Python 3 中運行相同的程序時,結果是字符串值。 在這種情況下,它看起來像字符串格式的 2*6。

那么,我們如何獲得評估表達式呢? 現在,我們必須使用一個名為 eval 的表達式或函數。 當您在輸入之前編寫 eval 時,它會將表達式轉換為計算值。

x=?eval(input("enter?some?values"))?=?12

具體表達式示例:

在 Python 2 中:

name?=?input("What?is?your?name??")print?("Hello,?%s."?%name)

然后輸出:

ede41e7165a123cd51816e06e12f6fbadb8.jpg

在 Python 3 中:

name?=?input("What?is?your?name??")print?("Hello,?%s."?%name)

然后輸出:

7c3cfbbb49cca4a9d1cb95ea690c59bfc15.jpg

我們可以清楚地看到,他們之間的差異很小。

2、Print 選項

在 Python 2 中,print 是一個不需要括號的語句。 在 Python 3 中,print 是一個函數,值需要用括號括起來。

Python 2

輸入:

print?"hello?world"

會輸出:

6fbbb412af00ba59280da33c958e50dc53e.jpg

Python 3

輸入:

1?!=?1.0print?(False)

會輸出:

4d194156250016b2e5303b7ae050f79d8b2.jpg

3、Unequal 操作

當我們在 Python 2 中使用 Unequal 運算符時,我們需要使用大于 > 或小于 < 符號。 但是,在 Python 3 中,有一個通用運算符。 感嘆號 ! 和等號 = 用于表示值是否相等。

Python 2 -<> 運算符表示不相等
Python 3 -!?運算符表示不相等

Python 2

輸入:

1?<>?1.0print?"False"

會輸出:

f2e5790276132b715467833b0a02e25e403.jpg

Python 3

輸入:

1?!=?1.0print?(False)1?!=?1.0print?(False)

會輸出:

68ab614325ba5df63766c49f037d2350779.jpg

4、Range

Range 用于生成數字列表,通常用于迭代 for 循環。

bdbd65da39fba1b027f09a4f2db383fd611.jpg

在這里你可以看到 X 等于 Range 10。當我們檢查變量 X 時,它返回了列表類型。 這意味著在 Python 2 中,Range 是列表的類型。當我寫 X 之后,得到一個對象列表,這里是:0 1 2 3 4 5 6 7 8 9。

ad4e0780699fc39149dab634a68247c0cab.jpg

現在讓我們轉到 Python 3,當我們寫 X 等于 Range 5,這個值就被賦給變量 X;當我們檢查變量 X 的類型時,它會返回一個 Range 對象本身。 這意味著在 Python 3 中,Range 是一個范圍對象本身。

Python 2

輸入:

print?range(0,10,1)

會輸出:

f631b850bf47db6506c75b528ad7f7e5c23.jpg

Python 3

輸入:

print(list(range(10)))

會輸出:

734c2a3d4f027aa9e2db3dd8b0184893c55.jpg

5、自動遷移

那么,我們如何自動執行腳本以將代碼從 Python 2 移動到 3?

在這里,我們可以使用 Python 中的 Add 2 Numbers 進行測試。

Python 2

輸入:

n1?=?1n2?=?2add?=?float(n1)?+?float(n2)print?'sum?of?{0}?and?{1}?is?{2}'.format(n1,?n2,?add)

會輸出:

bbcde0afac986bd8100c2d539648ab9e77d.jpg

現在使用 2to3 的遷移,我們可以轉換上面的代碼。

輸入:

n1?=?1n2?=?2add?=?float(n1)?+?float(n2)
print('sum?of?{0}?and?{1}?is?{2}'.format(n1,?n2,?add))

會輸出:

e07d902b0207473c5d546edfcda93a68bff.jpg

所以在這里我們看到它可以在命令行上通過 2to3 轉換為 Python 3 代碼。

Python 提供了自己的工具,名為 2to3.py,它運行了一堆腳本來將你的 Python 2 代碼轉換為 3。雖然它并不完美,但它總體上做得非常出色。轉換任何代碼后,您可以手動修復任何問題。

6、性能問題

此升級中已修復了大多數性能問題! 在比較兩個版本之間的基準時,差異幾乎可以忽略不計。

7、一些主要的內部事務變更

Python 2

  • print 功能括號選填。

  • 使用 u 作為前綴字符串以生成 unicode 字符串。

  • 整數除法總是返回整數 -5/2=2。

  • Raw_input() 讀取字符串。

  • input() 評估讀取的數據。

  • generator .next()。

Python 3:

  • print 功能括號必填。

  • 默認情況下為字符串 unicode。

  • 整數除法可能導致浮動 -5/2=2.5。

  • Raw_input() 不可用。

  • 輸入始終讀取字符串。

  • Next (generator)。

  • Py2 to py3 實用程序。

  • Dictionary?.keys() 和 .values() 返回的為視圖不是列表。

  • 在非自然比較中不能再使用比較運算符。
    例如,None < None 將引發 TypeError 而不是返回 false。

  • 不推薦使用百分比(%)字符串格式化運算符,使用 .format() 函數或連接。

編譯自:Key differences between Python 2 and 3: How to navigate change

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253716.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數字后端——布局

由于I / O單元和模塊的布放已經在布圖規劃時完成&#xff0c;因此布局的剩余任務主要是對標準單元的布局。布局方案在布圖規劃時就已經做了決定&#xff0c;要么選擇展平式布局&#xff0c;要么就是層次化布局。 一、布局目標 布局的目標也即布局內容實施之后所要達到的預期值…

python基礎 函數 (四)

一 函數基本 def func1():print("hello world")return 1, "hello", ("wo", "ai"), ["ni", "da"], {"you": "xi"} # return 可以返回任意# 結果&#xff1a; (1, hello, (wo, ai), [ni, da…

c#注釋

c#的注釋分為&#xff1a;這里不能不說一下什么是注釋。 注釋本身不會執行&#xff0c;只是說明性文字&#xff0c;只供程序員閱讀。 注釋又分為&#xff1a;單行注釋&#xff0c;多行注釋&#xff0c;文檔注釋。 單行注釋&#xff1a;//開始 多行注釋&#xff1a;/*開始&#…

嵌入式linux字符設備驅動

1. 我們需要先調用register_chrdev_region()或 alloc_chrdev_region()來向系統申請設備號int register_chrdev_region( dev_t first, unsigned int count, char *name ); //函數通過已知的設備號first來注冊字符設備區域。 int alloc_chrdev_region( dev_t *dev, unsigned int…

數字后端——時鐘樹綜合

在數字集成電路設計中&#xff0c;時鐘信號是數據傳輸的基準&#xff0c;它對于同步數字系統的功能、性能和穩定性起決定性作用&#xff0c;所以時鐘信號的特性及其分配網絡尤被人們關注。時鐘信號通常是整個芯片中有最大扇出、通過最長距離、以最高速度運行的信號。時鐘信號必…

52次課(mysql用戶管理、常用sql語句、 mysql數據庫備份恢復)

MySQL創建用戶以及授權 默認用戶是root用戶&#xff0c;不可能所有人員都用root用戶&#xff0c;創建用戶防止誤刪除&#xff0c;因為mysql里邊有多個庫每個庫里有很多表&#xff0c;所以需要給單獨的用戶做一些授權我只需要它對某一個數據庫有權限&#xff0c;或者說對某個數據…

線程池的種類,區別和使用場景

newCachedThreadPool&#xff1a; 底層&#xff1a;返回ThreadPoolExecutor實例&#xff0c;corePoolSize為0&#xff1b;maximumPoolSize為Integer.MAX_VALUE&#xff1b;keepAliveTime為60L&#xff1b;unit為TimeUnit.SECONDS&#xff1b;workQueue為SynchronousQueue(同步隊…

20145225 《信息安全系統設計基礎》第14周學習總結

第九章 虛擬存儲器 虛擬存儲器是計算機系統最重要的概念之一&#xff0c;它是對主存的一個抽象 三個重要能力&#xff1a; 它將主存看成是一個存儲在磁盤上的地址空間的高速緩存&#xff0c;在主存中只保存活動區域&#xff0c;并根據需要在磁盤和主存之間來回傳送數據&#xf…

數字后端——布線

布線是繼布局和時鐘樹綜合之后的重要物理實施任務&#xff0c;其內容是將分布在芯片核內的模塊、標準單元和輸入輸出接口單元( I /O pad&#xff09;按邏輯關系進行互連&#xff0c;其要求是百分之百地完成它們之間的所有邏輯信號的互連&#xff0c;并為滿足各種約束條件進行優…

動態加載和靜態加載及其編譯步驟

在類unix操作系統中&#xff0c;驅動加載方式一般分為&#xff1a;動態加載和靜態加載&#xff0c;下面分別對其詳細論述。 一、動態加載 動態加載是將驅動模塊加載到內核中&#xff0c;而不能放入/lib/modules/下。 在2.4內核中&#xff0c;加載驅動命令為&#xff1a;ins…

streamsets 集成 minio s3測試

具體streamsets crate 集成可以參考 streamsets crate 以下文檔只關注minio 集成的配置 minio 服務 搭建 具體搭建參考&#xff1a; https://www.cnblogs.com/rongfengliang/p/9197315.html 創建bucket &#xff08;crate 集成使用&#xff09; 測試的csv 文件從https://www.s…

sqlite性能優化

1、數據庫性能上 1.1 批量事務插入&#xff0c;提升數據插入的性能 由于sqlite默認每次插入都是事務&#xff0c;需要對文件進行讀寫&#xff0c;那么減少事務次數就能簡書磁盤讀寫次數從而獲得性能提升。 1.2 單條sql優于多條sql 實測發現&#xff0c;對于幾十條sql插入當你替…

【codecombat】 試玩全攻略 第十四關 已知敵人

第十四關 已知敵人 在這一關里&#xff0c;我們的英雄獲得了一副可以看見敵人的眼鏡&#xff0c;所以他很強勢的學會了“發現敵人”的技能。 hero.findNearestEnemy()命令&#xff0c;單詞多了&#xff0c;首字母都要大寫了&#xff0c;不然分不出來。玩過wow的小伙伴用過 宏命…

數字后端——信號完整性分析

隨著光刻和集成電路制造工藝的不斷進步&#xff0c;以及芯片的特征尺寸從深亞微米到納米的迅速采用&#xff0c;人們一方面因為芯片的功能極大提高而受益&#xff0c;另一方面&#xff0c;當邏輯門的溝道長度減小時&#xff0c;門的開關時間會減小&#xff0c;這意味著輸出驅動…

新浪前端面試

1、什么是Html語義化&#xff1f; 語義化 div > section&#xff0c;div > nav(語言自己能解釋)&#xff0c; input/(關閉符號) br/相對于樣式標記&#xff0c;如 i&#xff08;樣式&#xff09;/ em&#xff08;語義&#xff09;&#xff1b;b&#xff08;樣式&#xff…

poj3278 【BFS】

Catch That CowTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 97240 Accepted: 30519Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a num…

表單高級

● 表單高級 ○ 表單字段集<fieldset></fieldset> ■ 功能&#xff1a;相當于一個方框&#xff0c;在字段集中可以包含文本和其他元素。該元素用于對表單中的元素進行分組并在文檔中區別標出文本。fieldset元素可以嵌套&#xff0c;在其內部可以在設置多個fieldset…

CMOS圖像傳感器——TDI CIS

一、面陣與線陣圖像傳感器 人們在日常生活中見到的相機大多基于普通的面陣圖像傳感器,這種相機多用來拍攝靜止的物體。即使用它們來拍攝運動的物體,也僅僅是縮短了相鄰兩次拍攝的時間間隔,無需對所拍攝圖像進行額外操作,對物體的運動方向和速度也沒有限定條件。 除此之外,…

gpio_request 原形代碼

其原型為 int gpio_request(unsigned gpio, const char *label) 先說說其參數&#xff0c;gpio則為你要申請的哪一個管腳&#xff0c;label則是為其取一個名字。其具體實現如下&#xff1a; [cpp] view plaincopyprint?int gpio_request(unsigned gpio, const char *label) …

【noip模擬】德充符

時間限制&#xff1a;2s 內存限制&#xff1a;512MB 【題目描述】 申徒嘉和鄭子產都是伯昏無人的學生&#xff0c;子產因為申徒嘉是殘疾人&#xff0c;非常看不起他&#xff0c;于是想要刁難他。 子產給了申徒嘉 n個數 a1,a2...an。 現在他要求申徒嘉重新排列這些數&#xff0c…