python關(guān)于高級(jí)特性的問題-創(chuàng)新互聯(lián)

1.函數(shù)裝飾器有什么作用?請列舉說明?

創(chuàng)新互聯(lián)專注于青浦企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城系統(tǒng)網(wǎng)站開發(fā)。青浦網(wǎng)站建設(shè)公司,為青浦等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

2. Python 垃圾回收機(jī)制?

3. 魔法函數(shù) _call_怎么使用?

4. 如何判斷一個(gè)對(duì)象是函數(shù)還是方法?

5. @classmethod 和 @staticmethod 用法和區(qū)別

6. Python 中的接口如何實(shí)現(xiàn)?

7. Python 中的反射了解么?

8. metaclass 作用?以及應(yīng)用場景?

9. hasattr()、getattr()、setattr() 的用法

10. 請列舉你知道的 Python 的魔法方法及用途。

11. 如何知道一個(gè) Python 對(duì)象的類型?

12. Python 的傳參是傳值還是傳址?

13. Python 中的元類 (metaclass) 使用舉例

14. 簡述 any() 和 all() 方法

15. filter 方法求出列表所有奇數(shù)并構(gòu)造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

16. 什么是猴子補(bǔ)丁?

17. 在 Python 中是如何管理內(nèi)存的?

18. 當(dāng)退出 Python 時(shí)是否釋放所有內(nèi)存分配?

1.函數(shù)裝飾器有什么作用?請列舉說明?

答: 裝飾器就是一個(gè)函數(shù),它可以在不需要做任何代碼變動(dòng)的前提下給一個(gè)函數(shù)增加額外功能,啟動(dòng)裝飾的效果。 它經(jīng)常用于有切面需求的場景,比如:插入日志、性能測試、事務(wù)處理、緩存、權(quán)限校驗(yàn)等場景。 下面是一個(gè)日志功能的裝飾器

from functools import wraps

def log(label):

def decorate(func):

@wraps(func)

def _wrap(*args,**kwargs):

try:

func(*args,**kwargs)

print("name",func.__name__)

except Exception as e:

print(e.args)

return _wrap

return decorate

@log("info")

def foo(a,b,c):

print(a+b+c)

print("in foo")

#decorate=decorate(foo)

if __name__ == '__main__':

foo(1,2,3)

#decorate()

2.Python 垃圾回收機(jī)制?

答:Python 不像 C++,Java 等語言一樣,他們可以不用事先聲明變量類型而直接對(duì)變量進(jìn)行賦值。對(duì) Python 語言來講,對(duì)象的類型和內(nèi)存都是在運(yùn)行時(shí)確定的。這也是為什么我們稱 Python 語言為動(dòng)態(tài)類型的原因。

主要體現(xiàn)在下面三個(gè)方法:

1.引用計(jì)數(shù)機(jī)制 2.標(biāo)記-清除 3.分代回收

3.魔法函數(shù) _call_怎么使用?

答: call 可以把類實(shí)例當(dāng)做函數(shù)調(diào)用。 使用示例如下

class Bar:

def __call__(self, *args, **kwargs):

print('in call')

if __name__ == '__main__':

b = Bar()

b()

4.如何判斷一個(gè)對(duì)象是函數(shù)還是方法?

答:看代碼及結(jié)果就懂了

from types import MethodType, FunctionType

class Bar:

def foo(self):

pass

def foo2():

pass

def run():

print("foo 是函數(shù)", isinstance(Bar().foo, FunctionType))

print("foo 是方法", isinstance(Bar().foo, MethodType))

print("foo2 是函數(shù)", isinstance(foo2, FunctionType))

print("foo2 是方法", isinstance(foo2, MethodType))

if __name__ == '__main__':

run()

輸出:

foo 是函數(shù) False

foo 是方法 True

foo2 是函數(shù) True

foo2 是方法 False

5.@classmethod 和 @staticmethod 用法和區(qū)別

答:

相同之處:@staticmethod 和@classmethod 都可以直接類名.方法名()來調(diào)用,不用在示例化一個(gè)類。

@classmethod 我們要寫一個(gè)只在類中運(yùn)行而不在實(shí)例中運(yùn)行的方法。如果我們想讓方法不在實(shí)例中運(yùn)行,可以這么做:

def iget_no_of_instance(ins_obj):

return ins_obj.__class__.no_inst

class Kls(object):

no_inst = 0

def __init__(self):

Kls.no_inst = Kls.no_inst + 1

ik1 = Kls()

ik2 = Kls()

print(iget_no_of_instance(ik1))

@staticmethod 經(jīng)常有一些跟類有關(guān)系的功能但在運(yùn)行時(shí)又不需要實(shí)例和類參與的情況下需要用到靜態(tài)方法:

IND = 'ON'

class Kls(object):

def __init__(self, data):

self.data = data

@staticmethod

def check_ind():

return (IND == 'ON')

def do_reset(self):

if self.check_ind():

print('Reset done for:', self.data)

def set_db(self):

if self.check_ind():

self.db = 'New db connection'

print('DB connection made for: ', self.data)

ik1 = Kls(12)

ik1.do_reset()

ik1.set_db()

6.Python 中的接口如何實(shí)現(xiàn)?

答:

接口提取了一群類共同的函數(shù),可以把接口當(dāng)做一個(gè)函數(shù)的集合,然后讓子類去實(shí)現(xiàn)接口中的函數(shù)。但是在 Python 中根本就沒有一個(gè)叫做 interface 的關(guān)鍵字,如果非要去模仿接口的概念,可以使用抽象類來實(shí)現(xiàn)。抽象類是一個(gè)特殊的類,它的特殊之處在于只能被繼承,不能被實(shí)例化。使用 abc 模塊來實(shí)現(xiàn)抽象類。

7.Python 中的反射了解么?

答:Python 的反射機(jī)制設(shè)定較為簡單,一共有四個(gè)關(guān)鍵函數(shù)分別是 getattr、hasattr、setattr、delattr。

8.metaclass 作用?以及應(yīng)用場景?

答:

metaclass 即元類,metaclass 是類似創(chuàng)建類的模板,所有的類都是通過他來 create 的(調(diào)用new),這使得你可以自由的控制創(chuàng)建類的那個(gè)過程,實(shí)現(xiàn)你所需要的功能。 我們可以使用元類創(chuàng)建單例模式和實(shí)現(xiàn) ORM 模式。

9.hasattr()、getattr()、setattr() 的用法

答:無錫婦科醫(yī)院排行 http://www.0510bhyy.com/

這三個(gè)方法屬于 Python 的反射機(jī)制里面的,hasattr 可以判斷一個(gè)對(duì)象是否含有某個(gè)屬性,getattr 可以充當(dāng) get 獲取對(duì)象屬性的作用。而 setattr 可以充當(dāng) person.name = "liming"的賦值操作。代碼示例如下:

class Person():

def __init__(self):

self.name = "liming"

self.age = 12

def show(self):

print(self.name)

print(self.age)

def set_name(self):

setattr(Person, "sex", "男")

def get_name(self):

print(getattr(self, "name"))

print(getattr(self, "age"))

print(getattr(self, "sex"))

def run():

if hasattr(Person, "show"):

print("判斷 Person 類是否含有 show 方法")

Person().set_name()

Person().get_name()

if __name__ == '__main__':

run()

10.請列舉你知道的 Python 的魔法方法及用途。

答:

1 __init__:

類的初始化方法。它獲取任何傳給構(gòu)造器的參數(shù)(比如我們調(diào)用 x = SomeClass(10, ‘foo’) , __init__就會(huì)接到參數(shù) 10 和 ‘foo’ 。 __init__在 Python 的類定義中用的最多。

2 __new__:

__new__是對(duì)象實(shí)例化時(shí)第一個(gè)調(diào)用的方法,它只取下 cls 參數(shù),并把其他參數(shù)傳給 __init__ 。 __new__很少使用,但是也有它適合的場景,尤其是當(dāng)類繼承自一個(gè)像元組或者字符串這樣不經(jīng)常改變的類型的時(shí)候.

3 __del__:

__new__和 __init__是對(duì)象的構(gòu)造器, __del__是對(duì)象的銷毀器。它并非實(shí)現(xiàn)了語句 del x (因此該語

11.如何知道一個(gè) Python 對(duì)象的類型?

答:

可以通過 type 方法

12.Python 的傳參是傳值還是傳址?

答:

Python 中的傳參即不是傳值也不是傳地址,傳的是對(duì)象的引用。

13.Python 中的元類 (metaclass) 使用舉例

答:

可以使用元類實(shí)現(xiàn)一個(gè)單例模式,代碼如下:

class Singleton(type):

def __init__(self, *args, **kwargs):

print("in __init__")

self.__instance = None

super(Singleton, self).__init__(*args, **kwargs)

def __call__(self, *args, **kwargs):

print("in __call__")

if self.__instance is None:

self.__instance = super(Singleton, self).__call__(*args, **kwargs)

return self.__instance

class Foo(metaclass=Singleton):

pass # 在代碼執(zhí)行到這里的時(shí)候,元類中的__new__方法和__init__方法其實(shí)已經(jīng)被執(zhí)行了,而不是在 Foo 實(shí)例化的時(shí)候執(zhí)行。且僅會(huì)執(zhí)行一次。

foo1 = Foo()

foo2 = Foo()

print(foo1 is foo2)

14.簡述 any() 和 all() 方法

答: any(x):判斷 x 對(duì)象是否為空對(duì)象,如果都為空、0、false,則返回 false,如果不都為空、0、false,則返回 true。 all(x):如果 all(x) 參數(shù) x 對(duì)象的所有元素不為 0、’’、False 或者 x 為空對(duì)象,則返回 True,否則返回 False。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:python關(guān)于高級(jí)特性的問題-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://muchs.cn/article46/dhipeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站域名注冊、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管