版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章內(nèi)置類型、內(nèi)置函數(shù)與運(yùn)算符董付國(guó)微信公眾號(hào):Python小屋本章學(xué)習(xí)目標(biāo)熟練掌握常用內(nèi)置類型的概念、特點(diǎn)、語(yǔ)法和基本用法熟練掌握常用運(yùn)算符的功能和用法熟練掌握常用內(nèi)置函數(shù)的功能和用法了解自定義函數(shù)的基本語(yǔ)法了解lambda表達(dá)式的語(yǔ)法和功能了解函數(shù)式編程的形式和優(yōu)點(diǎn)了解部分標(biāo)準(zhǔn)庫(kù)對(duì)象的用法2.1常用內(nèi)置類型數(shù)據(jù)類型是特定類型的值及其支持的操作組成的整體,每種類型的對(duì)象的表現(xiàn)形式、取值范圍和支持的操作都不一樣,各有不同的特點(diǎn)和適用場(chǎng)合。在Python語(yǔ)言中所有的一切都可以稱作對(duì)象,常見(jiàn)的有整數(shù)、實(shí)數(shù)、復(fù)數(shù)、字符串、列表、元組、字典、集合和zip對(duì)象、map對(duì)象、enumerate對(duì)象、range對(duì)象、filter對(duì)象、生成器對(duì)象等內(nèi)置對(duì)象,以及大量標(biāo)準(zhǔn)庫(kù)對(duì)象、擴(kuò)展庫(kù)對(duì)象和自定義對(duì)象。2.1常用內(nèi)置類型對(duì)象類型類型名稱示例簡(jiǎn)要說(shuō)明數(shù)字intfloatcomplex666,0o777,0b1011,0x4ed83.1415926,1.2e-33+4j,5J整數(shù)大小沒(méi)有限制,1.2e-3表示1.2乘以10的-3次方,復(fù)數(shù)中j或J表示虛部字符串str'Readabilitycounts.'"What'syourname?"'''Tomsai,"let'sgo."'''r'C:\Windows\notepad.exe'f'Mynameis{name}'rf'{directory}\{fn}'''使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符,不同定界符之間可以互相嵌套;前面加字母r或R表示原始字符串,任何字符都不進(jìn)行轉(zhuǎn)義;前面加字母f或F表示對(duì)字符串中的變量名占位符進(jìn)行替換,對(duì)字符串進(jìn)行格式化;可以在引號(hào)前面同時(shí)加字母r和f;一對(duì)空的單引號(hào)、雙引號(hào)或三引號(hào)表示空字符串字節(jié)串bytesb'\xb6\xad\xb8\xb6\xb9\xfa'b'Python\xe5\xb0\x8f\xe5\xb1\x8b'以字母b引導(dǎo),可以使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符,同一個(gè)字符串使用不同編碼格式編碼得到的字節(jié)串可能會(huì)不一樣2.1常用內(nèi)置類型對(duì)象類型類型名稱示例簡(jiǎn)要說(shuō)明列表list['red','green','blue']['a',{3},(1,2),['c',2],{65:'A'}][]所有元素放在一對(duì)方括號(hào)中,元素之間使用逗號(hào)分隔,其中的元素可以是任意類型的對(duì)象;一對(duì)空的方括號(hào)表示空列表元組tuple(0,0,255)(0,)()所有元素放在一對(duì)圓括號(hào)中,元素之間使用逗號(hào)分隔;元組中只有一個(gè)元素時(shí)后面的逗號(hào)不能省略;一對(duì)空的圓括號(hào)表示空元組字典dict{'red':(1,0,0),'green':(0,1,0),'blue':(0,0,1)}{}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素形式為“鍵:值”,其中“鍵”不允許重復(fù)并且必須為不可變類型(或者說(shuō)必須是可哈希類型,例如整數(shù)、實(shí)數(shù)、字符串、元組),“值”可以是任意類型的數(shù)據(jù);一對(duì)空的大括號(hào){}表示空字典集合set{'red','green','blue'}set()所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素不允許重復(fù)且必須為不可變類型;set()表示空集合,不能使用{}表示空集合2.1常用內(nèi)置類型對(duì)象類型類型名稱示例簡(jiǎn)要說(shuō)明布爾型boolTrue,False邏輯值,首字母必須大寫空類型NoneTypeNone空值,首字母必須大寫異常NameErrorValueErrorTypeErrorKeyError...
Python內(nèi)置異常類文件
fp=open('data.txt','w',encoding='utf8')Python內(nèi)置函數(shù)open()使用指定的模式打開(kāi)文件,返回文件對(duì)象迭代器
生成器對(duì)象、zip對(duì)象、enumerate對(duì)象、map對(duì)象、filter對(duì)象、reversed對(duì)象等具有惰性求值的特點(diǎn),空間占用小,適合大數(shù)據(jù)處理;其中每個(gè)元素只能使用一次2.1常用內(nèi)置類型Python屬于動(dòng)態(tài)類型編程語(yǔ)言,變量的值和類型都是隨時(shí)可以發(fā)生改變的。Python中的變量不直接存儲(chǔ)值,而是存儲(chǔ)值的內(nèi)存地址或者引用,這是變量類型隨時(shí)可以改變的原因。雖然Python變量的類型是隨時(shí)可以發(fā)生變化的,但每個(gè)變量在任意時(shí)刻的類型都是確定的。從這個(gè)角度來(lái)講,Python屬于強(qiáng)類型編程語(yǔ)言。2.1常用內(nèi)置類型在Python中,不需要事先聲明變量名及其類型,使用賦值語(yǔ)句或賦值表達(dá)式可以直接創(chuàng)建任意類型的變量,變量的類型取決于值的類型,解釋器會(huì)自動(dòng)進(jìn)行推斷和確定變量類型。賦值語(yǔ)句/表達(dá)式的執(zhí)行過(guò)程是:首先把等號(hào)或賦值運(yùn)算符右側(cè)表達(dá)式的值計(jì)算出來(lái),然后在內(nèi)存中尋找一個(gè)位置把值存放進(jìn)去,最后創(chuàng)建變量并指向這個(gè)內(nèi)存地址(或者說(shuō)給這個(gè)內(nèi)存地址貼上以變量名為名的標(biāo)簽)。對(duì)于不再使用的變量,可以使用del語(yǔ)句將其刪除,同時(shí)解除變量與值之間的引用關(guān)系。2.1常用內(nèi)置類型data=999999**99#創(chuàng)建整數(shù)變量print(type(data))#輸出<class'int'>data=3.1415926#創(chuàng)建實(shí)數(shù)變量print(type(data))#輸出<class'float'>data=3+4j#創(chuàng)建復(fù)數(shù)變量print(type(data))#輸出<class'complex'>data=[666,888]#創(chuàng)建列表變量print(type(data))#輸出<class'list'>#創(chuàng)建字符串變量data='Python程序設(shè)計(jì)與數(shù)據(jù)采集,董付國(guó),人民郵電出版社'print(type(data))#輸出<class'str'>deldata#刪除變量2.1.1整數(shù)、實(shí)數(shù)、復(fù)數(shù)Python內(nèi)置的數(shù)字類型有整數(shù)、實(shí)數(shù)和復(fù)數(shù)。其中,整數(shù)類型除了默認(rèn)的十進(jìn)制整數(shù),還有:二進(jìn)制:以0b開(kāi)頭,每一位只能是0或1,例如0b10011100。八進(jìn)制:以0o開(kāi)頭,每一位只能是0、1、2、3、4、5、6、7這八個(gè)數(shù)字之一,例如0o777。十六進(jìn)制:以0x開(kāi)頭,每一位只能是0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f之一,其中a表示10,b表示11,以此類推,例如0xa8b9,其中a-f之間的英文字母大小寫都可以。2.1.1整數(shù)、實(shí)數(shù)、復(fù)數(shù)Python支持任意大的數(shù)字。由于精度的問(wèn)題,實(shí)數(shù)的算術(shù)運(yùn)算可能會(huì)有一定的誤差,應(yīng)盡量避免在實(shí)數(shù)之間直接進(jìn)行相等性測(cè)試,更建議使用標(biāo)準(zhǔn)庫(kù)math中的函數(shù)isclose()測(cè)試兩個(gè)實(shí)數(shù)是否足夠接近。Python內(nèi)置支持復(fù)數(shù)類型及其運(yùn)算。2.1.1整數(shù)、實(shí)數(shù)、復(fù)數(shù)>>>importmath>>>print(math.factorial(96))
#計(jì)算96的階乘991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000>>>print(0.4-0.3)#實(shí)數(shù)運(yùn)算可能會(huì)有誤差0.10000000000000003>>>print(0.4-0.3==0.1)
#盡量不要直接比較實(shí)數(shù)是否相等False>>>print(math.isclose(0.4-0.3,0.1))
#測(cè)試兩個(gè)實(shí)數(shù)是否足夠接近True>>>print(8**(1/3))#計(jì)算8的立方根2.0>>>print(3**0.5)#計(jì)算3的平方根1.73205080756887722.1.1整數(shù)、實(shí)數(shù)、復(fù)數(shù)>>>c=3+4j>>>print(c**2)#計(jì)算復(fù)數(shù)的平方(-7+24j)>>>print(c*c.conjugate())
#計(jì)算一個(gè)復(fù)數(shù)與其共軛復(fù)數(shù)的乘積(25+0j)>>>print(abs(c))#計(jì)算復(fù)數(shù)的模,abs()是內(nèi)置函數(shù)5.0>>>print(3+4j.imag)#計(jì)算整數(shù)3與復(fù)數(shù)4j的虛部的和7.0>>>print((3+4j).imag)#輸出復(fù)數(shù)3+4j的虛部4.02.1.1整數(shù)、實(shí)數(shù)、復(fù)數(shù)>>>print(b(600,237))#計(jì)算600選237的組合數(shù),Python3.8新增224777820643381649011788256202430267953753842177924595991743594364725932773630476348450392337208230784729074501955657321431680008930322839581888495396760556194679474142688000>>>print(math.perm(72,20))
#計(jì)算72選20的排列數(shù),Python3.8新增759184772617383139127116820643840000>>>print(math.gcd(36,48))
#計(jì)算36和48的最大公約數(shù)12>>>math.gcd(36,24,48,18)
#計(jì)算多個(gè)整數(shù)的最大公約數(shù),Python3.9新增6>>>math.lcm(3,6,9)
#計(jì)算多個(gè)整數(shù)的最小公倍數(shù),Python3.9新增182.1.1整數(shù)、實(shí)數(shù)、復(fù)數(shù)>>>print(math.log(100))
#計(jì)算100的自然對(duì)數(shù)4.605170185988092>>>print(math.log(100,10))
#計(jì)算100以10為底的對(duì)數(shù)2.0>>>print(math.log10(100))
#與上一行代碼等價(jià)2.0>>>print(math.log2(100))
#計(jì)算100以2為底的對(duì)數(shù)6.643856189774724>>>print(math.log(100,2))
#與上一行代碼等價(jià)6.643856189774725>>>print(math.log1p(99))
#計(jì)算99+1的自然對(duì)數(shù)4.605170185988092>>>print(math.nextafter(3.458,50))
#3.458向50方向前進(jìn)時(shí)的下一個(gè)實(shí)數(shù),Python3.9新增3.4580000000000006>>>print(math.nextafter(3.458,-50))
#3.458向-50方向前進(jìn)時(shí)的下一個(gè)實(shí)數(shù)3.4579999999999997>>>print(d([1,2,3]))
#計(jì)算可迭代對(duì)象中數(shù)字的連乘62.1.1整數(shù)、實(shí)數(shù)、復(fù)數(shù)#標(biāo)準(zhǔn)庫(kù)函數(shù)random.randint(a,b)用于返回介于區(qū)間[a,b]的一個(gè)隨機(jī)數(shù)>>>fromrandomimportrandint#字符串前面加字母f表示格式化,會(huì)計(jì)算字符串中一對(duì)大括號(hào)內(nèi)表達(dá)式的值#大括號(hào)中冒號(hào)后面表示格式,x表示十六進(jìn)制數(shù)#6表示最終結(jié)果為6位,0表示不足6位時(shí)在前面補(bǔ)0#可以使用下面語(yǔ)句的方法生成隨機(jī)顏色值,16777215表示0xffffff的十進(jìn)制數(shù)>>>print(f'#{randint(0,16777215):06x}')#25b195#為了提高大數(shù)字的可讀性,可以在整數(shù)中間位置插入一個(gè)下畫線作為分隔符#一般是使用單個(gè)下畫線作為千分位分隔符,也可以在其他位置,但不能在首尾#這個(gè)用法適用于Python3.6以及更新的版本>>>print(12_345_678)123456782.1.2列表、元組、字典、集合列表、元組、字典、集合是Python內(nèi)置的容器對(duì)象,其中可以包含任意多個(gè)元素。這幾種類型也是Python中常見(jiàn)的可迭代對(duì)象(iterable)??傻鷮?duì)象是指實(shí)現(xiàn)了特殊方法__iter__()的對(duì)象,這樣的對(duì)象可以使用for循環(huán)從前向后逐個(gè)訪問(wèn)其中的元素,也可以轉(zhuǎn)換為列表、元組、字典、集合。可迭代對(duì)象包括容器對(duì)象和迭代器對(duì)象(iterator)。迭代器對(duì)象是指內(nèi)部同時(shí)實(shí)現(xiàn)了特殊方法__iter__()和__next__()的類的實(shí)例,map對(duì)象、zip對(duì)象、filter對(duì)象、enumerate對(duì)象、生成器對(duì)象都屬于迭代器對(duì)象。這類對(duì)象具有惰性求值的特點(diǎn),只能從前往后逐個(gè)訪問(wèn)其中的元素,不支持下標(biāo)和切片,并且每個(gè)元素只能使用一次。迭代器對(duì)象支持轉(zhuǎn)換為列表、元組、字典、集合等類型對(duì)象,支持in運(yùn)算符,也支持for循環(huán)遍歷其中的元素。嚴(yán)格來(lái)說(shuō),迭代器對(duì)象中并不保存任何元素,只會(huì)在需要時(shí)臨時(shí)計(jì)算和生成值,占用空間非常小。2.1.2列表、元組、字典、集合x_list=[1,2,3]#創(chuàng)建列表對(duì)象#星號(hào)表示序列解包,取出列表中的所有元素,sep表示指定冒號(hào)作為分隔符print(*x_list,sep=':')#輸出1:2:3x_tuple=(1,2,3)#創(chuàng)建元組對(duì)象x_dict={'a':97,'b':98,'c':99}
#創(chuàng)建字典對(duì)象,元素形式為“鍵:值”x_set={1,2,3}#創(chuàng)建集合對(duì)象#使用下標(biāo)訪問(wèn)列表中指定位置的元素,元素下標(biāo)從0開(kāi)始print(x_list[1])#輸出2#元組也支持使用序號(hào)作為下標(biāo),1表示第二個(gè)元素的下標(biāo)print(x_tuple[1])#輸出2#訪問(wèn)字典中特定“鍵”對(duì)應(yīng)的“值”,字典對(duì)象的下標(biāo)是“鍵”print(x_dict['a'])#輸出97#查看列表長(zhǎng)度,也就是其中元素的個(gè)數(shù)print(len(x_list))#輸出3#查看元素2在元組中首次出現(xiàn)的位置print(x_tuple.index(2))#輸出1#使用for循環(huán)遍歷字典中的“鍵:值”元素,查看字典中哪些“鍵”對(duì)應(yīng)的“值”為98forkey,valueinx_dict.items():ifvalue==98:print(key)#輸出b#查看集合中元素的最大值print(max(x_set))#輸出32.1.3字符串字符串是包含若干字符的容器對(duì)象,其中可以包含漢字、英文字母、數(shù)字和標(biāo)點(diǎn)符號(hào)等任意字符。字符串使用單引號(hào)、雙引號(hào)、三單引號(hào)或三雙引號(hào)作為定界符,其中三引號(hào)里的字符串可以換行,并且不同的定界符之間可以互相嵌套。如果字符串本身包含單引號(hào)那么可以使用雙引號(hào)作為最外層的定界符,如果字符串本身包含雙引號(hào)那么可以使用單引號(hào)作為最外層的定界符,如果字符串本身同時(shí)包含單引號(hào)和雙引號(hào)可以使用三引號(hào)作為最外層的定界符。2.1.3字符串如果字符串中含有反斜線“\”,反斜線和后面緊鄰的字符可能(注意,不是一定)會(huì)組合成轉(zhuǎn)義字符,這樣的組合會(huì)變成其他的含義而不再表示原來(lái)的字面意思,例如'\n'表示換行符,'\r'表示回車鍵,'\b'表示退格鍵,'\f'表示換頁(yè)符,'\t'表示水平制表符,'\ooo'表示1到3位八進(jìn)制數(shù)對(duì)應(yīng)ASCII碼的字符(例如'\64'表示字符'4'),'\xhh'表示2位十六進(jìn)制數(shù)對(duì)應(yīng)ASCII碼的字符(例如'\x41'表示字符'A'),'\uhhhh'表示4位十六進(jìn)制數(shù)對(duì)應(yīng)Unicode編碼的字符(例如'\u8463'表示字符'董'、'\u4ed8'表示字符'付'、'\u56fd'表示字符'國(guó)'),'\UXXXXXXXX'表示8位十六進(jìn)制數(shù)對(duì)應(yīng)Unicode編碼的字符(有效編碼范圍為'\U00010000'至'\U0001FFFD'之間)。2.1.3字符串如果不想反斜線和后面緊鄰的字符組合成為轉(zhuǎn)義字符,可以在字符串前面直接加上字母r或R使用原始字符串,其中的每個(gè)字符都表示字面含義,不會(huì)進(jìn)行轉(zhuǎn)義。不管是普通字符串還是原始字符串,都不能以單個(gè)反斜線結(jié)束,如果最后一個(gè)字符是反斜線的話需要再多寫一個(gè)反斜線。在字符串前面加字母f或F表示對(duì)字符串進(jìn)行格式化,把其中的變量名占位符替換為具體的值。原始字符串和格式化字符串可以同時(shí)使用,也就是在字符串前面可以同時(shí)加字母f和r(不區(qū)分大小寫)。2.1.3字符串Python3.x代碼默認(rèn)使用UTF-8編碼格式,全面支持中文。在使用內(nèi)置函數(shù)len()統(tǒng)計(jì)字符串長(zhǎng)度時(shí),中文和英文字母都作為一個(gè)字符對(duì)待。在使用for循環(huán)或類似技術(shù)遍歷字符串時(shí),每次遍歷其中的一個(gè)字符,中文字符和英文字符也一樣對(duì)待。在Python3.x中可以使用漢字做變量名。2.1.3字符串#使用一對(duì)三雙引號(hào)定義包含多行的字符串,模擬一個(gè)網(wǎng)頁(yè)的HTML代碼>>>text="""<html><head><title>標(biāo)題</title></head><body><p>第一段文本</p><ahref="#">第一個(gè)超鏈接</a><p>第二段文本</p><imgsrc="Python小屋.png"/><ahref="#">第二個(gè)超鏈接</a></body></html>""">>>print(len(text))#查看字符串長(zhǎng)度,也就是字符數(shù)量226>>>print(text.count('<p>'))
#查看子串'<p>'的出現(xiàn)次數(shù)2>>>print(text.count('<a'))
#查看子串'<a'的出現(xiàn)次數(shù)2>>>print(text.count(''))
#查看空格出現(xiàn)的次數(shù)68>>>print(text.count('\n'))
#查看換行符出現(xiàn)的次數(shù)12>>>'<title>'intext#查看text中是否包含子串'<title>'True2.1.3字符串>>>print('='*10)
#字符串乘以整數(shù)表示重復(fù)==========>>>print('Hello'+'world')
#連接字符串Helloworld>>>print(r'C:\Windows\notepad.exe')
#表示文件路徑時(shí)建議使用原始字符串C:\Windows\notepad.exe>>>directory=r'C:\Windows'>>>fn='notepad.exe'>>>print(rf'{directory}\{fn}')
#在字符串前面同時(shí)加字母r和fC:\Windows\notepad.exe>>>age=43>>>print(f'{age=}')
#這個(gè)語(yǔ)法Python3.8開(kāi)始支持age=43>>>print(f'age={age}')
#Python3.8之前的版本中需要這樣寫age=43>>>年齡=43
#可以使用中文字符作為變量名>>>年齡=年齡+3>>>print(年齡)462.1.4函數(shù)函數(shù)可以分為內(nèi)置函數(shù)、標(biāo)準(zhǔn)庫(kù)函數(shù)、擴(kuò)展庫(kù)函數(shù)和自定義函數(shù)。在Python中,可以使用關(guān)鍵字def定義具名函數(shù)(有名字的函數(shù)),使用關(guān)鍵字lambda定義匿名函數(shù)(沒(méi)有名字的函數(shù),一般作為其他函數(shù)的參數(shù)來(lái)使用)。2.1.4函數(shù)#func是函數(shù)名,value是形參,可以理解為占位符#在調(diào)用函數(shù)時(shí),形參會(huì)被替換為實(shí)際傳遞過(guò)來(lái)的對(duì)象deffunc(value):returnvalue*3#lambda表達(dá)式常用來(lái)定義匿名函數(shù),也可以定義具名函數(shù)#下面定義的func和上面的函數(shù)func在功能上是等價(jià)的#value相當(dāng)于函數(shù)的形參,表達(dá)式value*3的值相當(dāng)于函數(shù)的返回值func=lambdavalue:value*3#通過(guò)函數(shù)名來(lái)調(diào)用,圓括號(hào)里的內(nèi)容是實(shí)參,用來(lái)替換函數(shù)的形參print(func(5))#輸出15print(func([5]))#輸出[5,5,5]print(func((5,)))#輸出(5,5,5)print(func('5'))#輸出5552.2運(yùn)算符與表達(dá)式在Python中,單個(gè)常量或變量可以看作最簡(jiǎn)單的表達(dá)式,使用任意運(yùn)算符連接的式子也是表達(dá)式,在表達(dá)式中還可以包含函數(shù)調(diào)用。運(yùn)算符用來(lái)表示特定類型的對(duì)象支持的行為和對(duì)象之間的操作,運(yùn)算符的功能與對(duì)象類型密切相關(guān),不同類型的對(duì)象支持的運(yùn)算符不同,同一個(gè)運(yùn)算符作用于不同類型的對(duì)象時(shí)功能也會(huì)有所區(qū)別。2.2運(yùn)算符與表達(dá)式運(yùn)算符功能說(shuō)明:=賦值運(yùn)算,Python3.8新增,俗稱海象運(yùn)算符lambda[parameter]:expression用來(lái)定義lambda表達(dá)式,功能相當(dāng)于函數(shù),parameter相當(dāng)于函數(shù)形參,可以沒(méi)有;expression表達(dá)式的值相當(dāng)于函數(shù)返回值value1ifconditionelsevalue2用來(lái)表示一個(gè)二選一的表達(dá)式,其中value1、condition、value2都為表達(dá)式,如果condition的值等價(jià)于True則整個(gè)表達(dá)式的值為value1的值,否則整個(gè)表達(dá)式的值為value2的值,類似于一個(gè)雙分支選擇結(jié)構(gòu),見(jiàn)3.2.2節(jié)or“邏輯或”運(yùn)算,以表達(dá)式exp1orexp2為例,如果exp1的值等價(jià)于True則返回exp1的值,否則返回exp2的值and“邏輯與”運(yùn)算,以表達(dá)式exp1andexp2為例,如果exp1的值等價(jià)于False則返回exp1的值,否則返回exp2的值not“邏輯非”運(yùn)算,對(duì)于表達(dá)式notx,如果x的值等價(jià)于True則返回False,否則返回Truein、notinis、isnot<、<=、>、>=、==、!=成員測(cè)試,表達(dá)式xiny的值當(dāng)且僅當(dāng)y中包含元素x時(shí)才會(huì)為True;測(cè)試兩個(gè)變量是否引用的同一個(gè)對(duì)象。如果兩個(gè)對(duì)象引用的是同一個(gè)對(duì)象,那么它們的內(nèi)存地址相同;關(guān)系運(yùn)算,用于比較大小,作用于集合時(shí)表示測(cè)試集合的包含關(guān)系2.2運(yùn)算符與表達(dá)式運(yùn)算符功能說(shuō)明|“按位或”運(yùn)算,集合并集^“按位異或”運(yùn)算,集合對(duì)稱差集&“按位與”運(yùn)算,集合交集<<、>>左移位、右移位+-算術(shù)加法,列表、元組、字符串連接;算術(shù)減法,集合差集*@///%算術(shù)乘法,序列重復(fù);矩陣乘法;真除;整除;求余數(shù),字符串格式化+x-x~x正號(hào)負(fù)號(hào),相反數(shù)按位求反**冪運(yùn)算,指數(shù)可以為小數(shù),例如3**0.5表示計(jì)算3的平方根[].()下標(biāo),切片;屬性訪問(wèn),成員訪問(wèn);函數(shù)定義或調(diào)用,修改表達(dá)式計(jì)算順序,聲明多行代碼為一個(gè)語(yǔ)句[]、()、{}定義列表、元組、字典、集合以及列表推導(dǎo)式、生成器表達(dá)式、字典推導(dǎo)式、集合推導(dǎo)式2.2.1算術(shù)運(yùn)算符(1)“+”運(yùn)算符除了用于算術(shù)加法以外,還可以用于列表、元組、字符串的連接,但一般不這樣用,因?yàn)樾瘦^低。如果操作數(shù)不支持加號(hào)運(yùn)算符,會(huì)引發(fā)異常。>>>print(3+5)#整數(shù)相加8>>>print(3.14+9.8)#實(shí)數(shù)相加,可能會(huì)有誤差12.940000000000001>>>print((3+4j)+(5+6j))
#復(fù)數(shù)相加,實(shí)部與虛部分別相加(8+10j)>>>print('Python'+'小屋')
#連接字符串Python小屋>>>print([1,2]+[3,4,5])
#連接列表[1,2,3,4,5]>>>print((255,)+(0,0))
#連接元組(255,0,0)>>>[]+3#不支持列表與整數(shù)相加,拋出異常TypeError:canonlyconcatenatelist(not"int")tolist2.2.1算術(shù)運(yùn)算符(2)“-”運(yùn)算符除了用于整數(shù)、實(shí)數(shù)、復(fù)數(shù)之間的算術(shù)減法和相反數(shù)之外,還可以計(jì)算集合的差集。>>>print(9.6-3.14)#實(shí)數(shù)運(yùn)算可能會(huì)有誤差6.459999999999999>>>print(--3)#負(fù)負(fù)得正,偶數(shù)個(gè)負(fù)號(hào)互相抵消3>>>print(---3)#奇數(shù)個(gè)負(fù)號(hào)相當(dāng)于只有一個(gè)-3>>>print({1,2,3}-{3,4,5})#計(jì)算集合差集{1,2}>>>print({3,4,5}-{1,2,3})#集合差集運(yùn)算不遵守交換律{4,5}>>>fromdatetimeimportdatetime
#導(dǎo)入datetime模塊中的datetime類>>>time1=datetime(2023,6,11,17,24,30)
#創(chuàng)建兩個(gè)日期時(shí)間對(duì)象>>>time2=datetime(2022,12,13,7,27,50)>>>diff=time1-time2#日期時(shí)間對(duì)象相減,得到時(shí)間差對(duì)象>>>diff.days#查看兩個(gè)日期相差多少天180>>>diff.total_seconds()#查看兩個(gè)日期相差多少秒15587800.0>>>'a'-'A'#不支持字符串相減,拋出異常TypeError:unsupportedoperandtype(s)for-:'str'and'str'2.2.1算術(shù)運(yùn)算符(3)“*”運(yùn)算符除了表示整數(shù)、實(shí)數(shù)、復(fù)數(shù)之間的算術(shù)乘法,還支持列表、元組、字符串這幾個(gè)類型的對(duì)象與整數(shù)的乘法,表示對(duì)其中元素的引用進(jìn)行重復(fù),生成新的列表、元組或字符串。>>>print(6666666*88888888)#計(jì)算整數(shù)的乘積592592527407408>>>print((3+4j)*(5+6j))#計(jì)算復(fù)數(shù)的乘積(-9+38j)>>>print('重要的事情說(shuō)三遍!'*3)
#字符串與整數(shù)相乘表示重復(fù)重要的事情說(shuō)三遍!重要的事情說(shuō)三遍!重要的事情說(shuō)三遍!>>>print([1,2,3]*3)#列表與整數(shù)相乘表示重復(fù)[1,2,3,1,2,3,1,2,3]>>>print((0,)*5)#元組與整數(shù)相乘表示重復(fù)(0,0,0,0,0)2.2.1算術(shù)運(yùn)算符(4)運(yùn)算符“/”和“//”在Python中分別表示真除和整除,其中真除運(yùn)算符“/”的結(jié)果是實(shí)數(shù),整除運(yùn)算符“//”具有“向下取整”的特點(diǎn),也就是得到小于或等于真除法計(jì)算結(jié)果的最大整數(shù)。例如,-17/4的結(jié)果是-4.25,在數(shù)軸上小于-4.25的最大整數(shù)是-5,所以-17//4的結(jié)果是-5。>>>print(5/3)#/運(yùn)算的結(jié)果是實(shí)數(shù)1.6666666666666667>>>print(5//3)#//運(yùn)算會(huì)向下取整1>>>print(-17/4)-4.25>>>print(-17//4)#比-4.25小的最大整數(shù)是-5-5>>>print(17//(-4))-52.2.1算術(shù)運(yùn)算符(5)“%”運(yùn)算符可以用于求余數(shù)運(yùn)算和字符串格式化,第二個(gè)用法現(xiàn)在已經(jīng)不推薦使用了。>>>print(365%2)#一個(gè)數(shù)除以2余1表示是個(gè)奇數(shù)1>>>print(48%2)#一個(gè)數(shù)除以2余0表示是個(gè)偶數(shù)0>>>print(17%(-4))-3>>>print(17-(17//(-4)*(-4)))
#與上一行代碼等價(jià)-3>>>print(365%(-2))#余數(shù)的符號(hào)與除數(shù)一致-12.2.1算術(shù)運(yùn)算符(6)“**”運(yùn)算符表示冪運(yùn)算。該運(yùn)算符具有右結(jié)合性,也就是說(shuō),如果有多個(gè)連續(xù)的“**”運(yùn)算符,那么先計(jì)算右邊的再計(jì)算左邊的,除非使用圓括號(hào)明確修改表達(dá)式的計(jì)算順序。>>>print(2**8)#計(jì)算2的8次方256>>>print(3**3**3)#計(jì)算3的27次方7625597484987>>>print(3**(3**3))#和上一條語(yǔ)句功能等價(jià)7625597484987>>>print((3**3)**3)#計(jì)算27的3次方19683>>>print(16**0.5)#計(jì)算16的平方根4.0>>>print((-4)**0.5)#計(jì)算-4的平方根,結(jié)果是復(fù)數(shù),其中實(shí)部近似于0(1.2246467991473532e-16+2j)>>>print(16**(1/4))#計(jì)算16的4次方根2.02.2.2關(guān)系運(yùn)算符關(guān)系運(yùn)算符作用于列表、元組或字符串時(shí),從前向后逐個(gè)比較對(duì)應(yīng)位置上的元素,直到得到確定的結(jié)論為止,不會(huì)做任何多余的比較,具有惰性求值的特點(diǎn)。另外,在Python中,關(guān)系運(yùn)算符可以連續(xù)使用,當(dāng)連續(xù)使用時(shí)也具有惰性求值的特點(diǎn),當(dāng)已經(jīng)確定最終結(jié)果之后,不再進(jìn)行多余的比較。當(dāng)關(guān)系運(yùn)算符作用于集合時(shí),用來(lái)測(cè)試集合之間的包含關(guān)系。如果一個(gè)集合A中所有元素都在另一個(gè)集合B中,那么A是B的子集,B是A的超集,表達(dá)式A<=B的值為True。如果集合A中所有元素都在集合B中,但是集合B中有的元素不在集合A中,那么A是B的真子集,表達(dá)式A<B的值為True。包含同樣元素(與順序無(wú)關(guān))的兩個(gè)集合認(rèn)為相等。2.2.2關(guān)系運(yùn)算符>>>print(5>3)#直接比較數(shù)值大小True>>>print('a'>'A')#小寫字母的ASCII碼比對(duì)應(yīng)的大寫字母的ASCII碼大True>>>print(3+2<7+8)#關(guān)系運(yùn)算符優(yōu)先級(jí)低于算術(shù)運(yùn)算符True>>>print(3<5>2)#<和>的優(yōu)先級(jí)相同,等價(jià)于3<5and5>2True>>>print(3==3<5)#==和<的優(yōu)先級(jí)相同,等價(jià)于3==3and3<5True#!=和<的優(yōu)先級(jí)相同,等價(jià)于3!=3and3<5#表達(dá)式3!=3不成立,直接得出結(jié)論,不再計(jì)算表達(dá)式3<5>>>print(3!=3<5)False2.2.2關(guān)系運(yùn)算符>>>print('12345'>'23456')#第一個(gè)字符'1'<'2',直接得出結(jié)論False>>>print('abcd'>'Abcd')#第一個(gè)字符'a'>'A',直接得出結(jié)論True>>>print([85,92,73,84]<[91,73])
#第一個(gè)數(shù)字85<91,直接得出結(jié)論True#前兩個(gè)數(shù)字相等,第三個(gè)數(shù)字101>99>>>print([180,90,101]>[180,90,99])True#前三個(gè)元素相等,并且第一個(gè)列表有多余的元素>>>print([1,2,3,4]>[1,2,3])True>>>print({1,2,3,4}>{3,4,5})#第一個(gè)集合不是第二個(gè)集合的超集False>>>print({1,2,3,4}<={3,4,5})#第一個(gè)集合不是第二個(gè)集合的子集False2.2.3成員測(cè)試運(yùn)算符成員測(cè)試運(yùn)算符in和notin用于測(cè)試一個(gè)對(duì)象是否為另一個(gè)對(duì)象(后者要求為可迭代對(duì)象)的元素,適用于所有可迭代對(duì)象。這兩個(gè)運(yùn)算符具有惰性求值的特點(diǎn),一旦得出準(zhǔn)確結(jié)論,不會(huì)再繼續(xù)檢查可迭代對(duì)象中后面的元素。2.2.3成員測(cè)試運(yùn)算符>>>print(60in[3,50,60])#測(cè)試列表[3,50,60]中是否包含60True>>>print(3in(4,5,7))#測(cè)試元組(4,5,7)中是否包含3False>>>print('abc'in'abdce')#測(cè)試字符串'abdce'中是否包含子串'abc'False>>>print(5inrange(5))#測(cè)試range(5)中是否包含5False#如果字符串'abcd'不包含子串'c'才會(huì)返回True,否則返回False>>>print('c'notin'abcd')False#內(nèi)置函數(shù)chr()用來(lái)把數(shù)字作為Unicode編碼轉(zhuǎn)換成對(duì)應(yīng)的字符>>>print('a'inmap(chr,range(97,100)))True2.2.4集合運(yùn)算符>>>A={35,45,55,65,75}>>>B={65,75,85,95}>>>print(A)#集合中元素的存儲(chǔ)順序和放入順序不一定一樣{65,35,75,45,55}>>>print(B){65,75,85,95}>>>print(A|B)#并集{65,35,75,45,85,55,95}>>>print(A&B)#交集{65,75}>>>print(A-B)#差集A-B{35,45,55}>>>print(B-A)#差集B-A{85,95}>>>print(A^B)#對(duì)稱差集{35,45,85,55,95}>>>print((A|B)-(A&B))
#A^B=(A|B)-(A&B){35,45,85,55,95}>>>print((A-B)|(B-A))
#A^B=(A-B)|(B-A){35,85,55,45,95}2.2.5邏輯運(yùn)算符作為條件表達(dá)式時(shí),表達(dá)式的值只要不是0、0.0、0j、None、False、空列表、空元組、空字符串、空字典、空集合、空range對(duì)象或其他空的容器對(duì)象,都認(rèn)為等價(jià)(注意,等價(jià)不是相等)于True。例如,空字符串等價(jià)于False,包含任意字符的字符串都等價(jià)于True;0、0.0、0j都等價(jià)于False,除0之外的任意實(shí)數(shù)和復(fù)數(shù)都等價(jià)于True。邏輯運(yùn)算符and、or、not常用來(lái)連接多個(gè)表達(dá)式構(gòu)成更加復(fù)雜的表達(dá)式,and連接的兩個(gè)式子都等價(jià)于True時(shí)整個(gè)表達(dá)式的值才等價(jià)于True,or連接的兩個(gè)式子至少有一個(gè)等價(jià)于True時(shí)整個(gè)表達(dá)式的值等價(jià)于True。對(duì)于and和or連接的表達(dá)式,最終計(jì)算結(jié)果為最后一個(gè)計(jì)算的子表達(dá)式的值,不一定是True或False,但not運(yùn)算的結(jié)果一定是True或False。2.2.5邏輯運(yùn)算符and和or具有惰性求值或邏輯短路的特點(diǎn),當(dāng)連接多個(gè)表達(dá)式時(shí)只計(jì)算必須計(jì)算的值,并且最后計(jì)算的表達(dá)式的值作為整個(gè)表達(dá)式的值。以表達(dá)式“expression1andexpression2”為例,如果expression1的值等價(jià)于False,這時(shí)不管expression2的值是什么,表達(dá)式最終的值都是等價(jià)于False的,那么干脆就不計(jì)算expression2的值了,整個(gè)表達(dá)式的值就是expression1的值。如果expression1的值等價(jià)于True,這時(shí)仍無(wú)法確定整個(gè)表達(dá)式最終的值,所以會(huì)計(jì)算expression2,并把expression2的值作為整個(gè)表達(dá)式最終的值。2.2.5邏輯運(yùn)算符>>>print(3-3and5-2and2)#3-3的值為0,不再計(jì)算后面的表達(dá)式0>>>print(3-3or(5-2and2))#最后計(jì)算的一個(gè)表達(dá)式為22>>>print(not5)#5等價(jià)于True,所以not5的值為FalseFalse>>>print(not[])#[]等價(jià)于False,所以not[]的值為TrueTrue2.2.6下標(biāo)運(yùn)算符與屬性訪問(wèn)運(yùn)算符方括號(hào)“[]”可以用來(lái)定義列表或列表推導(dǎo)式,還可以用來(lái)指定整數(shù)下標(biāo)或切片,訪問(wèn)列表、元組、字符串中的一個(gè)或一部分元素,也可以指定字典的“鍵”做下標(biāo)訪問(wèn)對(duì)應(yīng)的“值”。圓點(diǎn)運(yùn)算符“.”用來(lái)訪問(wèn)模塊、類或?qū)ο蟮某蓡T。2.2.6下標(biāo)運(yùn)算符與屬性訪問(wèn)運(yùn)算符>>>importrandom>>>data=random.choices(range(10),k=10)
#調(diào)用random模塊中的函數(shù)>>>print(data)[8,6,1,8,9,6,8,6,2,1]>>>data.sort()#調(diào)用列表對(duì)象的sort()方法>>>print(data)[1,1,2,6,6,6,8,8,8,9]>>>print(data[3])#訪問(wèn)列表中下標(biāo)為3的元素6>>>print(data[1:5])#訪問(wèn)列表中下標(biāo)介于[1,5)區(qū)間的元素[1,2,6,6]>>>data.remove(8)#調(diào)用列表方法remove()刪除第一個(gè)8>>>print(data)[1,1,2,6,6,6,8,8,9]>>>data={'red':(1,0,0),'green':(0,1,0),'blue':(0,0,1)}>>>print(data['red'])#使用“鍵”做下標(biāo),訪問(wèn)對(duì)應(yīng)的“值”(1,0,0)2.2.7賦值運(yùn)算符Python3.8之后的版本新增了真正的賦值運(yùn)算符“:=”,也稱海象運(yùn)算符,可以表達(dá)式中創(chuàng)建變量并為變量賦值,運(yùn)用得當(dāng)?shù)脑捒梢宰尨a更加簡(jiǎn)潔。這個(gè)運(yùn)算符不能在普通語(yǔ)句中直接使用,如果必須使用的話需要在外面加一對(duì)圓括號(hào)。2.2.7賦值運(yùn)算符fromrandomimportchoicestext=''.join(choices('01',k=100))if(c:=text.count('0'))>50:print(f'0出現(xiàn)的次數(shù)多,有{c}次。')else:print(f'1出現(xiàn)的次數(shù)多,有{100-c}次。')withopen('news.txt',encoding='utf8')asfp:while(length:=len(line:=fp.readline()))>0:iflength>30:print(f'第一個(gè)長(zhǎng)度大于30的行為:{line}長(zhǎng)度為:{length}')breakelse:print('沒(méi)有長(zhǎng)度大于30的行。')fornumin(data:=[1,2,3]):print(num)#循環(huán)結(jié)構(gòu)中創(chuàng)建的變量在循環(huán)結(jié)束之后還可以訪問(wèn)print(data,num)2.3常用內(nèi)置函數(shù)-2.3.1基本輸入輸出(1)內(nèi)置函數(shù)input(prompt=None,/)用來(lái)在屏幕上輸出參數(shù)prompt指定的提示信息然后接收用戶的鍵盤輸入,不論用戶輸入什么內(nèi)容,input()一律返回字符串,必要的時(shí)候可以使用內(nèi)置函數(shù)int()、float()或eval()對(duì)用戶輸入的內(nèi)容進(jìn)行類型轉(zhuǎn)換。2.3.1基本輸入輸出#直接把input()函數(shù)的返回值作為int()函數(shù)的參數(shù)轉(zhuǎn)換為整數(shù)num=int(input('請(qǐng)輸入一個(gè)大于2的自然數(shù):'))#對(duì)2的余數(shù)為1的整數(shù)為奇數(shù),能被2整除的整數(shù)為偶數(shù)ifnum%2==1:print('這是個(gè)奇數(shù)。')else:print('這是個(gè)偶數(shù)。')#使用input()函數(shù)接收列表、元組、字典、集合等數(shù)據(jù)時(shí)應(yīng)使用eval()函數(shù)進(jìn)行轉(zhuǎn)換#不能使用list()、tuple()、dict()、set()lst=eval(input('請(qǐng)輸入一個(gè)包含若干大于2的自然數(shù)的列表:'))print('列表中所有元素之和為:',sum(lst))2.3.1基本輸入輸出(2)內(nèi)置函數(shù)print()用于以指定的格式輸出信息,完整語(yǔ)法為:print(value,...,sep='',end='\n',file=sys.stdout,flush=False)其中,sep參數(shù)之前為任意多個(gè)需要輸出的內(nèi)容;sep參數(shù)用于指定相鄰數(shù)據(jù)之間的分隔符,默認(rèn)為空格;end參數(shù)表示輸出完所有數(shù)據(jù)之后的結(jié)束符,默認(rèn)為換行符;file參數(shù)用來(lái)指定輸出的去向,默認(rèn)為標(biāo)準(zhǔn)控制臺(tái)(也就是屏幕);flush參數(shù)用來(lái)指定是否立刻輸出內(nèi)容(值為True時(shí))而不是先輸出到緩沖區(qū)(值為False時(shí))。2.3.1基本輸入輸出print(1,2,3,4,5)#默認(rèn)情況,使用空格作為分隔符print(1,2,3,4,5,sep=',')
#指定使用逗號(hào)作為分隔符print(3,5,7,end='')#輸出完所有數(shù)據(jù)之后,以空格結(jié)束,不換行print(9,11,13)width=20height=10#注意,下面的用法只適用于Python3.8之后的新版本,低版本不支持大括號(hào)中的等號(hào)print(f'{width=},{height=},{width*height=}')運(yùn)行結(jié)果為:123451,2,3,4,535791113width=20,height=10,width*height=2002.3.2dir()、help()>>>dir()#當(dāng)前作用域內(nèi)所有標(biāo)識(shí)符['__annotations__','__builtins__','__doc__','__loader__','__name__','__package__','__spec__']>>>num=3#定義變量>>>dir()#再次查看所有標(biāo)識(shí)符['__annotations__','__builtins__','__doc__','__loader__','__name__','__package__','__spec__','num']>>>importmath>>>dir(math)
#查看標(biāo)準(zhǔn)庫(kù)math中的所有成員,結(jié)果略>>>dir('')
#查看字符串對(duì)象的所有成員,結(jié)果略>>>help(math.factorial)
#查看標(biāo)準(zhǔn)庫(kù)函數(shù)的幫助文檔,結(jié)果略>>>importrandom>>>help(random.sample)
#查看標(biāo)準(zhǔn)庫(kù)函數(shù)的幫助文檔,結(jié)果略
#help()函數(shù)的參數(shù)應(yīng)該是函數(shù)名
#不要寫成help(random.sample())>>>help(''.replace)
#查看字符串方法的幫助文檔,結(jié)果略>>>help('if')
#查看關(guān)鍵字if的幫助文檔,結(jié)果略>>>help('return')
#查看關(guān)鍵字return的幫助文檔,結(jié)果略>>>help('**')
#查看運(yùn)算符“**”的幫助文檔,結(jié)果略2.3.3range()內(nèi)置函數(shù)range()有range(stop)、range(start,stop)和range(start,stop,step)三種用法,返回range對(duì)象,其中包含左閉右開(kāi)區(qū)間[start,stop)內(nèi)以step為步長(zhǎng)的整數(shù)范圍,三個(gè)參數(shù)start、stop、step都必須是整數(shù),start默認(rèn)為0,step默認(rèn)為1。range對(duì)象可以轉(zhuǎn)換為列表、元組或集合,可以使用for循環(huán)直接遍歷其中的元素,支持下標(biāo)、切片,支持內(nèi)置函數(shù)len()、enumerate()等,支持標(biāo)準(zhǔn)庫(kù)函數(shù)random.sample(),其中的元素可以反復(fù)使用。2.3.3range()range1=range(4)#只指定stop為4,start默認(rèn)為0,step默認(rèn)為1range2=range(5,8)#指定start=5和stop=8,step默認(rèn)為1range3=range(3,20,4)#指定start=3、stop=20和step=4range4=range(20,0,-3)#步長(zhǎng)step也可以是負(fù)整數(shù)print(range1,range2,range3,range4)print(range4[2])#使用下標(biāo)訪問(wèn)其中的元素#轉(zhuǎn)換為列表print(list(range1),list(range2),list(range3),list(range4))#使用for循環(huán)遍歷range對(duì)象中的元素,每遍歷一個(gè)元素就執(zhí)行一次循環(huán)體中的代碼foriinrange(10):print(i,end='')#在for循環(huán)中使用range對(duì)象控制循環(huán)次數(shù)#循環(huán)體代碼可以和循環(huán)變量沒(méi)有關(guān)系,是否使用循環(huán)變量取決于具體的業(yè)務(wù)邏輯foriinrange(5):print('Readabilitycount.',end='')2.3.4類型轉(zhuǎn)換(1)int()、float()、complex()>>>print(int(3.5))#返回實(shí)數(shù)的整數(shù)部分3>>>print(int(-3.5))#返回實(shí)數(shù)的整數(shù)部分-3>>>print(int('119'))#把數(shù)字字符串轉(zhuǎn)換為十進(jìn)制整數(shù)119>>>print(int('1111',2))#把1111按二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)15>>>print(int('1111',8))#把1111按八進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)585>>>print(int('1111',16))#把1111按十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)4369>>>print(int('x1',36))#把x1按36進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),36進(jìn)制中,g表示16
#h表示17,i表示18,j表示19,...,x表示33#得出x1==>33*36+1==>118911892.3.4類型轉(zhuǎn)換>>>print(int('\t5\n'))#自動(dòng)忽略數(shù)字字符串兩側(cè)的空白字符
#包括空格、制表符、換行符、換頁(yè)符5>>>print(float('3.1415926'))#把字符串轉(zhuǎn)換為實(shí)數(shù)3.1415926>>>print(float('-inf'))#負(fù)無(wú)窮大-inf>>>print(float('inf'))#正無(wú)窮大Inf>>>print(complex(3,4))#指定實(shí)部和虛部,返回復(fù)數(shù)(3+4j)>>>print(complex(imag=6))#只指定虛部,實(shí)部默認(rèn)為06j>>>print(complex('3'))#把字符串轉(zhuǎn)換為復(fù)數(shù)(3+0j)>>>print(complex('3+4j'))#把字符串轉(zhuǎn)換為復(fù)數(shù)(3+4j)2.3.4類型轉(zhuǎn)換(2)bin()、oct()、hex()>>>print(bin(8888))#把十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制0b10001010111000>>>print(oct(8888))#把十進(jìn)制整數(shù)轉(zhuǎn)換為八進(jìn)制0o21270>>>print(hex(8888))#把十進(jìn)制整數(shù)轉(zhuǎn)換為十六進(jìn)制0x22b8>>>print(bin(0o777))#把八進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制0b111111111>>>print(oct(0x1234))#把十六進(jìn)制整數(shù)轉(zhuǎn)換為八進(jìn)制0o11064>>>print(hex(0b1010101))#把二進(jìn)制整數(shù)轉(zhuǎn)換為十六進(jìn)制0x55>>>hex(0b1010101)#注意,實(shí)際轉(zhuǎn)換結(jié)果是字符串#直接查看和使用print()輸出形式不同'0x55'2.3.4類型轉(zhuǎn)換(3)ord()、chr()、str()>>>print(ord('A'))#返回大寫字母A的ASCII碼65>>>print(chr(65))#返回ASCII碼65對(duì)應(yīng)的字符A>>>print(ord('董'))#返回漢字字符的Unicode編碼33891>>>print(chr(33891))#返回指定Unicode編碼對(duì)應(yīng)的漢字董>>>print(str([1,2,3,4]))
#把列表轉(zhuǎn)換為字符串,適用于任意類型的對(duì)象[1,2,3,4]>>>print(str(b'\xe8\x91\xa3\xe4\xbb\x98\xe5\x9b\xbd','utf8'))
#使用UTF-8編碼對(duì)字節(jié)串解碼董付國(guó)>>>print(str(b'\xb6\xad\xb8\xb6\xb9\xfa','gbk'))
#使用GBK編碼對(duì)字節(jié)串解碼董付國(guó)>>>fromdatetimeimportdatetime>>>datetime.now()#獲取當(dāng)前日期時(shí)間datetime.datetime(2022,8,12,22,44,23,660206)>>>str(datetime.now())#轉(zhuǎn)換為字符串'2022-08-1222:44:28.549254'>>>str(datetime.now())[:19]#只保留年月日時(shí)分秒'2022-08-1222:44:39'2.3.4類型轉(zhuǎn)換(4)list()、tuple()、dict()、set()#創(chuàng)建空列表、空元組、空字典、空集合,內(nèi)置函數(shù)print()的參數(shù)sep用來(lái)指定相鄰輸出結(jié)果之間的分隔符>>>print(list(),tuple(),dict(),set(),sep=',')[],(),{},set()#創(chuàng)建range(0,10)對(duì)象,其中包含左閉右開(kāi)區(qū)間[0,10)中的整數(shù)>>>data=range(0,10)#把range對(duì)象轉(zhuǎn)換為列表、元組、集合,各占一行>>>print(list(data),tuple(data),set(data),sep='\n')[0,1,2,3,4,5,6,7,8,9](0,1,2,3,4,5,6,7,8,9){0,1,2,3,4,5,6,7,8,9}>>>data=[1,1,2,2,1,3,4]#把列表轉(zhuǎn)換為元組、集合,各占一行,轉(zhuǎn)換為集合時(shí)會(huì)自動(dòng)去除重復(fù)元素>>>print(tuple(data),set(data),sep='\n')(1,1,2,2,1,3,4){1,2,3,4}#列表轉(zhuǎn)換為字符串后再轉(zhuǎn)換為列表,把字符串中每個(gè)字符都作為結(jié)果列表中的元素>>>print(list(str(data)))['[','1',',','','1',',','','2',',','','2',',','','1',',','','3',',','','4',']']#接收關(guān)鍵參數(shù),創(chuàng)建字典>>>print(dict(host='',port=8080)){'host':'','port':8080}#把列表中的每個(gè)(key,value)形式的元組轉(zhuǎn)換為字典中的元素>>>print(dict([('host',''),('port',8080)])){'host':'','port':8080}2.3.4類型轉(zhuǎn)換(5)eval()>>>print(eval('3+4j'))#對(duì)字符串求值得到復(fù)數(shù)(3+4j)>>>print(eval('3.1415926'))#把字符串還原為實(shí)數(shù)3.1415926>>>print(eval('8**2'))#計(jì)算表達(dá)式8**2的值64>>>print(eval('[1,2,3,4,5]'))
#對(duì)字符串求值得到列表[1,2,3,4,5]>>>print(eval('{1,2,3,4}'))
#對(duì)字符串求值得到集合{1,2,3,4}>>>a,b=3,5#序列解包,同時(shí)創(chuàng)建兩個(gè)變量并賦值>>>print(eval('a+b'))
#使用距離最近的變量a和b的值8#使用參數(shù)globals指定a和b的值,不再使用前面定義過(guò)的同名變量>>>print(eval('a+b',{'a':97,'b':98}))195#同時(shí)指定globals和locals參數(shù),locals優(yōu)先起作用>>>print(eval('a+b',{'a':97,'b':98},{'a':1,'b':2}))32.3.5max()、min()>>>data=[3,22,111]>>>print(max(data))
#對(duì)列表中的元素直接比較大小,輸出最大元素111>>>print(min(data))
#返回最小值3#轉(zhuǎn)換成字符串之后最大的元素,key參數(shù)的值可以是任意類型的單參數(shù)可調(diào)用對(duì)象>>>print(max(data,key=str))3#轉(zhuǎn)換成字符串之后長(zhǎng)度最大的元素>>>print(max(data,key=lambdaitem:len(str(item))))111>>>data=['3','22','111']>>>print(max(data))#最大的字符串3>>>print(max(data,key=len))#長(zhǎng)度最大的字符串111#轉(zhuǎn)換為整數(shù)之后各位數(shù)字之和最大的元素>>>print(max(data,key=lambdaitem:sum(map(int,item))))222.3.5max()、min()>>>data=['abc','Abcd','ab']#轉(zhuǎn)換為小寫之后最大的字符串,字符串方法lower()用于轉(zhuǎn)換成小寫>>>print(max(data,key=str.lower))Abcd#最后一個(gè)位置上的字符最大的字符串>>>print(max(data,key=lambdaitem:item[-1]))Abcd>>>data=[1,1,1,2,2,1,3,1]#出現(xiàn)次數(shù)最多的元素,轉(zhuǎn)換為集合是為了進(jìn)行優(yōu)化和減少計(jì)算量,不影響結(jié)果#也可以借助于標(biāo)準(zhǔn)庫(kù)collections中的Counter類實(shí)現(xiàn)>>>print(max(set(data),key=data.count))1#最大元素的位置,看看哪個(gè)位置上的元素最大#列表的特殊方法__getitem__()用于獲取指定位置的值,一般不這樣直接使用>>>print(max(range(len(data)),key=data.__getitem__))62.3.5max()、min()#幾個(gè)集合之間不存在包含關(guān)系#先假設(shè)第一個(gè)最大,后面沒(méi)有發(fā)現(xiàn)比第一個(gè)集合更大的,最終認(rèn)為第一個(gè)最大>>>print(max({1},{2},{3})){1}#幾個(gè)集合之間不存在包含關(guān)系#先假設(shè)第一個(gè)最小,后面沒(méi)有發(fā)現(xiàn)比第一個(gè)集合更小的,最終認(rèn)為第一個(gè)最小>>>print(min({1},{2},{3})){1}#第三個(gè)集合包含第一個(gè)集合,所以第三個(gè)比第一個(gè)更“大”>>>print(max({1},{2},{1,3})){1,3}#第三個(gè)集合是第一個(gè)集合的真子集,所以第三個(gè)比第一個(gè)更“小”>>>print(min({1,5},{2},{1})){1}2.3.6len()、sum()內(nèi)置函數(shù)len(obj,/)用來(lái)計(jì)算列表、元組、字典、集合、字符串等容器類對(duì)象的長(zhǎng)度,也就是其中包含的元素的個(gè)數(shù)。內(nèi)置函數(shù)sum(iterable,/,start=0)用來(lái)計(jì)算有限長(zhǎng)度的可迭代對(duì)象iterable中所有元素之和,要求序列中所有元素類型相同并且支持加法運(yùn)算。第一個(gè)參數(shù)可以是任意類型的可迭代對(duì)象;第二個(gè)參數(shù)start默認(rèn)為0,可以理解函數(shù)sum(iterable,/,start=0)是在start的基礎(chǔ)上逐個(gè)與參數(shù)iterable中的每個(gè)元素相加,一般用于可迭代對(duì)象iterable中元素不是數(shù)值的場(chǎng)合中指定初始值。2.3.6len()、sum()>>>data=[1,2,3,4]>>>print(len(data))#列表中元素的個(gè)數(shù),也適用于元組、字典、集合、字符串4>>>print(sum(data))#列表中所有元素之和10>>>data={97:'a',65:'A',48:'0'}>>>print(sum(data))#sum()函數(shù)的參數(shù)是字典時(shí)默認(rèn)對(duì)字典中的所有“鍵”求和210>>>data=[[1],[2],[3],[4]]>>>print(sum(data))#列表中元素不是數(shù)值,不能直接計(jì)算TypeError:unsupportedoperandtype(s)for+:'int'and'list'#以位置參數(shù)的形式指定第二個(gè)參數(shù)為空列表,相當(dāng)于[]+[1]+[2]+[3]+[4]>>>print(sum(data,[]
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生態(tài)旅游場(chǎng)承包經(jīng)營(yíng)合作協(xié)議范本4篇
- 2025年度大棚農(nóng)業(yè)保險(xiǎn)合作協(xié)議3篇
- 二手房交易標(biāo)準(zhǔn)協(xié)議樣本(2024個(gè)人版)版
- 2025年度叉車租賃與租賃物租賃期限調(diào)整合同4篇
- 2025年昌月離婚協(xié)議書婚姻解除及財(cái)產(chǎn)清算范本4篇
- 2025年度航空航天材料質(zhì)量保證協(xié)議4篇
- 2024年重慶地區(qū)標(biāo)準(zhǔn)離婚合同模板一
- 2024私募股權(quán)投資居間協(xié)議
- 專項(xiàng)舞臺(tái)效果策劃與實(shí)施協(xié)議版A版
- 2024年食堂運(yùn)營(yíng)合作協(xié)議標(biāo)準(zhǔn)文本版
- 考級(jí)代理合同范文大全
- 2024解析:第三章物態(tài)變化-講核心(原卷版)
- DB32T 1590-2010 鋼管塑料大棚(單體)通 用技術(shù)要求
- 安全行車知識(shí)培訓(xùn)
- 2024年安徽省高校分類對(duì)口招生考試數(shù)學(xué)試卷真題
- 第12講 語(yǔ)態(tài)一般現(xiàn)在時(shí)、一般過(guò)去時(shí)、一般將來(lái)時(shí)(原卷版)
- 2024年采購(gòu)員年終總結(jié)
- 2024年新疆區(qū)公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 肺動(dòng)脈高壓的護(hù)理查房課件
- 2025屆北京巿通州區(qū)英語(yǔ)高三上期末綜合測(cè)試試題含解析
- 公婆贈(zèng)予兒媳婦的房產(chǎn)協(xié)議書(2篇)
評(píng)論
0/150
提交評(píng)論