国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

「Python面試」第一次更新

scq000 / 1728人閱讀

摘要:外部作用域變量,常見于閉包函數(shù),也就是嵌套函數(shù)中的上一層函數(shù)變量。其生命周期在整個(gè)閉包函數(shù)結(jié)束時(shí)會被釋放。該函數(shù)的返回值必須是內(nèi)嵌函數(shù)名閉包函數(shù)可以大幅提高代碼復(fù)用性,使得代碼性能大幅提高。

閱讀本文大約需要 7 分鐘。
1.說一下 Python 中 LEGB 是什么

LEGB 指的是 Python 中的變量作用域問題,其中

L:local 局部變量,僅存在函數(shù)內(nèi)部,其存儲位置位于棧中,其生命周期在函數(shù)結(jié)束時(shí)就會被釋放。

E:enclosing 外部作用域變量,常見于閉包函數(shù),也就是嵌套函數(shù)中的上一層函數(shù)變量。其生命周期在整個(gè)閉包函數(shù)結(jié)束時(shí)會被釋放。

G:global 全局變量,作用于整個(gè)程序,其存儲位置位于全局?jǐn)?shù)據(jù)區(qū)中,其生命周期在程序銷毀時(shí)就被釋放。

B:builtins 內(nèi)建模塊變量,其存儲于內(nèi)置變量命名空間。

變量查找順序:

L-E-G-B

2.解釋一下 Python 中的閉包函數(shù)

示例:

def func():
    a = b = 1
    def internal_func(c):
        if a+b == c:
            print("True")
        else:
            print("False")

test = func()
test(2)

# 結(jié)果為 True

閉包函數(shù)作為函數(shù)式編程中的一種,當(dāng)含有以下幾點(diǎn)時(shí),便可稱它為一個(gè)閉包函數(shù)。

該函數(shù)是一個(gè)嵌套函數(shù)。

內(nèi)嵌函數(shù)必須引用外部函數(shù)的變量。

該函數(shù)的返回值必須是內(nèi)嵌函數(shù)名

閉包函數(shù)可以大幅提高代碼復(fù)用性,使得代碼性能大幅提高。

3.說一下 Python 中的深拷貝,淺拷貝,如何自己實(shí)現(xiàn)深拷貝

淺拷貝

copy 模塊下的 copy() 方法,實(shí)現(xiàn)一個(gè)對象的淺拷貝,list 下的分割也是一種淺拷貝,

示例:

import copy

a = [1, 2, [3, 4]]
b = copy.copy(a)

a == b
a is b

# 結(jié)果為 True,F(xiàn)alse

e = [1, 2, [3, 4]]
f = e[2]
h = e[2][:]

f == h
f is h

# 結(jié)果為 True,F(xiàn)alse

淺拷貝只會拷貝對象的第一層引用,如果是復(fù)合類型,如 list 里面嵌套 list,則當(dāng)內(nèi)嵌 list 發(fā)生變化時(shí),經(jīng)過淺拷貝出來的對象,也會發(fā)生變化。

示例:

import copy

a = [1, 2, [3, 4]]
b = copy.copy(a)

a == b
a is b

# 結(jié)果為 True,F(xiàn)alse

c = copy.copy(a)

a[1] = 0

print(a)
print(c)

# 結(jié)果為 a = [1, 0, [3, 4]], c = [1, 2, [3, 4]]


a[2].append(5)

print(a)
print(c)

# 結(jié)果為 a = [1, 0, [3, 4, 5]], c = [1, 2, [3, 4, 5]]

深拷貝

深拷貝將拷貝對象里所有引用全部拷貝,生成一個(gè)全新的對象。

示例:

import copy

a = [1, 2, 3, 4]
b = copy.deepcopy(a)

a == b 
a is b

# 結(jié)果為 True,F(xiàn)alse

深、淺拷貝會根據(jù)拷貝對象的數(shù)據(jù)類型,決定是否開辟新的內(nèi)存空間來存放拷貝出來的新對象。

import copy

a = [1, 2, 3, 4] # list 可變類型
b = copy.copy(a)

a == b
a is b

# 結(jié)果為 True,F(xiàn)alse

c = (1, 2, 3, 4)  # tuple 不可變類型
d = copy.copy(c)
e = copy.deepcopy(c)

c == d
c is d
c is e

# 結(jié)果為 True,True, True

自己實(shí)現(xiàn)深拷貝

[深拷貝源碼分析](),先占坑,還未寫。

4.說一說 Python 中的可變、不可變類型

Python 中通過將對象進(jìn)行 HASH 來判斷該對象是哪種類型,可 HASH 的為不可變類型,不可 HASH 的為可變類型。其中常見的幾種如下所示:

? 可變類型:List,dict,set

? 不可變類型:int,float,string,tuple,frorzenset

也可通過是否含有__hash__()方法,判斷該對象為何種類型,擁有該方法的為不可變類型,相反為可變類型。

5.說一說 Python 中一個(gè)類的實(shí)例從創(chuàng)建到刪除的過程

首先通過類的魔法方法__new__()來創(chuàng)建一個(gè)實(shí)例,再通過魔法方法__init__()來對這個(gè)實(shí)例初始化,最終刪除一個(gè)實(shí)例時(shí),Python 根據(jù)該實(shí)例的「引用計(jì)數(shù)」來判斷是否釋放該實(shí)例所占用的內(nèi)存,當(dāng)該實(shí)例的引用計(jì)數(shù)為 0 時(shí),__del__()方法才會被調(diào)用,__del__()方法的不等同于del

6.什么是單例,如何實(shí)現(xiàn)

單例是指一個(gè)類的實(shí)例有且只有一個(gè)。一般在一個(gè)類只需要使用一次之后便不在使用時(shí)使用。

實(shí)現(xiàn)方式:

使用__new__()方法

class Singleton():
    is_instance = None

    def __new__(cls):
        if not cls.is_instance:
            cls.is_instance = super().__new__(cls)
            return cls.is_instance

        return cls.is_instance
        
s = Singleton()
g = Singleton()
print(s is g)

# 結(jié)果為 True

使用裝飾器

def Singleton01(cls):
    is_instance = {}
    def get_instance(*args, **kwargs):
        if not is_instance:
            is_instance[cls] = cls()
            return is_instance[cls]
        return is_instance[cls]
    return get_instance


@Singleton01
class Myclass():
    pass

s = Myclass()
g = Myclass()
print(s is g)

# 結(jié)果為 True

多線程下實(shí)現(xiàn)單例

class Singleton02():
    is_instance = None
    is_lock = threading.Lock()

    def __new__(cls):
        with cls.is_lock:
            if not cls.is_instance:
                cls.is_instance = super().__new__(cls)
                return cls.is_instance

            return cls.is_instance


s = Singleton()
g = Singleton()
print(s is g)

# 結(jié)果為 True

多線程優(yōu)化

class Singleton03():
    is_instance = None
    is_lock = threading.Lock()

    def __new__(cls):
        # 單例判斷提前,只在第一次判斷時(shí)加鎖,避免無意義的加鎖解鎖
        if not cls.is_instance:
            with cls.is_lock:
                cls.is_instance = super().__new__(cls)
                return cls.is_instance

        return cls.is_instance

s = Singleton03()
g = Singleton03()
print(s is g)

# 結(jié)果為 True

未寫完,下一次更新補(bǔ)上

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/45114.html

相關(guān)文章

  • 明天找python工作,看看這幾道Python面試題吧,Python面試題No14

    摘要:定時(shí)檢測器定時(shí)拿出一部分重新的用過濾器進(jìn)行檢測剔除不能用的代理。重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。雖然在內(nèi)存中存儲表數(shù)據(jù)確實(shí)會提供很高的性能,但當(dāng)守護(hù)進(jìn)程崩潰時(shí),所有的數(shù)據(jù)都會丟失。第1題: 如何解決驗(yàn)證碼的問題,用什么模塊,聽過哪些人工打碼平臺? PIL、pytesser、tesseract模塊 平臺的話有:(打碼平臺特殊,不保證時(shí)效性) 云打碼 掙碼 斐斐打碼 若快打碼...

    番茄西紅柿 評論0 收藏0
  • 明天找python工作,看看這幾道Python面試題吧,Python面試題No14

    摘要:定時(shí)檢測器定時(shí)拿出一部分重新的用過濾器進(jìn)行檢測剔除不能用的代理。重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。雖然在內(nèi)存中存儲表數(shù)據(jù)確實(shí)會提供很高的性能,但當(dāng)守護(hù)進(jìn)程崩潰時(shí),所有的數(shù)據(jù)都會丟失。第1題: 如何解決驗(yàn)證碼的問題,用什么模塊,聽過哪些人工打碼平臺? PIL、pytesser、tesseract模塊 平臺的話有:(打碼平臺特殊,不保證時(shí)效性) 云打碼 掙碼 斐斐打碼 若快打碼...

    李世贊 評論0 收藏0
  • Python 面試」第六次更新

    摘要:說一下是怎樣將數(shù)據(jù)持久化的為某一時(shí)刻下的數(shù)據(jù)庫里的內(nèi)容拍一張照片快照,并將該照片寫進(jìn)磁盤中,實(shí)現(xiàn)數(shù)據(jù)持久化。通過寫命令,將數(shù)據(jù)追加到文件末尾,實(shí)現(xiàn)數(shù)據(jù)持久化。至此,有關(guān)數(shù)據(jù)庫知識點(diǎn)的面試題就已告一段落,下次更新網(wǎng)絡(luò)通信方面面試題。 1.說一說 Redis 是什么 Redis 是一種「Key-Value」的內(nèi)存型、非關(guān)系型數(shù)據(jù)庫,屬于 NoSQL 的一種。 Redis 的讀寫速度特別快,...

    RichardXG 評論0 收藏0
  • Python 面試」第六次更新

    摘要:說一下是怎樣將數(shù)據(jù)持久化的為某一時(shí)刻下的數(shù)據(jù)庫里的內(nèi)容拍一張照片快照,并將該照片寫進(jìn)磁盤中,實(shí)現(xiàn)數(shù)據(jù)持久化。通過寫命令,將數(shù)據(jù)追加到文件末尾,實(shí)現(xiàn)數(shù)據(jù)持久化。至此,有關(guān)數(shù)據(jù)庫知識點(diǎn)的面試題就已告一段落,下次更新網(wǎng)絡(luò)通信方面面試題。 1.說一說 Redis 是什么 Redis 是一種「Key-Value」的內(nèi)存型、非關(guān)系型數(shù)據(jù)庫,屬于 NoSQL 的一種。 Redis 的讀寫速度特別快,...

    Render 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<