python除了支持原有的int和float類型,新增了支持Decimal或者Fraction。python還內(nèi)置支持復(fù)數(shù),后綴j或者J用于標(biāo)識(shí)虛數(shù)。
如果字符串中有單引號(hào)而沒有雙引號(hào),該字符串外將加注雙引號(hào),反之,則加注單引號(hào)。print() 函數(shù)輸出的內(nèi)容更簡(jiǎn)潔易讀,它會(huì)省略兩邊的引號(hào),并輸出轉(zhuǎn)義后的特殊字符。
>> '"Isn\'t," they said.' '"Isn't," they said.' >>> print('"Isn\'t," they said.') "Isn't," they said. >>> s = 'First line.\nSecond line.' # \n means newline >>> s # without print(), \n is included in the output 'First line.\nSecond line.' >>> print(s) # with print(), \n produces a new line First line. Second line.
如果不希望前置的\字符轉(zhuǎn)譯成特殊字符,可以使用原始字符串,在引號(hào)前添加r即可。
>>> print('C:\some\name') # h這里的\n會(huì)被認(rèn)為是轉(zhuǎn)義字符 C:\some ame >>> print(r'C:\some\name') #在轉(zhuǎn)義之前標(biāo)記為r C:\some\name
字符串可以使用+合并到一起,也可以使用*表示復(fù)制多次
>>>3 * 'mmm' + ‘qqq' >'mmmmmmmmmqqq'
相鄰的兩個(gè)或者多個(gè)字符串會(huì)自動(dòng)合并
>>>'Py' 'thon' >‘Python'
拆分長(zhǎng)字符串時(shí),這個(gè)功能特別實(shí)用:
>>>('Put several strings within parentheses ' ... 'to have them joined together.') >>>text >'Put several strings within parentheses to have them joined together.'
這個(gè)功能只能用于兩個(gè)字面值,不能用于變量或者表達(dá)式:
>>> prefix = 'Py' >>> prefix 'thon' # can't concatenate a variable and a string literal File "stdin>", line 1 prefix 'thon' ^ SyntaxError: invalid syntax >>> ('un' * 3) 'ium' File "stdin>", line 1 ('un' * 3) 'ium' ^ SyntaxError: invalid syntax
合并多個(gè)變量或者合并變量與字面值,要使用“+”:
>>> prefix + 'thon' 'Python'
字符串支持索引,正向索引和反向索引都支持。
str[0] str[1] str[-1] #為什么反向索引從-1開始? #-0 和 0 相等,指向的是同一個(gè)值。
python支持切片操作。索引可以提取單個(gè)字符,切片操作可以提取字符串。
>>> word[0] 'P' >>> word[2:5] 'tho'
python切片操作輸出結(jié)果包含切片開始,但是不包含切片結(jié)束。因此s[:i] + s[i:]總是等于s
>>> word[:2] + word[2:] 'Python' >>> word[:4] + word[4:] 'Python'
python可以自動(dòng)處理越界索引:
>>> word[4:42] 'on' >>> word[42:] ''
python字符串是不可變量,所以直接對(duì)某個(gè)索引復(fù)制會(huì)報(bào)錯(cuò)。如果想改變字符串的值,必須新建一個(gè)字符串。
python列表是個(gè)很神奇的類型,列表中添加的元素可以是不同的數(shù)據(jù)類型。與python字符串一樣,python列表也支持索引和切片操作。
切片操作會(huì)返回包含請(qǐng)求元素的新列表。返回的是列表的淺拷貝。
#補(bǔ)充:深拷貝和淺拷貝的區(qū)別: #使用淺拷貝,當(dāng)原容器對(duì)象中可變對(duì)象中有元素發(fā)生變化,拷貝得到的對(duì)象也會(huì)變#化。而使用深拷貝時(shí),不會(huì)有這種問題。 #!/usr/bin/python # -*- coding:utf-8 -*- # @Author : qmt # @Time : 2021/4/27 21:26 import copy # 淺拷貝 list1 = [[1,1], 555 , 'mm'] list2 = list1.copy() list3 = copy.copy(list1) print(id(list1)) print(id(list2)) print(id(list3)) # 輸出結(jié)果 # 2207574630976 # 2207574779456 # 2207574778816 print(id(list1[0])) print(id(list2[0])) # 輸出結(jié)果: # 2287435172736 # 2287435172736 print(id(list1[1])) print(id(list2[1])) # 輸出結(jié)果: # 2085715335536 # 2085715335536 print(id(list1[2])) print(id(list2[2])) print(id(list3[2])) # 輸出結(jié)果: # 3009054756720 # 3009054756720 # 3009054756720 # 改變第一個(gè)值,查看復(fù)制對(duì)象的變化 list1[0][0] = 100 print(list1) print(list2) print(list3) # 輸出結(jié)果: # [[100, 1], 555, 'mm'] # [[100, 1], 555, 'mm'] # [[100, 1], 555, 'mm'] list1[2] = 32 print(list1) print(list2) print(list3) # 輸出結(jié)果: # [[100, 1], 555, 32] # [[100, 1], 555, 'mm'] # [[100, 1], 555, 'mm'] # 字符串是不可變對(duì)象,所以淺拷貝不會(huì)同步到其他復(fù)制對(duì)象中 list1[1] = 'mm' print(list1) print(list2) print(list3) # 輸出結(jié)果: # [[100, 1], 'mm', 32] # [[100, 1], 555, 'mm'] # [[100, 1], 555, 'mm']
深拷貝:
#!/usr/bin/python # -*- coding:utf-8 -*- # @Author : qmt # @Time : 2021/4/27 21:35 import copy list1 = [[1,2],'mm',2222] list2 = copy.deepcopy(list1) print(id(list1)) print(id(list2)) # 輸出結(jié)果:指向不同的內(nèi)存地址 # 2847485493888 # 2847485646528 list1[0][0] = 100 print(id(list1)) print(id(list2)) # 輸出結(jié)果:list2作為一個(gè)深拷貝對(duì)象,內(nèi)存地址并沒有發(fā)生變化 # 1368800613056 # 1368800441920 list1[2] = 100 print(list1) print(list2) # 輸出結(jié)果:list1的任何操作都不會(huì)對(duì)list2產(chǎn)生影響,因?yàn)檫@相當(dāng)于創(chuàng)建了一個(gè)新的對(duì)象 [[100, 2], 'mm', 100] [[1, 2], 'mm', 2222]
總結(jié):
可變類型 Vs 不可變類型
可變類型(mutable):列表,字典
不可變類型(unmutable):數(shù)字,字符串,元組
深拷貝會(huì)把可變對(duì)象也拷貝一份,而淺拷貝不會(huì)。
上面例子中說的是列表(可變對(duì)象)的拷貝,那對(duì)于元組,字符等不可不對(duì)象呢?
答案是,對(duì)不可變對(duì)象,其實(shí)不存在深淺拷貝的問題。無論怎么拷貝,效果都是新建立一個(gè)指向不可變對(duì)象的指針而已。
import copy a = (1,2) b = copy.copy(a) c =copy.deepcopy(a) print(b == c) print(id(b)==id(c)) lista = [5,6] listb = copy.copy(lista) listc = copy.copy(lista) print(listb == listc) print(id(lista) == id(listb))
輸出結(jié)果:
True
True
True
False
Python中的對(duì)象包含三個(gè)基本要素,分別是: id:用來唯一標(biāo)識(shí)一個(gè)對(duì)象,可以理解為內(nèi)存地址; type:標(biāo)識(shí)對(duì)象的類型; value:對(duì)象的值; == :比較兩個(gè)對(duì)象的內(nèi)容是否相等,即兩個(gè)對(duì)象的 value 是否相等,無論 id 是否相等,默認(rèn)會(huì)調(diào)用對(duì)象的 __eq__()方法 is: 比較的是兩個(gè)對(duì)象是不是完全相同,即他們的 id 要相等。 也就是說如果 a is b 為 True,那么 a == b 也為True
for n in range(2,10): for x in range(2,n): if n % x == 0: print(n ,'equals',x ,'*', n//x) break else: print(n,'is a prime number')
輸出結(jié)果:
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
到此這篇關(guān)于python3.9之你應(yīng)該知道的新特性詳解的文章就介紹到這了,更多相關(guān)python3.9新特性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:欽州 宿遷 黃山 三沙 濟(jì)南 臺(tái)灣 景德鎮(zhèn) 喀什
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python3.9之你應(yīng)該知道的新特性詳解》,本文關(guān)鍵詞 python3.9,之你,應(yīng)該,知道,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。