我一直在尋找通過一些代碼名爲Django的CAS庫,並看準了這一行:這個python語法是什麼意思?
protocol = ('http://', 'https://')[request.is_secure()]
究竟這條線意味着什麼/怎麼辦?
我一直在尋找通過一些代碼名爲Django的CAS庫,並看準了這一行:這個python語法是什麼意思?
protocol = ('http://', 'https://')[request.is_secure()]
究竟這條線意味着什麼/怎麼辦?
這只是選擇從元組0
或1
指數元素,如 True
等於1
,並且False
等於0
>>> secure = True
>>> ('http','https')[0]
'http'
>>> ('http','https')[1]
'https'
>>> ('http','https')[secure]
'https'
>>> ('http','https')[False]
'http'
然而,這樣做的清潔方法是:
protocol = "http" if request.is_secure() else "https"
它根據布爾結果選擇兩個值中的一個。
('http://', 'https://')
是一個元組request.is_secure()
產生一個布爾結果,True
或False
。int
和True == 1
,False == 0
的子類。因此,如果請求是安全的(使用SSL加密,經https
)的將被設置爲https://
太。
更多的Python最新版本(2.5及以上)允許一個conditional expression,這將是更易讀:如果連接是安全的
protocol = 'https://' if request.is_secure() else 'http://'
+1是第一個添加更傳統的方法來做到這一點。 (我打開了頁面,並且編輯在各處都在發生) – Josay
request.is_secure()
將評估爲True
(HTTPS:HTTP基於TLS)或者如果不安全(標準HTTP),則爲False
。
所以,如果request.is_secure()
是True
,則:
protocol = ('http://', 'https://')[request.is_secure()]
# Will resolve as:
protocol = ('http://', 'https://')[True]
# Which is:
protocol = ('http://', 'https://')[1]
# And results in.
protocol == 'https://'
或者,如果request.is_secure()
是False
,則:
protocol = ('http://', 'https://')[request.is_secure()]
# Will resolve as:
protocol = ('http://', 'https://')[False]
# Which is:
protocol = ('http://', 'https://')[0]
# And results in.
protocol == 'http://'
True
和False
決心整數分別爲1
和0
,因爲bool
is a sub-class of int
。這樣做的目的是確定用於鏈接的HTTP方案(安全或非安全)。
這是一個聰明的三元運算符在python中。根據布爾結果,它將選擇這兩個字符串中的一個。
如果False
(0)會選第一個,如果是True
(1)第二個。
看它像這樣:
>>>('http://', 'https://')[False]
'http://'
>>>('http://', 'https://')[True]
'https://'
它也可以實現這樣的:
protocol = 'https://' if request.is_secure() else 'http://'
protocols = ('http://', 'https://')
這將創建兩個可能的協議,兩項目的元組
secure = request.is_secure()
這將返回True或假,相當於0或1
protocols[secure]
此挑選符合安全
這等同於以下
protocol = 'https://' if request.is_secure() else 'http://'
我喜歡這種巧妙的索引技巧正確的元素。
request.is_secure()
返回True
或False
。 因此如果它是True
,它從列表中選擇索引1中的項目(True
等於1),否則它從列表中選擇索引0中的項目。
因此,http
和https
分別指向不安全和安全。
這個問題的重複,http://stackoverflow.com/questions/1947030/how-does-the-python-conditional-operator-workaround-work。這只是理解重寫的if-else的問題。 – RacerNerd