python 易混地帶

2021-09-01 10:57:19 字數 2765 閱讀 3789

每門程式語言都有易混淆的部分,下面列舉出一些python的易混淆知識點。

== 和 is 的區別在python中,"==" 操作符測試值的相等性; "is"表示式測試物件的一致性,即是否指向同乙個物件。

list1 = [1,('a',3)]

list2 = [1,('a',3)]

list1 == list2, list1 is list2   #(true,false)

說明:list1和list2通過了"=="測試 (他們的值相等,因為它們的所有內容都是相等的),但是is測試卻失敗了(它們是兩個不同的物件,因此有不同的記憶體區域
s1="spam"

s2="spam"

s1 == s2,s1 is s2    #(true,true)

說明:或許你會驚訝,覺得這組得到的結果應該和上組得到的結果一致。事實上,記憶體中只有乙個字串'spam'供s1和s2共享。這個主要是因為在python內部會暫時儲存並重複使用短字串。也就是說當建立短字串的時候會首先到字串的記憶體區域查詢是否已經有該字串相等的值存在,如果有則會指向該記憶體區域,否則重新開闢記憶體。
s1='a b'

s2='a b'

s1 == s2,s1 is s2    #(true,false)

說明:驚訝再次產生,你或許會質疑這不和上組的一樣嘛,為啥結果不一樣了? :-? 其實上組的說明部分已經說了,python只是暫時儲存短字串,像這樣中間有空格的字串和較長的字串,python是不會儲存的。也就是說,像這樣的字串建立時,python會直接開闢記憶體

python中的作用域python 中,乙個變數的作用域總是由在**中被賦值的地方所決定的。import與reload的區別

經典類與新式類的區別在python 2.2中,引入一種新的類,稱為"新式"類,之前提到的類則稱為"經典"類。新式類在語法和行為上,幾乎完全和經典類相容。他們主要的差異在於新式類從內建型別建立子類。如果沒有恰當的內建型別可用,新的內建名稱object就可以作為新式類的超類。

類變數與例項變數的區別當類為self屬性賦值時,會填入例項物件。即,屬性最後會位於例項的屬性命名空間字典內,而不是類的。例項物件的命名空間儲存了資料,會隨例項的不同而不同,而self正是進入其命名空間的鉤子。

>>> class person:

...     def name(self, name):

...         self.name = name

...>>> person.__dict__

>>> p1 = person()

>>> p1.__dict__

{}>>> p1.name('zhangsan')

>>> p1.__dict__

>>> p2 = person()

>>> p2.__dict__

{}>>> p2.name('lisi')

>>> p2.__dict__

>>> person.__dict__

靜態方法、類方法以及例項方法的區別在python 2.2中,在類中定義方法是可能的,不需要例項就能夠呼叫它:靜態方法的運作差不多就像類中的簡單無例項函式,而類方法傳遞的是類而不是例項。名為staticmethod和classmethod的特定的內建函式,必須在類中呼叫,才能使這些方法模式有效。雖然這個功能是伴隨新式類增加的,但靜態和類方法也能用於經典類。定義方式,傳入的引數,呼叫方式都不相同。
>>> class multi:

...   def imeth(self, x):

...     print self, x

...   def smeth(x):

...     print x

...   def cmeth(cls, x):

...     print cls, x

...   smeth = staticmethod(smeth)   #make smeth a static method

...   cmeth = classmethod(cmeth)    #make cmeth a class method

...>>> obj = multi()

>>> obj.imeth(1)       #normal call, through instance

<__main__.multi instance at 0x7fc537cc6170> 1

>>> multi.imeth(obj,2)   #normal call, through class

<__main__.multi instance at 0x7fc537cc6170> 2

>>> multi.smeth(3)    #static call, through class

3>>> obj.smeth(4)      #static call, through instance

4>>> multi.cmeth(5)    #class call, through class

__main__.multi 5

>>> obj.cmeth(6)      #class call, through instance

__main__.multi 6

注: python自動把類(而不是例項)傳入類方法第乙個(最左側)引數中。

C 易混部分

void function int a,unsigned int n void function int p,unsigned int n int a 10 function a,10 int a 10 sizeof a 40 sizeof a 0 4char s 9 cpp prog 正確 cha...

C 的易混概念

靜態多型 過載 根據函式的引數個數和型別區分呼叫的函式。早繫結 動態多型 根據所指物件的虛函式表決定呼叫的函式。晚繫結 函式的覆蓋 過載 隱藏 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無 覆蓋 派生類函式覆蓋基類函式,特徵是...

常用易混方法及其引數

關於動畫的引數 移動動畫 translateanimation float fromxdelta,float toxdelta,float fromydelta,float toydelta translateanimation int fromxtype,float fromxvalue,int ...