python字典的key只能是不可變類型涛癌?

2021年4月份去富途面試問(wèn)道的問(wèn)題,現(xiàn)在記錄一下
python中dict類型的key值要求是不可變類型送火,通常來(lái)說(shuō)拳话,我們一般采用int或者str類型來(lái)作為字典的key,但是可不可以用可變類型作為dict的key呢种吸?
當(dāng)時(shí)面試官給出了下面這道題假颇,代碼大致如下:

class Dog():

    def __init__(self, name, color):
        self._n = name
        self._c = color
   
# 初始化三個(gè)對(duì)象 
dog_1 = Dog(name='mike', color='red')
dog_2 = Dog(name='tom', color='blue')
dog_3 = Dog(name='tom', color='blue')

# 字典,并用初始化的對(duì)象作為key骨稿,設(shè)置value
house = {}
house[dog_1] = 1
house[dog_2] = 2

# 打印出三個(gè)對(duì)象的哈希值,發(fā)現(xiàn)dog_2  dog_3是相等的
print(hash(dog_1))  # 2766680834235181893
print(hash(dog_2))  # 9159254995178818247
print(hash(dog_3))  # 9159254995178818247

# 取值
for item in house:
    print(house[item])  # 1 2

要求如下:
print(house[dog_3] == 2) # 當(dāng)打印house[dog_3] 結(jié)果為2

當(dāng)時(shí)這道題目沒做出來(lái)姜钳,回來(lái)后查找相關(guān)坦冠,才發(fā)現(xiàn)這道題的考點(diǎn)是python當(dāng)中的兩個(gè)魔法方法 ,代碼如下

# 為Rule添加兩個(gè)方法__hash__和__eq__,其意義可以查看python官方文檔哥桥。

class Dog():

    def __init__(self, name, color):
        self._n = name
        self._c = color
    
    # 關(guān)鍵代碼辙浑,富途面試
    def __hash__(self):
        return hash(self._n + self._c)

    # 關(guān)鍵代碼,富途面試
    def __eq__(self, other):
        return (self._n, self._c) == (other._n, other._c)

其實(shí)這道題的考點(diǎn)是從flask框架中路由裝飾器中@app.route()中延伸出來(lái)的拟糕,有興趣的朋友可以去看看【flask路由映射map表】相關(guān)資料判呕,也可以自己嘗試去看看flask路由相關(guān)源碼

route裝飾器

在Flask應(yīng)用中,我們一般通過(guò)decorator裝飾view函數(shù)送滞,來(lái)注冊(cè)一個(gè)路由侠草,表示url和處理函數(shù)的對(duì)應(yīng)關(guān)系,例如:

@app.route('/')
def index():
      return 'Hello World'

route裝飾器定義如下, 其本質(zhì)是調(diào)用了Flask對(duì)象的add_url_rule函數(shù):

def route(self, rule, **options):
    def decorator(f):
        endpoint = options.pop('endpoint', None)
        self.add_url_rule(rule, endpoint, f, **options)
        return f
    return decorator    

add_url_rule函數(shù)簽名為def add_url_rule(self, rule, endpoint=None, view_func=None, **options)犁嗅,其主要做了以下4件事情:

1边涕,endpoint默認(rèn)取view函數(shù)名稱
2,提供默認(rèn)的 http方法(HEAD, OPTION)
3,創(chuàng)建url_rule_class對(duì)象(url_rule_class默認(rèn)為werkzeug.routing.Route類)功蜓,并添加到url_map中(werkzeug.routing.Map對(duì)象)
4园爷,將endpoint和view_func保存到view_functions字典中

最后拋出一個(gè)問(wèn)題:flask路由中裝飾器什么時(shí)候執(zhí)行呢?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末式撼,一起剝皮案震驚了整個(gè)濱河市童社,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌著隆,老刑警劉巖扰楼,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異旅东,居然都是意外死亡灭抑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門抵代,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腾节,“玉大人,你說(shuō)我怎么就攤上這事荤牍“赶伲” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵康吵,是天一觀的道長(zhǎng)劈榨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)晦嵌,這世上最難降的妖魔是什么同辣? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮惭载,結(jié)果婚禮上旱函,老公的妹妹穿的比我還像新娘。我一直安慰自己描滔,他們只是感情好棒妨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著含长,像睡著了一般券腔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拘泞,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天纷纫,我揣著相機(jī)與錄音,去河邊找鬼田弥。 笑死涛酗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播商叹,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼燕刻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了剖笙?” 一聲冷哼從身側(cè)響起卵洗,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弥咪,沒想到半個(gè)月后过蹂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聚至,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年酷勺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扳躬。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脆诉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贷币,到底是詐尸還是另有隱情击胜,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布役纹,位于F島的核電站偶摔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏促脉。R本人自食惡果不足惜辰斋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘸味。 院中可真熱鬧亡呵,春花似錦、人聲如沸硫戈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丁逝。三九已至,卻和暖如春梭姓,著一層夾襖步出監(jiān)牢的瞬間霜幼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工誉尖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罪既,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像琢感,于是被迫代替她去往敵國(guó)和親丢间。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359