我一直在寻找通过一些代码名为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