日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 3.0 print_Python 3.x 新特性及10大变化

發(fā)布時間:2025/3/21 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 3.0 print_Python 3.x 新特性及10大变化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

python 3.x 起始版本是Python 3.0,目前的最新版本是 3.3.3

Python之父Guido van Rossum談到了Python 3.0的構(gòu)思:

一直以來,除非要打破向后兼容性,否則很多缺陷和錯誤都無法修復(fù)。因此,Python 3000將會作為第一個放棄向后兼容性的Python版本,目的就是要讓Python向著最好的語言前進(jìn)。

Python的3.0版本,常被稱為Python 3000,或簡稱Py3k。相對于Python的早期版本,這是一個較大的升級。為了不帶入過多的累贅,Python 3.0在設(shè)計的時候沒有考慮向下兼容。許多針對早期Python版本設(shè)計的程序都無法在Python 3.0上正常運行。為了照顧現(xiàn)有程序,Python 2.6作為一個過渡版本,基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語法與函數(shù)?;谠缙赑ython版本而能正常運行于Python 2.6并無警告。程序可以通過一個2to3的轉(zhuǎn)換工具無縫遷移到Python 3.0。Python有一些很有用的測試模塊,包括doctext和unitest。確保在嘗試移植到Python3之前,對應(yīng)用程序進(jìn)行全面測試。要確保測試范圍盡可能大,而且程序在Python2.6上運行時,能通過測試并且沒有出現(xiàn)任何警告信息。

新的Python程序建議使用Python 3.0版本的語法。除非運行環(huán)境無法安裝Python 3.0或者程序本身使用了不支持Python 3.0的第三方庫。目前不支持Python 3.0的第三方庫有Twisted, py2exe, PIL等。大多數(shù)第三方庫都正在努力地兼容Python 3.0版本。即使無法立即使用Python 3.0,也建議編寫兼容Python 3.0版本的程序,然后使用Python 2.6, Python 2.7來運行。Python 2.7被確定為最后一個Python 2.x版本,它除了支持Python 2.x語法外,還支持部分Python 3.1語法.

變化大致總結(jié)如下:

01.print() and exec() 函數(shù)

python舊版本里,print和exec是作為一語句出現(xiàn),可以用print "Hello,World!", 來打印一個語句,在新版本里,print()和exec()作為一個函數(shù)出現(xiàn),所以上面的寫就是錯誤的,應(yīng)該寫成print ("Hello,World!")對于Java的程序員來說,這樣的改變應(yīng)該是比較熟悉. System.out.print("Hello,World!");

復(fù)制代碼 代碼如下:

Old: >>>print "The answer is", 2*2

New: >>>print("The answer is", 2*2)

Old: >>>print x, # Trailing comma suppresses newline

New: >>>print(x, end=" ") # Appends a space instead of a newline

Old: >>>print # Prints a newline

New: >>>print() # You must call the function!

Old: >>>print >>sys.stderr, "fatal error"

New: >>>print("fatal error", file=sys.stderr)

Old: >>>print (x, y) # prints repr((x, y))

New: >>>print((x, y)) # Not the same as print(x, y)!

不過在Python 2.6版本里面: from __future__ import print_function

復(fù)制代碼 代碼如下:

>>> from __future__ import print_function

>>> print ('Jerry','Sherry',sep='-')

Jerry-Sherry

下面的修改在新版本是正確的:

復(fù)制代碼 代碼如下:

>>>print("There are possibilities!", sep="")

There are <4294967296> possibilities!

>>>fid = open("log.txt", "a")

>>>print("log.txt", file=fid)

>>>print("Foo", "Bar", sep="%")

>>>Foo%Bar

exec() 同樣是函數(shù),在python 2.x里,下列代碼是ok的.

復(fù)制代碼 代碼如下:

>>> def foo():

exec('a=4')

print a

>>> foo()

4

但在python 3.x里面就不行了,會報NameError: global name 'a' is not defined. 因為變量a沒有定義。原因在于exec()作為函數(shù),只操作globals()和locals()函數(shù)返回的字典。但locals()函數(shù)返回的字典實際上是局部變量的一個副本。exec()函數(shù)中進(jìn)行的賦值只修改了局部變量的這份副本,而非局部變量本身。下面給出了一種解決辦法:

復(fù)制代碼 代碼如下:

>>> def foo():

_locals = locals()

exec('a=4',globals(),_locals)

a = _locals['a']

print (a)

>>> foo()

4

02.整數(shù)及除法

int和long統(tǒng)一為int, int表示任何精度的整數(shù),移除sys.maxint, 因為int已經(jīng)是最大的整數(shù)。新版本移除了含糊的除法符號('/'),而只返回浮點數(shù)。在以前的版本中,如果參數(shù)是int或者是long的話,就會返回相除后結(jié)果的向下取整(floor), 而如果參數(shù)是float或者是complex的話,那么就會返回相除后結(jié)果的一個恰當(dāng)?shù)慕啤?/p>

復(fù)制代碼 代碼如下:

Old: >>>1/2 #結(jié)果是0 暈死。。。

New: >>>1/2 #結(jié)果是0.5 總算接地氣了。

03.input()代替raw_input()

變簡潔了。

復(fù)制代碼 代碼如下:

Old: >>>question = raw_input("What is your quest? ")

New: >>>question = input("What is your quest? ")

04.源文件編碼默認(rèn)為UTF-8

Python 3 在字符編碼方面有很多改進(jìn),其中之一就是默認(rèn)的源文件編碼從ASCII變?yōu)閁TF-8,也就是說以前在文件頭加上的各種花樣的 coding=utf-8不再需要了!

復(fù)制代碼 代碼如下:

# coding: UTF-8

# vim:fileencoding=UTF-8

# -*- coding=UTF-8 -*-

# vim: set fileencoding=UTF-8

05.字符串格式化變化

格式化字符串的這個內(nèi)置的%操作符太有限了,新版本新增加了format(),比以前更靈活了,%要逐漸被淘汰。舉三個簡單的例子如下:

復(fù)制代碼 代碼如下:

>>>"I love {0}, {1}, and {2}".format("eggs", "bacon", "sausage")

'I love eggs, bacon, and sausage'

>>>"I love {a}, , and {c}".format(a="eggs", b="bacon", c="sausage")

'I love eggs, bacon, and sausage'

>>>"I love {0}, {1}, and {param}".format("eggs", "bacon", param="sausage")

'I love eggs, bacon, and sausage'

06.比較

Python3對于值的比較要嚴(yán)格得多。在Python2中,任意兩個對象均可進(jìn)行比較,例如:

復(fù)制代碼 代碼如下:

Old: >>>11 < 'ORACLE' # Python 2 結(jié)果為:True

New: >>>11 < 'ORACLE' # Python 3 這種比較將導(dǎo)致TypeError異常

07.標(biāo)識符支持非 ASCII 字符

復(fù)制代碼 代碼如下:

所有 = all

class 男人:

@classmethod

def 包括(cls,ta):

return isinstance(ta,cls)

def 一起玩(人們):

if 所有(男人.包括(ta) for ta in 人們):

print ("他們是基友")

else:

print ("他們是朋友")

湯姆 = 男人()

杰瑞 = 男人()

一起玩([湯姆,杰瑞])

>>>

他們是基友

08.異常處理

* 異常類必須繼承自BaseException,它是異常結(jié)構(gòu)的基類。

* 移除了StandardError

* 拋出異常:使用raise Exception(args)而不是原來的raise Exception, args

* 捕獲異常: 使用except Exception as identifier而不是原來的except Exception, identifier

* 異常鏈(Exception chain)。

* 改良了一些windows不能加載模式時的異常信息,具有本地化處理。

例子1: Python 3中的異常處理

復(fù)制代碼 代碼如下:

# 綁定ValueError到本地的ex

try:

x = float('blah')

except ValueError as ex:

print("value exception occurred ", ex)

# 同時捕獲兩個不用的異常

try:

x = float('blah')

except (ValueError, NameError):

print("caught both types of exceptions")

例子2: Python 3中的隱式異常鏈

復(fù)制代碼 代碼如下:

def divide(a, b):

try:

print(a/b)

except Exception as exc:

def log(exc):

fid = open('logfile.txt') # missing 'w'

print(exc, file=fid)

fid.close()

log(exc)

divide(1,0)

09.字典dict

Python 3.0 內(nèi)的另一個重大改變是字典內(nèi)dict.iterkeys(),dict.itervalues(),dict.iteritems()方法的刪除。取而代之的是:dict.keys(),dict.values(),dict.items(),它們被進(jìn)行了修補,可以返回輕量的、類似于集的容器對象,而不是鍵和值的列表。這樣的好處是在不進(jìn)行鍵和條目復(fù)制的情況下,就能在其上執(zhí)行set操作。dict.has_key()同樣被移除。

復(fù)制代碼 代碼如下:

>>> d = {1:"Food",2:"Book"}

>>> d.keys(), d.values(),d.items()

>>> for values in d.items():

print (values)

(1, 'Food')

(2, 'Book')

>>> keys = list(d.items())

>>> print (keys)

[(1, 'Food'), (2, 'Book')]

Old: >>> d.has_key(1)

True

New: >>> 1 in d #新版本判斷key是否在字典里面

True

10.其他改變

* 移除了backticks(使用repr()代替)

* 移除了<>(不等號,使用!=代替)

* as和with 變成了關(guān)鍵字

* True,False和None變成了關(guān)鍵字

* 移除了__getslice__,語法a[i:j]被解釋成a.__getitem__(slice(i,j))

* nonlocal聲明。使用nonlocal可以聲明一個外部變量(不是global變量)

* xrange()改名為range(),range()現(xiàn)在不是產(chǎn)生一個列表(list),而是一個迭代器。

* next()重命名為__next__(),新的內(nèi)建函數(shù)next()可以調(diào)用一個對象的__next__()方法。

* 八進(jìn)制字,二進(jìn)制和bin()函數(shù)。應(yīng)該寫0o666而不是0666,oct()函數(shù)也做了響應(yīng)的改動。同樣,0b1010等價于10,bin(10)返回”0b1010″。

復(fù)制代碼 代碼如下:

>>>0o13 #八進(jìn)制轉(zhuǎn)十進(jìn)制

11

>>>0b010101 #八進(jìn)制轉(zhuǎn)二進(jìn)制

21

總結(jié)

以上是生活随笔為你收集整理的python 3.0 print_Python 3.x 新特性及10大变化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。