導航:首頁 > 編程語言 > python把特殊變為一般

python把特殊變為一般

發布時間:2022-12-16 02:20:54

A. python中的幾種特殊數據類型小結

下面介紹了Python中的6種特殊數據類型:

1.list:列表

是一種有序的數據集合,在列表數據結構中的類型並不唯一

定義形式:L=['Micha',100,True]

輸出整個列表的時候顯示為['Micha',100,True]

輸出單個的數值則為:Micha

a.訪問,直接使用L[0]表示第一個元素或者使用L[-1]表示最後一個數據,以此類推,但是注意訪問不能越界(訪問的序號不能超過元素的總數)。

b.添加新元素:使用L.append(100)直接將100加入列表末尾,或者使用L.insert(0,'paul')將paul插入任意位置。

c.刪除元素:L.pop()刪除最後一個元素,或者L.pop(2)刪除第2個位置的元素。

d.替換元素:直接賦值就可以了L[2]=100

2.tuple:元組

是一種有序的列表,但是其一旦創立完畢就不能夠更改,即不能插入,刪除裡面的元素,訪問的方式跟List結構一致。

a.t=()其列印後輸出的形式是()

若t中的數據為一個數字則需要在後面加逗號,以區分普通數字,如t=(1,),列印出(1,)而非1,多元素的話則沒有這個要求。

b.可以在不變的tuple中加入可變的List如t=(『a』,'b',['A','B'])

3.dict:字典

d = {

'Adam': 95,

'Lisa': 85,

'Bart': 59

}

len()函數可以計算任意集合的大小

其中可以簡單地使用d[key]的形式來查找對應的value,這和list很像,不同之處是,list必須使用索引返回對應的元素,而dict使用key,當key不存在的時候,使用該key可能出現錯誤,因此:要避免KeyError發生,有兩個辦法:

一是先判斷一下key是否存在,用in操作符:

if'Paul' in d:

print d['Paul']

如果'Paul'不存在,if語句判斷為False,自然不會執行print d['Paul'],從而避免了錯誤。

二是使用dict本身提供的一個get方法,在Key不存在的時候,返回None:

>>>print d.get('Bart')

59

a.dict中的key不能重復,且dict中的存儲的對應值沒有順序,列印出的東西可能是無序的

b.dict的更新:使用d[『paul']=72求解

c.dict遍歷:

d = {'Adam': 95, 'Lisa': 85, 'Bart': 59 }

>>>for key in d:

...print key

遍歷只能獲得key的值,需要通過key值獲得對應的value

4.set:集合

無序但是所有元素唯一,不重復

a.定義:s = set(['A', 'B', 'C']),查看set的內容:

>>>print s

set(['A','C', 'B'])

可以用in來判斷是否存在於集合中

b.遍歷

s =set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])

for xin s:

print x[0]+':',x[1]

c.添加元素到集合中

s.add(4)

d.刪除元素

s.remove(4)若該元素不在集合中將會報錯

5.Unicode編碼

Python在後來添加了對Unicode的支持,以Unicode表示的字元串用u'...'表示,比如:

printu'中文'

注意:不加u,中文就不能正常顯示中文。

a.轉義形式:u'中文 日文 韓文'

b.輸出多行:

u'''第一行

第二行'''

c.raw+多行的形式:

ur'''Python的Unicode字元串支持"中文",

"日文",

"韓文"等多種語言'''

如果中文字元串在Python環境下遇到UnicodeDecodeError,這是因為.py文件保存的格式有問題。可以在第一行添加註釋

# -*-coding: utf-8 -*-

目的是告訴Python解釋器,用UTF-8編碼讀取源代碼。然後用Notepad++另存為, 並選擇UTF-8格式保存。

6.raw的作用

如果一個字元串包含很多需要轉義的字元,對每一個字元都進行轉義會很麻煩。為了避免這種情況,我們可以在字元串前面加個前綴r,表示這是一個「raw」字元串,裡面的字元就不需要轉義了。例如:

r'(~_~)//'

但是r'...'表示法不能表示多行字元串,也不能表示包含'和"的字元串,如果要表示多行字元串。

B. Python變形

1.長寬表的變形

什麼是長表?什麼是寬表?這個概念是對於某一個特徵而言的。例如:一個表中把性別存儲在某一個列中, 那麼它就是關於性別的長表;如果把性別作為列名,列中的元素是某一其他的相關特徵數值,那麼這個表是 關於性別的寬表。

1.1 pivot

pivot 是一種典型的長表變寬表的函數。對於一個基本的長變寬的操作而言,最重要的有三個要素,分別是變形後的行索引、需要轉到列索引的列, 以及這些列和行索引對應的數值,它們分別對應了 pivot 方法中的 index, columns, values 參數。新生成表的 列索引是 columns 對應列的 unique 值,而新表的行索引是 index 對應列的 unique 值,而 values 對應了想 要展示的數值列。

利用 pivot 進行變形操作需要滿足唯一性的要求,即由於在新表中的行列索引對應了唯一的 value ,因此原 表中的 index 和 columns 對應兩個列的行組合必須唯一。例如,現在把原表中第二行張三的數學改為語文就 會報錯,這是由於 Name 與 Subject 的組合中兩次出現 (」San Zhang」, 」Chinese」) ,從而最後不能夠確定到 底變形後應該是填寫 80 分還是 75 分。

pandas 從 1.1.0 開始,pivot 相關的三個參數允許被設置為列表,這也意味著會返回多級索引。這里構造一 個相應的例子來說明如何使用:下表中六列分別為班級、姓名、測試類型(期中考試和期末考試)、科目、成 績、排名。

根據唯一性原則,新表的行索引等價於對 index 中的多列使用 drop_plicates ,而列索引的長度為 values 中的元素個數乘以 columns 的唯一組合數量(與 index 類似)。

1.2 pivot_table

pivot 的使用依賴於唯一性條件,那如果不滿足唯一性條件,那麼必須通過聚合操作使得相同行列組合對應 的多個值變為一個值。例如,張三和李四都參加了兩次語文考試和數學考試,按照學院規定,最後的成績是 兩次考試分數的平均值,此時就無法通過 pivot 函數來完成。

1.3 melt

長寬表只是數據呈現方式的差異,但其包含的信息量是等價的,前面提到了利用 pivot 把長表轉為寬表,那 么就可以通過相應的逆操作把寬表轉為長表,melt 函數就起到了這樣的作用。

1.4 wide_to_long

melt 方法中,在列索引中被壓縮的一組值對應的列元素只能代表同一層次的含義,即 values_name 。現在 如果列中包含了交叉類別,比如期中期末的類別和語文數學的類別,那麼想要把 values_name 對應的 Grade 擴充為兩列分別對應語文分數和數學分數,只把期中期末的信息壓縮,這種需求下就要使用 wide_to_long 函數來完成。

2 索引的變形

2.1 stack 與 unstack

unstack 函數的作用是把行索引轉為列索引

unstack 的主要參數是移動的層號,默認轉化最內層,移動到列索引的最內層,同時支持同時轉化多個層

類似於 pivot 中的唯一性要求,在 unstack 中必須保證 被轉為列索引的行索引層和 被保留的行索引層構成 的組合是唯一的,例如把前兩個列索引改成相同的破壞唯一性,那麼就會報錯

與 unstack 相反,stack 的作用就是把列索引的層壓入行索引,其用法完全類似。

2.2 聚合與變形的關系

在上面介紹的所有函數中,除了帶有聚合效果的 pivot_table 以外,所有的函數在變形前後並不會帶來 values 個數的改變,只是這些值在呈現的形式上發生了變化。在上一章討論的分組聚合操作,由於生成了新的行列 索引,因此必然也屬於某種特殊的變形操作,但由於聚合之後把原來的多個值變為了一個值,因此 values 的 個數產生了變化,這也是分組聚合與變形函數的最大區別。

3 其他變形函數

3.1 crosstab

crosstab 並不是一個值得推薦使用的函數,因為它能實現的所有功能 pivot_table 都能完成,並且速度更快。 在默認狀態下,crosstab 可以統計元素組合出現的頻數,即 count 操作。例如統計 learn_pandas 數據集中 學校和轉系情況對應的頻數

3.2 explode

explode 參數能夠對某一列的元素進行縱向的展開,被展開的單元格必須存儲 list, tuple, Series, np.ndarray 中的一種類型。

3.3 get_mmies

get_mmies 是用於特徵構建的重要函數之一,其作用是把類別特徵轉為指示變數。例如,對年級一列轉為 指示變數,屬於某一個年級的對應列標記為 1,否則為 0

C. Python 數據模型

Python 風格的關鍵完全體現在 Python 的數據模型上,數據模型所描述的 API ,為使用最地道的語言特性來構建開發者自己的對象提供了工具。

當 Python 解析器遇到特殊句法時,會使用特殊方法去激活一些基本的對象操作。特殊方法以雙下劃線開頭,以雙下劃線結尾。如: obj[key] 的背後就是 __getitem__ 方法。魔術方法是特殊方法的昵稱,特殊方法也叫雙下方法。

使用 __getitem__ 和 __len__ 創建一摞有序的紙牌:

上面的例子,使用 collections.namedtuple 構建了一個簡單的類來表示一張紙牌, namedtuple 用以構建只有少數屬性但沒有方法的類。

我們自定義的 FrenchDeck 類可以像任何 python 標准集合類型一樣使用 len() 函數,查看一疊牌有多少張:

也可以像列表一樣,使用位置索引, d[i] 將調用 __getitem__ 方法:

也可以使用標准庫模塊提供的 random.choice 方法,從序列中隨機選取一個元素。下面,我們如隨機取出一張紙牌:

現在我們已經體會到通過 python 特殊方法,來使用 Python 數據模型的 2 個好處:

因為 __getitem__ 方法把 [] 操作交給了 self.cards 列表,所以我們的 FrenchDeck 實例自動支持切片:

僅僅實現了 __getitem__ 方法,這一摞牌即變得可迭代:

運行結果:

也可以直接調用內置的 reversed 函數,反向迭代 FrenchDeck 實例:

運行結果:

迭代通常是隱式的,比如一個集合類型沒有實現 __contains__ 方法,那麼 in 運算符就會按順序做一次迭代搜索。

因此, in 運算符可以用在我們的 FrenchDeck 實例上,因為它是可迭代的:

FrenchDeck 還可以使用 Python 標准庫中的 sorted 函數,實現排序:

首先定義一個排序依據的函數:

優先按 rank 的大小排序,rank 相同時則比較 suit 的值:

運行結果:

優先按 suit 的大小排序,suit 相同時則比較 rank 的值:

運行結果:

按照目前的設計,FrenchDeck 還不支持洗牌,因為它是不可變的:

shuffle 函數要調換集合中元素的位置,而 FrenchDeck 只實現了不可變的序列協議,可變的序列還必須提供 __setitem__ 方法:

洗牌:

沒有任何的返回值,可見 random.shuffle 就地修改了可變序列 d 。為便於觀察結果,我們定義輸入的輸出函數:

運行結果:

每次洗牌,都是一個隨機的序列:

首先明確一點,特殊方法的存在是為了被 Python 解析器調用的,例如:我們不會使用 obj.__len__() 這種寫法,而是 len(obj) 。在執行 len(obj) 時,如果 obj 是一個自定義類的對象,那麼 Python 會自己去調用我們實現的 __len__ 方法。

對於 Python 內置的數據類型,比如列表、字元串、位元組序列等,那麼 CPython 會抄個近路, __len__ 實際上會返回 PyVarObject 里的 ob_size 屬性,這是因為直接讀取屬性比調用一個方法要快得多。

很多時候,特殊方法的調用是隱式的,比如 for i in x: 這個語句其實是調用 iter(x) ,而這個函數的背後是 x.__iter__() 方法。

通過內置函數如來使用特殊方法是最好的選擇。這些內置函數不僅會調用這些方法,通常還提供額外的好處,對於內置類型來說,它們的速度更快。

下面,我們通過定義一個簡單的二維向量類,再來體會一下 Python 特殊方法的美妙:

使用 Vector 類,就像使用 Python 內置的數據類型一樣簡單:

D. Python3 & 基本數據類型(一)

Python提供的基本數據類型:數值(整型、浮點型、復數、布爾型等)、字元串、列表、元組、字典、集合等,將它們簡單分類如下:

通常被稱為整型,數值為正或者負,不帶小數點。
Python 3的整型可以當做Long類型使用,所以Python 3沒有
Python 2的Long類型。
Python 初始化的時候會自動建立一個小整數對象池,方便我們調用,避免後期重復生成!這是一個包含 262個指向整數對象的指針數組,范圍是 -5 到 256 。

Python的浮點數就是數學中的小數,類似C語言中的double。
浮點數 也就是小數,如 1.23 , 3.14 , -9.01 等等。但是對於很大或很小的浮點數,一般用科學計數法表示,把10用e替代, 1.23x10^9 就是 1.23e9 ,或者 12.3e8 , 0.000012 可以寫成1.2e-5 等等。

復數 由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示,復數的實部a和虛部b都是浮點。

對 與 錯 、 0 和 1 、 正 與 反 ,都是傳統意義上的布爾類型。
但在Python語言中,布爾類型只有兩個值, True 與 False 。請注意,是英文單詞的對與錯,並且首字母要大寫。
在Python中,0、0.0、-0.0、None、空字元串「」、空元組()、空列表[]、空字典{}都被當作False,還有自定義類型,如果實現了 nonzero ()或 len ()方法且方法返回0或False,則其實例也被當作False,其他對象均為True

布爾值還可以用and、or和not運算。
1)、and 運算是 與 運算,只有所有都為 True , and 運算的結果才是 True ;
2)、or 運算是 或 運算,只要其中有一個為 True , or 運算結果就是 True ;
3)、not 運算是 非 運算,它是單目運算符,把 True 變成 False,False 變成 True。
例如:

由以上案例可以看出,在做四則運算的時候,明顯把 True 看做 1 , False 看做 0 。

4)空值
空值不是布爾類型,只不過和布爾關系比較緊密。
空值是Python里一個特殊的值,用 None 表示(首字母大寫)。None不能理解為0,因為0是整數類型,而None是一個特殊的值。None也不是布爾類型,而是NoneType。

在某些特定的情況下,需要對數字的類型進行轉換。
Python提供了內置的數據類型轉換函數:
int(x) 將x轉換為一個整數。如果x是一個浮點數,則截取小數部分。
float(x) 將x轉換成一個浮點數。
complex(x) 將x轉換到一個復數,實數部分為 x,虛數部分為 0。
complex(x, y): 將 x 和 y 轉換到一個復數,實數部分為 x,虛數部分為 y。

Python字元串即可以用單引號也可以用雙引號括起來,甚至還可以用三引號括起來,字元串是以''或""括起來的任意文本。
例如:'abc',"xyz"等等。請注意,''或""本身只是一種表示方式,不是字元串的一部分,因此,字元串'abc'隻有a,b,c這3個字元。如果'本身也是一個字元,那就可以用""括起來,比如"I'm OK"包含的字元是I,',m,空格,O,K這6個字元。
字元串中包括特殊字元,可以用轉義字元來標識
但是字元串裡面如果有很多字元都需要轉義,就需要加很多,為了簡化,Python還允許用r''表示''內部的字元串默認不轉義
例如:
print r'\ \' #輸出:\ \

字元串的一些常見操作

切⽚是指對操作的對象截取其中⼀部分的操作
語法:序列[開始位置下標:結束位置下標:步⻓]
a. 不包含結束位置下標對應的數據, 正負整數均可;
b. 步⻓是選取間隔,正負整數均可,默認步⻓為1。

find():檢測某個⼦串是否包含在這個字元串中,如果在返回這個⼦串開始的位置下標,否則則返回-1。
index():檢測某個⼦串是否包含在這個字元串中,如果在返回這個⼦串開始的位置下標,否則則報異常。
rfind(): 和find()功能相同,但查找⽅向為右側開始。
rindex():和index()功能相同,但查找⽅向為右側開始。
count():返回某個⼦串在字元串中出現的次數。

replace():替換
split():按照指定字元分割字元串。
join():⽤⼀個字元或⼦串合並字元串,即是將多個字元串合並為⼀個新的字元串。
capitalize():將字元串第⼀個字元轉換成⼤寫。
title():將字元串每個單詞⾸字⺟轉換成⼤寫。
lower():將字元串中⼤寫轉⼩寫。
upper():將字元串中⼩寫轉⼤寫。
lstrip():刪除字元串左側空⽩字元。
rstrip():刪除字元串右側空⽩字元。
strip():刪除字元串兩側空⽩字元。
ljust():返回⼀個原字元串左對⻬,並使⽤指定字元(默認空格)填充⾄對應⻓度 的新字元串。
rjust():返回⼀個原字元串右對⻬,並使⽤指定字元(默認空格)填充⾄對應⻓度 的新字元串,語法和
ljust()相同。
center():返回⼀個原字元串居中對⻬,並使⽤指定字元(默認空格)填充⾄對應⻓度 的新字元串,語
法和ljust()相同。

所謂判斷即是判斷真假,返回的結果是布爾型數據類型:True 或 False。

startswith():檢查字元串是否是以指定⼦串開頭,是則返回 True,否則返回 False。如果設置開
始和結束位置下標,則在指定范圍內檢查。
endswith()::檢查字元串是否是以指定⼦串結尾,是則返回 True,否則返回 False。如果設置開
始和結束位置下標,則在指定范圍內檢查。
isalpha():如果字元串⾄少有⼀個字元並且所有字元都是字⺟則返回 True, 否則返回 False。
isdigit():如果字元串只包含數字則返回 True 否則返回 False。
isalnum():如果字元串⾄少有⼀個字元並且所有字元都是字⺟或數字則返 回 True,否則返回
False。

E. Python魔法函數(特殊函數)

Python中如何實現運算符的重載,即實現例如a+b這樣的運算符操作呢?

在C++中可以使用 operator 關鍵字實現運算符的重載。但是在Python中沒有類似這樣的關鍵字,所以要實現運算符的重載,就要用到Python的魔法函數。Python魔法函數是以雙下劃線開頭,雙下劃線結尾的一組函數。我們在類定義中最常用到的 __init__ 函數就是這樣一個魔法函數,它在創建類對象時被自動調用。

下面我們來看個簡單的例子。

上述代碼示例了幾個魔法函數的用法。 __add__ 函數對應了二元運算符+,當執行a+b語句時,python就會自動調用a. add (b)。 對於上述例子中的v1+v2+v3,則相當於調用了(v1. add(v2)). add(v3)。

代碼中還有一個在Python類定義經常使用的 __str__ 函數,當使用 str() 時會被調用。print函數對傳入的參數都調用了str()將其轉換成易讀的字元串形式,便於列印輸出,因而會調用類定義的__str__函數打出自定義的字元串。

代碼中還有一個特殊的 __call__ 函數,該函數在將對象採用函數調用方式使用時被調用, 例如v1()相當於v1. call ()。

以上就是魔法函數的基本使用方法。常見的魔法函數我們可以使用 dir() 函數來查看。

輸出結果為:

上述結果中形式為『__函數名__』的函數為魔法函數,注意有些對象也是這種形式,例如__class__, __mole__等, 這些不是魔法函數。具體的魔法函數說明可以參考Python官方說明文檔。

以上代碼在Python3.6運行通過.

F. python特殊符號的更改,替換

def secname(name):

    SecName = name.replace('/', '')

    SecName = SecName.replace('*', '')

    SecName = SecName.replace('<', '(')

    SecName = SecName.replace('>', ')')

    SecName = SecName.replace('"', '')

    SecName = SecName.replace(':', '-')

    SecName = SecName.replace('\\', '')

    SecName = SecName.replace('|', '')

    SecName = SecName.replace('?', '')

    return SecName

G. Python編程語言有何特殊性

從理論上來說,只要有合適的硬體驅動和API,編程語言都是可以做任何開發的,只有合不合適的問題。

先說一下編程語言的老大哥C/C++,這是很多人最開始學習的兩門語言,C/C++的特點就是效率高,基本上是所有編程語言里效率最高的,而且一般系統中都具備C/C++編譯器;

目前,C語言主要用來開發底層模塊,服務應用和嵌入式應用,比如驅動、解碼器、演算法實現、Web伺服器等;

當然C++也可以做這些,不過由於C++的復雜性和標准問題,程序員還是更願意使用C來做,C++更適合比較復雜但又特別需要高效率的程序,比如大型游戲、基礎庫、大型桌面應用等。

再來說說Java,這是一門歷史悠久的編程語言,可謂是很多Web應用程序、桌面程序、操作系統的立足之本,多年來霸佔著編程語言排行榜的榜首;Java具備一些很好的語言特性,以及豐富的框架,在企業應用中備受青睞,因為Java能做的東西很多,游戲、網站都不在話下,在手機領域也有一席之地;尤其是智能手機爆發之後,Java的手機主場就變成了Android,一度作為Android的標准開發編程語言而存在。

然後來說說PHP,這是一種被廣泛應用的開源通用腳本語言,適用於Web開發並且可嵌入到HTML中,主要目標就是允許Web開發人員快速編寫動態生成的Web頁面,但PHP的用途遠不只是這些,PHP還包含了命令列執行介面和產生圖形使用者介面程式。

最後來說說我們的重頭戲,Python語言。這對於初學者來說是一個入門級編程語言,由於具有豐富和強大的庫,又被叫做膠水語言,能夠把其他語言製作的各種模塊很輕松地聯結在一起。

關於Python編程語言有何特殊性,環球青藤小編就和大家分享到這里了,學習是永無止境的,學習一項技能更是受益終身,所以,只要肯努力學,什麼時候開始都不晚。如果您還想繼續了解關於python編程的學習方法及素材等內容,可以點擊本站其他文章學習。

H. python字元串(特殊字元,取值,常用方法)

1.字元串
特殊字元串
\n:換行
\r:刪除\r前面的字元
\t:製表符

例如:
s_1 = "人生苦短,\n我選Python!"
s_2 = "人生苦短,\r我選Python!"
s_3 = "人生苦短,\t我選Python!"
print(s_1) # 人生苦短,

print(s_2) # 我選Python
print(s_3) # 人生苦短, 我選Python!

遇到特殊字元,想去掉效果,把特殊字元轉成普通字元
可以使用# r R
s_1 =r "人生苦短,\n我選Python!"
s_2 =R "人生苦短,\r我選Python!"
s_3 = "人生苦短,\t我選Python!"

2.字元串取值
特點:取頭不取尾,正序從0開始,倒序從-1開始
[start:end:step] #step:表示間隔
s='hello python lemon'
print(s[6:12:1]) #正序 python 6,7,8,9,10,11
print(s[-12:-6:1]) # 倒序 python -12,-11,-10,-9,-8,-7
print(s[:])#hello python lemon 從頭取到尾 [:]
print(s[6:]) #python lemon 從6取到尾 [start:]
print(s[:17])# [:end] 從開始取到16
獲取s所有的偶數位的字母
print(s[0:17:2])
獲取s所有的奇數位的字母
print(s[1:18:2])
倒序輸出所有的字母
print(s[17::-1]) # 不可以寫出是s[17:-1:-1] or s[17:0:-1]

3.常用方法
find() : 返回-1表示未找到子字元串,找到會返回對應字元的索引,子字元包含單個字元或多個字元
isdigit():判斷是否全部是數字,是返回True,否返回False
replace(要替換的內容:替換的內容:替換的次數):指定替換內容以及被替換的字元串,並可以指定替換次數,默認是全部替換
split(指定字元,指定切割的次數):根據指定字元對字元串進行切割,默認全部切割
strip():去掉頭和尾指定的字元
upper():字元串的字母轉成大寫
lower():字元串的字母轉成小寫
swapcase():字元串的字母大小互換
例如:
s='learn python in lemon'
print(s.find('n')) #返回找到字元串的索引
print(s.find(python))#返回找到的子字元串的第一個索引值--6
print(s.find('k')) # 返回-1
print(s.find('o',11))#從索引值為11的值開始找---19

print(s.isdigit())# 返回False
s1 = "******learn python*****"
print(s.strip("*"))# learn python

I. python中特殊字元的替換

1、用字元串本身的replace方法

復制代碼代碼如下:

a.replace('word','python')

輸出的結果是hello python
2、用正則表達式來完成替換:

復制代碼代碼如下:

import re
strinfo = re.compile('word')
b = strinfo.sub('python',a)
print b

輸出的結果也是hello python
至於用哪個方法的話,看你自己的選擇了。

J. python元編程中一些處理屬性的特殊方法

在用戶自己定義的類中,下述特殊方法用於獲取、設置、刪除和列出屬性
使用點號,或者內置的的getattr,hasattr, setattr函數存取屬性都會觸發下述列表中的特殊方法。但是,直接通過實例的 __dict__ 屬性來存取方法不會觸發這些特殊方法。所以,如果需要,在一些情況下,可以使用這種方法跳過特殊方法。
示例,假設有個名為 Class 的類,obj 是 Class 類的實例,attr 是 obj 的屬性。
obj.attr 和 getattr(obj, 'attr', 42)都會觸發 Class.__getattribute__(obj, 'attr') 方法。嘗試獲取指定屬性時總會調用這個方法,不過,尋找的屬性時特殊屬性或者特殊方法時除外。
del obj.attr 語句會觸發 Class.__delattr__(obj, 'attr') 方法。
dir(obj)語句會觸發 Class.__dir__(obj) 方法。
僅當獲取指定的屬性失敗,搜索過 obj、Class 和超類之後調用 Class.__getattr__(self, name)
嘗試設置指定的屬性時總會調用 Class.__setattr__(obj, 'attr', value) ,點號和setattr(obj, 'attr', 42)會調用這個方法。

閱讀全文

與python把特殊變為一般相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163