python選題 牛客Python題目

2021-10-11 00:12:08 字數 2640 閱讀 5839

1. python單下劃線_foo、雙下劃線__foo、__foo__的區別。

"單下劃線" 開始的成員變數叫做保護變數,意思是只有類物件和子類物件自己能訪問到這些變數;

"雙下劃線" 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。

以單下劃線開頭(_foo)的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用「from *** import *」而匯入;以雙下劃線開頭的(__foo)代表類的私有成員;以雙下劃線開頭和結尾的(__foo__)代表python裡特殊方法專用的標識,如 __init__()代表類的建構函式。

2. python中__new__和__init__的區別,說法正確的是? (a b c d)

a.__new__是乙個靜態方法,而__init__是乙個例項方法。

b.__new__方法會返回乙個建立的例項,而__init__什麼都不返回。

c.只有在__new__返回乙個cls的例項時,後面的__init__才能被呼叫。

d.當建立乙個新例項時呼叫__new__,初始化乙個例項時用__init__。

__init__ 方法為初始化方法, __new__方法才是真正的建構函式。

__new__方法預設返回例項物件供__init__方法、例項方法使用。

__init__ 方法為初始化方法,為類的例項提供一些屬性或完成一些動作。

__new__ 方法建立例項物件供__init__ 方法使用,__init__方法定製例項物件。

__new__是乙個靜態方法,而__init__是乙個例項方法。

3. 有如下函式定義,執行結果正確的是?()

def dec(f):

n =3

return f(*args,**kw) * n

@dec

def foo(n):

return n *2

a.foo(2) == 12 b.foo(3) == 12 c.foo(2) == 6 d.foo(3) == 6

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。

6. 下列**的列印結果是 (報錯)。

x =1

def change(a):

x +=1

print x

change(x)

python的變數作用範圍(即legb規則)。是錯在 x+=1,print(x)沒錯。定義在外部的變數是有全域性作用域,但是函式內部未宣告global時,只可讀而不能寫。

7. 如何解釋下面的執行結果? (b)

print 1.2 - 1.0 == 0.2

false

a. python的實現有錯誤

b. 浮點數無法精確表示

c. 布林運算不能用於浮點數比較

d. python將非0數視為false

python 中浮點數的運算存在誤差。1.2 - 1.0的值不是0.2,而是0.19999999999999996。

python 牛客輸入練習

練習位址 基本可以通過sys.stdin來實現讀取輸入 通過判斷len input 當前行長度來跳出程式。缺省會讀取回車,則若是空行接回車,則長度為1 若通過input strip 則可以去除首尾的回車鍵和空格鍵,則此時長度為0。自己的練習記錄 描述 不知道一共多少行,每輸入一行,輸出結果 whil...

牛客網python考題筆記

一,賦值問題 list1 list2 list1 list1 1 5 sum list1 1 list2 1 print sum 5 5 10 賦值 只是複製了新物件的引用,不會開闢新的記憶體空間 賦值就是引用如b a 賦值引用,a 和 b 都指向同乙個物件。a 2 b a b和a理解為引用,a指標...

牛客 獎學金

某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學 排在前面,這樣,每個學生的排序是唯一確定的。...