以python 3.8.5150.0版本為例,python中eval函數(shù)作用如下:
創(chuàng)新互聯(lián)公司主營(yíng)景泰網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開發(fā),景泰h5微信小程序開發(fā)搭建,景泰網(wǎng)站營(yíng)銷推廣歡迎景泰等地區(qū)企業(yè)咨詢
1、計(jì)算字符串中有效的表達(dá)式,并返回結(jié)果。
2、將字符串轉(zhuǎn)成相應(yīng)的對(duì)象(如list、tuple、dict和string之間的轉(zhuǎn)換)。
3、將利用反引號(hào)轉(zhuǎn)換的字符串再反轉(zhuǎn)回對(duì)象。
參數(shù)解析:
expression:這個(gè)參數(shù)是一個(gè)字符串,python會(huì)使用globals字典和locals字典作為全局和局部的命名空間,將expression當(dāng)作一個(gè)python表達(dá)式進(jìn)行解析和計(jì)算。
globals:這個(gè)參數(shù)控制的是一個(gè)全局的命名空間,也就是我們?cè)谟?jì)算表達(dá)式的時(shí)候可以使用全局的命名空間中的函數(shù),如果這個(gè)參數(shù)被提供了。
并且沒有提供自定義的builtins(python的內(nèi)建模塊),那么會(huì)將當(dāng)前環(huán)境中的builtins拷貝到提供的globals里,然后進(jìn)行計(jì)算。如果globals沒有被提供,則使用python的全局命名空間。
locals:這個(gè)參數(shù)控制的是一個(gè)局部的命名空間,和globals類似,不過(guò)當(dāng)它和globals中有重復(fù)的部分時(shí),locals里的定義會(huì)覆蓋掉globals中的,也就是說(shuō)當(dāng)globals和locals中有沖突的部分時(shí),locals說(shuō)了算,它有決定權(quán),以它的為準(zhǔn)。如果locals沒有被提供的話,則默認(rèn)為globals。
Python
replace()
方法把字符串中的
old(舊字符串)
替換成
new(新字符串),如果指定第三個(gè)參數(shù)max,則替換不超過(guò)
max
次。
語(yǔ)法
str.replace(old,
new[,
max])
參數(shù)
old
--
將被替換的子字符串。
new
--
新字符串,用于替換old子字符串。
max
--
可選字符串,
替換不超過(guò)
max
次
返回值
返回字符串中的
old(舊字符串)
替換成
new(新字符串)后生成的新字符串,如果指定第三個(gè)參數(shù)max,則替換不超過(guò)
max
次。
示例:
1234567str = "this is string example....wow!!! this is really string";print str.replace("is", "was");print str.replace("is", "was", 3); thwas was string example....wow!!! thwas was really stringthwas was string example....wow!!! thwas is really string
9.5. 繼承
當(dāng)然,如果一種語(yǔ)言不支持繼承就,“類”就沒有什么意義。派生類的定義如下所示:
class DerivedClassName(BaseClassName):
命名 BaseClassName (示例中的基類名)必須與派生類定義在一個(gè)作用域內(nèi)。除了類,還可以用表達(dá)式,基類定義在另一個(gè)模塊中時(shí)這一點(diǎn)非常有用:
class DerivedClassName(modname.BaseClassName):
派生類定義的執(zhí)行過(guò)程和基類是一樣的。構(gòu)造派生類對(duì)象時(shí),就記住了基類。這在解析屬性引用的時(shí)候尤其有用:如果在類中找不到請(qǐng)求調(diào)用的屬性,就搜索基類。如果基類是由別的類派生而來(lái),這個(gè)規(guī)則會(huì)遞歸的應(yīng)用上去。
派生類的實(shí)例化沒有什么特殊之處: DerivedClassName() (示列中的派生類)創(chuàng)建一個(gè)新的類實(shí)例。方法引用按如下規(guī)則解析:搜索對(duì)應(yīng)的類屬性,必要時(shí)沿基類鏈逐級(jí)搜索,如果找到了函數(shù)對(duì)象這個(gè)方法引用就是合法的。
派生類可能會(huì)覆蓋其基類的方法。因?yàn)榉椒ㄕ{(diào)用同一個(gè)對(duì)象中的其它方法時(shí)沒有特權(quán),基類的方法調(diào)用同一個(gè)基類的方法時(shí),可能實(shí)際上最終調(diào)用了派生類中的覆蓋方法。(對(duì)于 C++ 程序員來(lái)說(shuō),Python 中的所有方法本質(zhì)上都是 虛 方法。)
派生類中的覆蓋方法可能是想要擴(kuò)充而不是簡(jiǎn)單的替代基類中的重名方法。有一個(gè)簡(jiǎn)單的方法可以直接調(diào)用基類方法,只要調(diào)用: BaseClassName.methodname(self, arguments)。有時(shí)這對(duì)于客戶也很有用。(要注意只有 BaseClassName 在同一全局作用域定義或?qū)霑r(shí)才能這樣用。)
Python 有兩個(gè)用于繼承的函數(shù):
函數(shù) isinstance() 用于檢查實(shí)例類型: isinstance(obj, int) 只有在 obj.__class__ 是 int 或其它從 int 繼承的類型
函數(shù) issubclass() 用于檢查類繼承: issubclass(bool, int) 為 True,因?yàn)?bool 是 int 的子類。
然而, issubclass(float, int) 為 False,因?yàn)?float 不是 int 的子類。
處理屬性的重要屬性和函數(shù)
1、特殊屬性
__class__:對(duì)象所屬類的引用(即obj.__class__和type(obj)的作用相同)。Python中的某些特殊方法比如 __getattr__,只在對(duì)象的類中尋找,而不在實(shí)例中尋找。__dict__:一個(gè)映射,存儲(chǔ)對(duì)象或類的可寫屬性。__slots__:類可以定義這個(gè)屬性,限制實(shí)例有哪些屬性。
2、內(nèi)置函數(shù)
dir([object]):列出對(duì)象的大多數(shù)屬性。getattr(object,name[,default]):從object對(duì)象中獲取name字符串對(duì)應(yīng)的屬性。獲取的屬性可能來(lái)自對(duì)象所屬的類或超類。hasattr(object,name):若object對(duì)象中存在指定的屬性,或者能以某種方式(如繼承)通過(guò)object對(duì)象獲取指定的屬性,返回True。setattr(object,name,value):把object對(duì)象指定屬性的值設(shè)為value,前提是object對(duì)象能接受那個(gè)值。這個(gè)函數(shù)可能會(huì)創(chuàng)建一個(gè)新屬性,或者覆蓋現(xiàn)有的屬性。var([object]):返回object對(duì)象的__dict__屬性。
相關(guān)推薦:《Python視頻教程》
3、特殊方法
__delattr__(self,name):只要使用del語(yǔ)句刪除屬性,就會(huì)調(diào)用這個(gè)方法。__dir__(self):把對(duì)象傳給dir函數(shù)時(shí)調(diào)用,列出屬性。__getattr__(self,name):僅當(dāng)獲取指定的屬性失敗,搜索過(guò)obj,Class和超類之后調(diào)用。__getattribute__(self,name):嘗試獲取指定的屬性時(shí)總會(huì)調(diào)用這個(gè)方法。不過(guò)尋找的屬性是特殊屬性或特殊方法時(shí)除外。為了防止無(wú)限遞歸,__getattribute__方法的實(shí)現(xiàn)要使用super().__getattribute__(obj,name)。__setattr__(self,name,value):嘗試設(shè)置指定的屬性時(shí)總會(huì)調(diào)用這個(gè)方法。點(diǎn)號(hào)和setattr內(nèi)置函數(shù)會(huì)觸發(fā)這個(gè)方法。
相關(guān)推薦:
Python中的屬性和特性是什么