網(wǎng)站性能檢測評分
注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。
python的類是什么
Python內(nèi)置類型——布爾運(yùn)算 互聯(lián)網(wǎng)視頻課程
python中bool運(yùn)算符按優(yōu)先級順序分別有or、and、not, 其中or、and為短路運(yùn)算符
not先對表達(dá)式進(jìn)行真值測試后再取反
not運(yùn)算符值只有1個表達(dá)式,not先對表達(dá)式進(jìn)行真值測試后再取反,返回的結(jié)果不是True就是False
or、and運(yùn)算符返回的結(jié)果是操作符兩邊的表達(dá)式中的符合邏輯條件的其中一個表達(dá)式的結(jié)果
在其它語言中,比如C#,bool運(yùn)算的結(jié)果肯定也是bool值;但是python中不是這樣的,它返回的是滿足bool運(yùn)算條件的其中一個表達(dá)式的值。
x or y:
若 x為True,則結(jié)果為x;若x為False, 則結(jié)果為y。
x and y:
若 x為False,則結(jié)果為x;若x為True, 則結(jié)果為y。
or、and運(yùn)算符是短路運(yùn)算符
短路運(yùn)算符的意思是,運(yùn)算符左右的表達(dá)式的只有在需要求值的時候才進(jìn)行求值。比如說x or y,python從左到右進(jìn)行求值,先對表達(dá)式x的進(jìn)行真值測試,如果表達(dá)式x是真值,根據(jù)or運(yùn)算符的特性,不管y表達(dá)式的bool結(jié)果是什么,運(yùn)算符的結(jié)果都是表達(dá)式x,所以表達(dá)式y(tǒng)不會進(jìn)行求值。這種行為被稱之為短路特性。
or、and運(yùn)算符可以多個組合使用,使用的時候?qū)⒁源藦淖蟮接疫M(jìn)行短路求值,最后輸入結(jié)果
表達(dá)式x or yand z,會先對x or y進(jìn)行求值,然后求值的結(jié)果再和z進(jìn)行求值,求值過程中依然遵循短路原則。
not運(yùn)算符的優(yōu)先級比or、and高,一起使用的時候,會先計(jì)算not,再計(jì)算or、and的值
not運(yùn)算符的優(yōu)先級比==、!=低,not a == b 會被解釋為 not (a == b), 但是a == not b 會提示語法錯誤。
找工作難?那是你沒選對行業(yè)!
2017年【中公教育】特別推出2017年就業(yè)促進(jìn)計(jì)劃,500萬就業(yè)基金助你成為IT達(dá)人
詳情請戳:http//ujiuye/zt/jycj/?wt.bd=bgz
什么?海量IT學(xué)習(xí)資料白給你都不要?別想了,加群搶:584539956
小白學(xué)Python|Python的變量類型 企業(yè)視頻課程
變量存儲在內(nèi)存中的值。這就意味著在創(chuàng)建變量時會在內(nèi)存中開辟一個空間。
基于變量的數(shù)據(jù)類型,解釋器會分配指定內(nèi)存,并決定什么數(shù)據(jù)可以被存儲在內(nèi)存中。
因此,變量可以指定不同的數(shù)據(jù)類型,這些變量可以存儲整數(shù),小數(shù)或字符。
變量賦值
Python 中的變量賦值不需要類型聲明。
每個變量在內(nèi)存中創(chuàng)建,都包括變量的標(biāo)識,名稱和數(shù)據(jù)這些信息。
每個變量在使用前都必須賦值,變量賦值以后該變量才會被創(chuàng)建。
等號(=)用來給變量賦值。
等號(=)運(yùn)算符左邊是一個變量名,等號(=)運(yùn)算符右邊是存儲在變量中的值。例如:
實(shí)例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-counter = 100# 賦值整型變量miles = 1000.0# 浮點(diǎn)型name = "John"# 字符串printcounterprintmilesprintname
運(yùn)行實(shí)例
以上實(shí)例中,100,1000.0和"John"分別賦值給counter,miles,name變量。
執(zhí)行以上程序會輸出如下結(jié)果:
1001000.0John
多個變量賦值
Python允許你同時為多個變量賦值。例如:
a = b = c = 1
以上實(shí)例,創(chuàng)建一個整型對象,值為1,三個變量被分配到相同的內(nèi)存空間上。
您也可以為多個對象指定多個變量。例如:
a, b, c = 1, 2, "john"
以上實(shí)例,兩個整型對象1和2的分配給變量 a 和 b,字符串對象 "john" 分配給變量 c。
標(biāo)準(zhǔn)數(shù)據(jù)類型
在內(nèi)存中存儲的數(shù)據(jù)可以有多種類型。
例如,一個人的年齡可以用數(shù)字來存儲,他的名字可以用字符來存儲。
Python 定義了一些標(biāo)準(zhǔn)類型,用于存儲各種類型的數(shù)據(jù)。
Python有五個標(biāo)準(zhǔn)的數(shù)據(jù)類型:
Numbers(數(shù)字)
String(字符串)
List(列表)
Tuple(元組)
Dictionary(字典)
Python數(shù)字
數(shù)字?jǐn)?shù)據(jù)類型用于存儲數(shù)值。
他們是不可改變的數(shù)據(jù)類型,這意味著改變數(shù)字?jǐn)?shù)據(jù)類型會分配一個新的對象。
當(dāng)你指定一個值時,Number對象就會被創(chuàng)建:
var1 = 1
var2 = 10
您也可以使用del語句刪除一些對象的引用。
del語句的語法是:
del var1[,var2[,var3[....,varN]]]]
您可以通過使用del語句刪除單個或多個對象的引用。例如:
del var
del var_a, var_b
Python支持四種不同的數(shù)字類型:
int(有符號整型)
long(長整型[也可以代表八進(jìn)制和十六進(jìn)制])
float(浮點(diǎn)型)
complex(復(fù)數(shù))
實(shí)例
一些數(shù)值類型的實(shí)例:
intlongfloatcomplex
1051924361L0.03.14j
100-0x19323L15.2045.j
-7860122L-21.99.322e-36j
0800xDEFABCECBDAECBFBAEl32.3e+18.876j
-0490535633629843L-90.-.6545+0J
-0x260-052318172735L-32.54e1003e+26J
0x69-4721885298529L70.2E-124.53e-7j
長整型也可以使用小寫 l,但是還是建議您使用大寫 L,避免與數(shù)字 1 混淆。Python使用 L 來顯示長整型。
Python 還支持復(fù)數(shù),復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分構(gòu)成,可以用 a + bj,或者 complex(a,b) 表示, 復(fù)數(shù)的實(shí)部 a 和虛部 b 都是浮點(diǎn)型。
Python字符串
字符串或串(String)是由數(shù)字、字母、下劃線組成的一串字符。
一般記為 :
s="a1a2···an"(n>=0)
它是編程語言中表示文本的數(shù)據(jù)類型。
python的字串列表有2種取值順序:
從左到右索引默認(rèn)0開始的,最大范圍是字符串長度少1
從右到左索引默認(rèn)-1開始的,最大范圍是字符串開頭
如果你要實(shí)現(xiàn)從字符串中獲取一段子字符串的話,可以使用變量[頭下標(biāo):尾下標(biāo)],就可以截取相應(yīng)的字符串,其中下標(biāo)是從 0 開始算起,可以是正數(shù)或負(fù)數(shù),下標(biāo)可以為空表示取到頭或尾。
比如:
s = 'ilovepython'
s[1:5]的結(jié)果是love。
當(dāng)使用以冒號分隔的字符串,python返回一個新的對象,結(jié)果包含了以這對偏移標(biāo)識的連續(xù)的內(nèi)容,左邊的開始是包含了下邊界。
上面的結(jié)果包含了s[1]的值l,而取到的最大范圍不包括上邊界,就是s[5]的值p。
加號(+)是字符串連接運(yùn)算符,星號(*)是重復(fù)操作。如下實(shí)例:
實(shí)例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-str = 'Hello World!'printstr# 輸出完整字符串printstr[0]# 輸出字符串中的第一個字符printstr[2:5]# 輸出字符串中第三個至第五個之間的字符串printstr[2:]# 輸出從第三個字符開始的字符串printstr * 2# 輸出字符串兩次printstr + "TEST"# 輸出連接的字符串
以上實(shí)例輸出結(jié)果:
Hello World!Hllollo World!Hello World!Hello World!Hello World!TEST
Python列表
List(列表) 是 Python 中使用最頻繁的數(shù)據(jù)類型。
列表可以完成大多數(shù)集合類的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。它支持字符,數(shù)字,字符串甚至可以包含列表(即嵌套)。
列表用[ ]標(biāo)識,是 python 最通用的復(fù)合數(shù)據(jù)類型。
列表中值的切割也可以用到變量[頭下標(biāo):尾下標(biāo)],就可以截取相應(yīng)的列表,從左到右索引默認(rèn) 0 開始,從右到左索引默認(rèn) -1 開始,下標(biāo)可以為空表示取到頭或尾。
加號+是列表連接運(yùn)算符,星號*是重復(fù)操作。如下實(shí)例:
實(shí)例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-list = ['runoob', 786 , 2.23, 'john', 70.2]tinylist = [123, 'john']printlist# 輸出完整列表printlist[0]# 輸出列表的第一個元素printlist[1:3]# 輸出第二個至第三個元素 printlist[2:]# 輸出從第三個開始至列表末尾的所有元素printtinylist * 2# 輸出列表兩次printlist + tinylist# 打印組合的列表
以上實(shí)例輸出結(jié)果:
['runoob', 786, 2.23, 'john', 70.2]runoob[786, 2.23][2.23, 'john', 70.2][123, 'john', 123, 'john']['runoob', 786, 2.23, 'john', 70.2, 123, 'john']
Python元組
元組是另一個數(shù)據(jù)類型,類似于List(列表)。
元組用"()"標(biāo)識。內(nèi)部元素用逗號隔開。但是元組不能二次賦值,相當(dāng)于只讀列表。
實(shí)例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-tuple = ('runoob', 786 , 2.23, 'john', 70.2)tinytuple = (123, 'john')printtuple# 輸出完整元組printtuple[0]# 輸出元組的第一個元素printtuple[1:3]# 輸出第二個至第三個的元素 printtuple[2:]# 輸出從第三個開始至列表末尾的所有元素printtinytuple * 2# 輸出元組兩次printtuple + tinytuple# 打印組合的元組
以上實(shí)例輸出結(jié)果:
('runoob', 786, 2.23, 'john', 70.2)runoob(786, 2.23)(2.23, 'john', 70.2)(123, 'john', 123, 'john')('runoob', 786, 2.23, 'john', 70.2, 123, 'john')
以下是元組無效的,因?yàn)樵M是不允許更新的。而列表是允許更新的:
實(shí)例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-tuple = ('runoob', 786 , 2.23, 'john', 70.2)list = ['runoob', 786 , 2.23, 'john', 70.2]tuple[2] = 1000# 元組中是非法應(yīng)用list[2] = 1000# 列表中是合法應(yīng)用
Python 字典
字典(dictionary)是除列表以外python之中最靈活的內(nèi)置數(shù)據(jù)結(jié)構(gòu)類型。列表是有序的對象集合,字典是無序的對象集合。
兩者之間的區(qū)別在于:字典當(dāng)中的元素是通過鍵來存取的,而不是通過偏移存取。
字典用"{ }"標(biāo)識。字典由索引(key)和它對應(yīng)的值value組成。
實(shí)例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-dict = {}dict['one'] = "This is one"dict[2] = "This is two"tinydict = {'name': 'john','code':6734, 'dept': 'sales'} printdict['one']# 輸出鍵為'one' 的值printdict[2]# 輸出鍵為 2 的值printtinydict# 輸出完整的字典printtinydict.keys()# 輸出所有鍵printtinydict.values()# 輸出所有值
輸出結(jié)果為:
This is oneThis is two{'dept': 'sales', 'code': 6734, 'name': 'john'}['dept', 'code', 'name']['sales', 6734, 'john']
Python數(shù)據(jù)類型轉(zhuǎn)換
有時候,我們需要對數(shù)據(jù)內(nèi)置的類型進(jìn)行轉(zhuǎn)換,數(shù)據(jù)類型的轉(zhuǎn)換,你只需要將數(shù)據(jù)類型作為函數(shù)名即可。
以下幾個內(nèi)置的函數(shù)可以執(zhí)行數(shù)據(jù)類型之間的轉(zhuǎn)換。這些函數(shù)返回一個新的對象,表示轉(zhuǎn)換的值。
函數(shù)描述
int(x [,base])
將x轉(zhuǎn)換為一個整數(shù)
long(x [,base] )
將x轉(zhuǎn)換為一個長整數(shù)
float(x)
將x轉(zhuǎn)換到一個浮點(diǎn)數(shù)
complex(real [,imag])
創(chuàng)建一個復(fù)數(shù)
str(x)
將對象 x 轉(zhuǎn)換為字符串
repr(x)
將對象 x 轉(zhuǎn)換為表達(dá)式字符串
eval(str)
用來計(jì)算在字符串中的有效Python表達(dá)式,并返回一個對象
tuple(s)
將序列 s 轉(zhuǎn)換為一個元組
list(s)
將序列 s 轉(zhuǎn)換為一個列表
set(s)
轉(zhuǎn)換為可變集合
dict(d)
創(chuàng)建一個字典。d 必須是一個序列 (key,value)元組。
frozenset(s)
轉(zhuǎn)換為不可變集合
chr(x)
將一個整數(shù)轉(zhuǎn)換為一個字符
unichr(x)
將一個整數(shù)轉(zhuǎn)換為Unicode字符
ord(x)
將一個字符轉(zhuǎn)換為它的整數(shù)值
hex(x)
將一個整數(shù)轉(zhuǎn)換為一個十六進(jìn)制字符串
oct(x)
將一個整數(shù)轉(zhuǎn)換為一個八進(jìn)制字符串
歡迎關(guān)注【軟件測試的藝術(shù)】,和小編一起學(xué)習(xí)交流IT技術(shù)。
Python“類”之繼承 流量視頻課程
大家好,今天我們一起聊聊Python“類”之繼承,說到這個題目,其實(shí)我不是特別喜歡,也糾結(jié)了幾個小時,“所有官方的教程里面都是繼承,可我認(rèn)為在某些程度上遺傳更貼切”,文章的封面也選了好久,最終決定了這張親子圖。正式講之前,和大家聊聊這些,我想對于內(nèi)容的理解應(yīng)該會有所幫助。
首先,我們定義一個animal動物的類(就把自己當(dāng)Python界的造物主吧,現(xiàn)在你正在創(chuàng)建animal):
接下來想創(chuàng)造dog,dog也會eat和sleep,于是身為造物主的我們偷懶了,“eat和sleep,animal就有,能不能從它那兒繼承過來”,當(dāng)然可以啊,大家請看:
我們猜猜看,會輸出什么結(jié)果,為什么dog類連初始化函數(shù)也沒有,這樣子可以嗎?大家先看運(yùn)行結(jié)果
dog繼承了animal遺傳給它的eat和sleep方法,并調(diào)用了animal的初始化方法,好吧,這么大的恩情,所以理所應(yīng)當(dāng)?shù)?,dog就是兒子,即子類,animal就是爹,即父類。
創(chuàng)造完dog,于是造物主的我們手又癢癢了,現(xiàn)在著手創(chuàng)建cat吧:
這回,又會有什么輸出結(jié)果呢?
發(fā)現(xiàn)什么沒,cat調(diào)用的是自己的初始化方法和eat方法,這就像拒絕繼承皇位的王子,想靠自己的意志活出不一樣的人生。這在Python里,叫做方法重載,也就是子類根據(jù)自己的需要,重寫父類中的方法。
然后呢,再創(chuàng)造一個會飛的哺乳動物,蝙蝠bat:
bat類繼承自animal類和bird類,在Python里,這叫做多重繼承,就像小孩繼承了父母雙方的基因,既聰明又漂亮;bat類還生成自己獨(dú)特的方法focus,下面我們一起看一下運(yùn)行結(jié)果。
1、繼承語法 class 子類名(父類名1,父類名2,...):
2、子類可以創(chuàng)建自己獨(dú)有的方法
3、方法調(diào)用時,子類先在本類中查找調(diào)用的方法,找不到才去父類中按次序找,即在父類1中找到了就不去父類2中找了,這一點(diǎn)可以從bat類的初始化方法中看出。
4、子類可以重寫繼承自父類中的方法,即方法重載,方法調(diào)用時,優(yōu)先調(diào)用子類中重載過的方法,比如上述代碼中的eat方法。
今天的Python大餐就先到這兒,大家回去好好消化,等著你的會是更美味可口,敬請享用。
十分鐘學(xué)python類,類的特殊方法 行業(yè)視頻課程
探究更多的類屬性,在一些初學(xué)者的教程中,一般很少見。我之所以要在這里也將這部分奉獻(xiàn)出來,就是因?yàn)楸窘坛淌恰癋rom Beginner to Master”。當(dāng)然,不是學(xué)習(xí)了類的更多屬性就能達(dá)到 Master 水平,但是這是通往 Master 的一步,雖然在初級應(yīng)用中,本節(jié)乃至于后面關(guān)于類的屬性用的不很多,但是,這一步邁出去,你就會在實(shí)踐中有一個印象,以后需要用到了,知道有這一步,會對項(xiàng)目有幫助的。俗話說“藝不壓身”。
__dict__
讀者是否思考過一個問題:類或者實(shí)例屬性,在 Python 中是怎么存儲的?或者為什么修改或者增加、刪除屬性,我們能不能控制這些屬性?
用 dir() 來查看一下,發(fā)現(xiàn)不管是類還是實(shí)例,都有很多屬性,這在前面已經(jīng)反復(fù)出現(xiàn),有點(diǎn)見怪不怪了。不過,這里我們要看一個屬性:__dict__,因?yàn)樗且粋€保存秘密的東西:對象的屬性。
為了便于觀察,我將上面的顯示結(jié)果進(jìn)行了換行,每個鍵值對一行。
對于類 Spring 的__dict__屬性,可以發(fā)現(xiàn),有一個鍵'season',這就是這個類的屬性;其值就是類屬性的數(shù)據(jù)。
用這兩種方式都能得到類屬性的值?;蛘哒f Spring.__dict__['season'] 就是訪問類屬性。下面將這個類實(shí)例化,再看看它的實(shí)例屬性:
實(shí)例屬性的__dict__是空的。有點(diǎn)奇怪?不奇怪,接著看:
這個其實(shí)是指向了類屬性中的 Spring.season,至此,我們其實(shí)還沒有建立任何實(shí)例屬性呢。下面就建立一個實(shí)例屬性:
>>> s.season = "the spring of instance"
>>>s.__dict__
{'season': 'the spring of instance'}
這樣,實(shí)例屬性里面就不空了。這時候建立的實(shí)例屬性和上面的那個 s.season 只不過重名,并且把它“遮蓋”了。這句好是不是熟悉?因?yàn)樵谥v述“實(shí)例屬性”和“類屬性”的時候就提到了。現(xiàn)在讀者肯定理解更深入了。
此時,那個類屬性如何?我們看看:
Spring 的類屬性沒有受到實(shí)例屬性的影響。
按照前面的講述類屬性和實(shí)例熟悉的操作,如果這時候?qū)⑶懊娴膶?shí)例屬性刪除,會不會回到實(shí)例屬性s.__dict__為空呢?
果然打回原形。
當(dāng)然,你可以定義其它名稱的實(shí)例屬性,它一樣被存儲到__dict__屬性里面:
誠然,這樣做僅僅是更改了實(shí)例的__dict__內(nèi)容,對 Spring.__dict__無任何影響,也就是說通過 Spring.lang 或者 Spring.__dict__['lang'] 是得不到上述結(jié)果的。
那么,如果這樣操作,會怎樣呢?
在類的__dict__被更改了,類屬性中增加了一個'flower'屬性。但是,實(shí)例的__dict__中如何?
沒有被修改。我也是這么想的,哈哈。你此前這這么覺得嗎?然而,還能這樣:
這個讀者是否能解釋?其實(shí)又回到了前面第一個出現(xiàn) s.season 上面了。
通過上面探討,是不是基本理解了實(shí)例和類的__dict__,并且也看到了屬性的變化特點(diǎn)。特別是,這些屬性都是可以動態(tài)變化的,就是你可以隨時修改和增刪。
屬性如此,方法呢?下面就看看方法(類中的函數(shù))。
結(jié)果跟前面討論屬性差不多,方法 tree 也在__dict__里面呢。
又跟前面一樣。雖然建立了實(shí)例,但是在實(shí)例的__dict__中沒有方法。接下來,執(zhí)行:
在類(3)中有一部分內(nèi)容闡述“數(shù)據(jù)流轉(zhuǎn)”,其中有一張圖,其中非常明確顯示出,當(dāng)用上面方式執(zhí)行方法的時候,實(shí)例 t 與 self 建立了對應(yīng)關(guān)系,兩者是一個外一個內(nèi)。在方法中 self.x = x,將 x 的值給了 self.x,也就是實(shí)例應(yīng)該擁有了這么一個屬性。
果然如此。這也印證了實(shí)例 t 和 self 的關(guān)系,即實(shí)例方法(t.tree('xiangzhangshu'))的第一個參數(shù)(self,但沒有寫出來)綁定實(shí)例 t,透過 self.x 來設(shè)定值,即給 t.__dict__添加屬性值。
換一個角度:
這回方法中沒有將 x 賦值給 self 的屬性,而是直接 return,結(jié)果是:
是不是理解更深入了?
現(xiàn)在需要對 Python 中一個觀點(diǎn):“一切皆對象”,再深入領(lǐng)悟。以上不管是類還是的實(shí)例的屬性和方法,都是符合 object.attribute 格式,并且屬性類似。
當(dāng)你看到這里的時候,要么明白了類和實(shí)例的__dict__的特點(diǎn),要么就糊涂了。糊涂也不要緊,再將上面的重復(fù)一遍,特別是自己要敲一敲有關(guān)代碼。(建議一個最好的方法:用兩個顯示器,一個顯示器看本教程,另外一個顯示器敲代碼。事半功倍的效果。)
需要說明,我們對__dict__的探討還留有一個尾巴:屬性搜索路徑。這個留在后面講述。
不管是類還是實(shí)例,其屬性都能隨意增加。這點(diǎn)在有時候不是一件好事情,或許在某些時候你不希望別人增加屬性。有辦法嗎?當(dāng)然有,請繼續(xù)學(xué)習(xí)。
__slots__
首先聲明,__slots__能夠限制屬性的定義,但是這不是它存在終極目標(biāo),它存在的終極目標(biāo)更應(yīng)該是一個在編程中非常重要的方面:優(yōu)化內(nèi)存使用。
仔細(xì)看看 dir() 的結(jié)果,還有__dict__屬性嗎?沒有了,的確沒有了。也就是說__slots__把__dict__擠出去了,它進(jìn)入了類的屬性。
這里可以看出,類 Spring 有且僅有兩個屬性。
實(shí)例化之后,實(shí)例的__slots__與類的完全一樣,這跟前面的__dict__大不一樣了。
通過類,先賦予一個屬性值。然后,檢驗(yàn)一下實(shí)例能否修改這個屬性:
看來,我們的意圖不能達(dá)成,報(bào)錯信息中顯示,tree 這個屬性是只讀的,不能修改了。
因?yàn)榍懊嬉呀?jīng)通過類給這個屬性賦值了。不能用實(shí)例屬性來修改。只能:
用類屬性修改。但是對于沒有用類屬性賦值的,可以通過實(shí)例屬性:
但此時:
實(shí)例屬性的值并沒有傳回到類屬性,你也可以理解為新建立了一個同名的實(shí)例屬性。如果再給類屬性賦值,那么就會這樣了:
當(dāng)然,此時在給 t.flower 重新賦值,就會爆出跟前面一樣的錯誤了。
這里試圖給實(shí)例新增一個屬性,也失敗了。
看來__slots__已經(jīng)把實(shí)例屬性牢牢地管控了起來,但更本質(zhì)是的是優(yōu)化了內(nèi)存。誠然,這種優(yōu)化會在大量的實(shí)例時候顯出效果。