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

資訊專欄INFORMATION COLUMN

關(guān)于Python not 及is None的有趣現(xiàn)象

NikoManiac / 3145人閱讀

摘要:最近碰到一個(gè)問題就是查看相關(guān)源碼的時(shí)候。題外話于是魯主開啟了第一次提問之旅。尷尬,沒關(guān)系,大膽承認(rèn)自己是菜鳥就了。也并不代表對(duì)象沒有其他屬性。它只是代表該對(duì)象作為時(shí)為空。

最近碰到一個(gè)問題,就是查看flask SessionInterface相關(guān)源碼的時(shí)候。比如我想整合redis作為flask session的存儲(chǔ)。參考:http://flask.pocoo.org/snippe...此處代碼中發(fā)現(xiàn)以下代碼片段特別困惑:

 def save_session(self, app, session, response):
        domain = self.get_cookie_domain(app)
        if not session:
            self.redis.delete(self.prefix + session.sid)
            if session.modified:
                response.delete_cookie(app.session_cookie_name,
                                       domain=domain)
            return

后來我又查看了flask的SecureSessionInterface,也是類似這樣的。

if not session:
            self.redis.delete(self.prefix + session.sid)
            if session.modified:
                response.delete_cookie(app.session_cookie_name,
                                       domain=domain)
            return

if not session 然后又在里面調(diào)用session.sid。想了半天沒想通,但是心里又想官方代碼片段肯定不會(huì)太馬虎的,一定有其道理。

題外話:于是魯主開啟了第一次stactoverflow提問之旅。(以前都是只在上面尋找答案,無奈這次沒找到,可能是問題太過幼稚了吧。尷尬,沒關(guān)系,大膽承認(rèn)自己是菜鳥就ok了。)
問題鏈接:http://stackoverflow.com/ques...
還真有牛人為我解答了。感覺還是很興奮的。

問題的來源在于這里的session對(duì)象對(duì)應(yīng)的類繼承了dict,代碼如下:

class RedisSession(CallbackDict, SessionMixin):

    def __init__(self, initial=None, sid=None, new=False):
        def on_update(self):
            self.modified = True
        CallbackDict.__init__(self, initial, on_update)
        self.sid = sid
        self.new = new
        self.modified = False

而當(dāng)dict為空的時(shí)候,比如if not {}: 這個(gè)時(shí)候條件判斷是出于True的狀態(tài)。
但是這個(gè)session還有其他的非dict屬性,如sid,還是可以正常訪問的。

寫個(gè)簡(jiǎn)單的例子:

class AA(dict):
    def __init__(self,name):
        self.name=name
        super(AA,self).__init__()
a=AA("aa")
if not a:
    print("not a")
    print(a.name)
if a is None:
    print("a is None")

運(yùn)行之后輸出:
not a
aa

總之dict為空時(shí),not dict就是True,但并不代表該dict對(duì)象沒有定義。也并不代表對(duì)象沒有其他屬性。它只是代表該session對(duì)象作為dict時(shí)為空。僅此而已。
如果要看對(duì)象是否定義,就一定要使用 is None來判斷。

那么還剩一個(gè)問題?
既然RedisSession(CallbackDict, SessionMixin),那么它既是CallbackDict的子類,not 空dict時(shí)返回True ,那么not 定義好的SessionMixin對(duì)象應(yīng)該是False那么如何取舍呢?具體實(shí)現(xiàn)原理不知道,猜想可能是 True or False這樣形式在內(nèi)部返回判斷結(jié)果的。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/38257.html

相關(guān)文章

  • Python對(duì)象身份迷思:從全體公民到萬(wàn)物皆數(shù)

    摘要:真正的前方高能第一個(gè)鋪墊告訴我們,對(duì)象可以映射成布爾值真假,第二個(gè)鋪墊告訴我們,布爾值可以映射成數(shù)字和。得知布爾值和有這一層隱秘的身份,我已興奮不已,再難對(duì)這看似不合現(xiàn)代語(yǔ)境卻又流傳千古的思想做出任何揣測(cè)。 這么久以來,我終于確認(rèn)了一件事,那就是不管是人也好,還是貓也好,常常會(huì)忘了想自己當(dāng)下的身份位置,以及曾經(jīng)的身份位置。 這個(gè)現(xiàn)象在我身上,表現(xiàn)出了雙倍分量的嚴(yán)重。這種時(shí)刻,我就會(huì)想起...

    xzavier 評(píng)論0 收藏0
  • Python對(duì)象身份迷思:從全體公民到萬(wàn)物皆數(shù)

    摘要:真正的前方高能第一個(gè)鋪墊告訴我們,對(duì)象可以映射成布爾值真假,第二個(gè)鋪墊告訴我們,布爾值可以映射成數(shù)字和。得知布爾值和有這一層隱秘的身份,我已興奮不已,再難對(duì)這看似不合現(xiàn)代語(yǔ)境卻又流傳千古的思想做出任何揣測(cè)。 這么久以來,我終于確認(rèn)了一件事,那就是不管是人也好,還是貓也好,常常會(huì)忘了想自己當(dāng)下的身份位置,以及曾經(jīng)的身份位置。 這個(gè)現(xiàn)象在我身上,表現(xiàn)出了雙倍分量的嚴(yán)重。這種時(shí)刻,我就會(huì)想起...

    chunquedong 評(píng)論0 收藏0
  • Python 魔術(shù)方法做出更好正則表達(dá)式 API

    摘要:注原文地址為我的一個(gè)同事提到他錯(cuò)過了的正則表達(dá)式的語(yǔ)法糖。首先,從正則表達(dá)式檢索捕捉組需要兩個(gè)步驟。語(yǔ)法糖為了好玩,我把一個(gè)小小的增加了一些語(yǔ)法糖的正則表達(dá)式庫(kù)的幫助類放在一起。調(diào)用將調(diào)用類的方法。 注:原文地址為 Playing with Python Magic Methods to make a nicer Regex API 我的一個(gè)同事提到,他錯(cuò)過了 Ruby 的正...

    MangoGoing 評(píng)論0 收藏0
  • Python實(shí)用技法第33篇:字符串連接合并

    摘要:上一篇文章實(shí)用技法第篇對(duì)齊文本字符串下一篇文章問題我們想將許多小字符串合并成一個(gè)大的字符串。示例如下對(duì)于不必要的字符串連接操作也要引起重視。有時(shí)候在技術(shù)上并非必需的時(shí)候,程序員們也會(huì)忘乎所以地使用字符串連接操作。 上一篇文章: Python實(shí)用技法第32篇:對(duì)齊文本字符串下一篇文章:  問題 我們想將許多小字符串合并成一個(gè)大的字符串。  解決方案 如果想要合并的字符串在一個(gè)序列或可迭代...

    JayChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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