1. python單下劃線_foo、雙下劃線__foo、__foo__的區別。
"單下劃線" 開始的成員變量叫作保護變量,意思是隻有類對象和子類對象本身能訪問到這些變量;
"雙下劃線" 開始的是私有成員,意思是隻有類對象本身能訪問,連子類對象也不能訪問到這個數據。java
以單下劃線開頭(_foo)的表明不能直接訪問的類屬性,需經過類提供的接口進行訪問,不能用「from xxx import *」而導入;以雙下劃線開頭的(__foo)表明類的私有成員;以雙下劃線開頭和結尾的(__foo__)表明python裏特殊方法專用的標識,如 __init__()表明類的構造函數。python
2. python中__new__和__init__的區別,說法正確的是? (A B C D)
A.__new__是一個靜態方法,而__init__是一個實例方法。app
B.__new__方法會返回一個建立的實例,而__init__什麼都不返回。函數
C.只有在__new__返回一個cls的實例時,後面的__init__才能被調用。spa
D.當建立一個新實例時調用__new__,初始化一個實例時用__init__。 code
__init__ 方法爲初始化方法, __new__方法纔是真正的構造函數。 對象
__new__方法默認返回實例對象供__init__方法、實例方法使用。 blog
__init__ 方法爲初始化方法,爲類的實例提供一些屬性或完成一些動做。 接口
__new__ 方法建立實例對象供__init__ 方法使用,__init__方法定製實例對象。 作用域
__new__是一個靜態方法,而__init__是一個實例方法。
def dec(f):
n =
3
def wrapper(*args,**kw):
return
f(*args,**kw) * n
return
wrapper
@dec
def foo(n):
return
n *
2
A.foo(2) == 12 B.foo(3) == 12 C.foo(2) == 6 D.foo(3) == 6
@dec 的做用是把原 foo 函數(待裝飾函數)賦值給 dec 函數(裝飾器),而後將返回值 wrapper 函數(已裝飾函數)從新賦值給 foo 函數。所以,foo 語句實際執行狀況是:foo(2) = foo(2) * 3 = 2 * 2 * 3 = 12,其中前面的 foo 函數是已裝飾函數,後面的 foo 函數是原來的待裝飾函數。By the way,函數參數中的 *args 表明可變參數,**kw 表明關鍵字參數。
4. 裝飾器執行順序。
def decorator_a(func): print 'Get in decorator_a' def inner_a(*args, **kwargs): print 'Get in inner_a' return func(*args, **kwargs) return inner_a def decorator_b(func): print 'Get in decorator_b' def inner_b(*args, **kwargs): print 'Get in inner_b' return func(*args, **kwargs) return inner_b @decorator_b @decorator_a def f(x): print 'Get in f' return x * 2 f(1)
實際上運行的結果以下:
Get in decorator_a Get in decorator_b Get in inner_b Get in inner_a Get in f
4.下列代碼 [i**i for i in xrange(3)] 的執行結果是(A)
A.[1, 1, 4] B.[0, 1, 4] C.[1, 2, 3] D.(1, 1, 4)
(1)這是一個列表生成式,即對於生成器 xrange(3) 中的每一個值(分別是0,1,2),賦值給變量 i
,而後執行 i**i
的操做。
(2)xrange() 與 range() 的用法徹底相同,區別是 xrange() 的返回值是生成器,而 range() 的返回值是列表。(Python3 range即爲原來的xrange)
(3)Python 中的 **
運算表明冪運算,但有個特殊狀況,官方文檔中把 0**0
的值定義爲 1
。
5. 'a' < 'b' < 'c' 返回(True)。('a' > 'b' or 'c') 返回 ('c')。
Python 支持連續比較,'a' < 'b' < 'c' 至關於 'a' < 'b' and 'b' < 'c',其本質是字符 ASCII 碼的大小比較,該判斷式結果爲 True。
x =
1
def change(a):
x +=
1
print x
change(x)
print 1.2 - 1.0 == 0.2
False