不能读这个python格式(,)[..]

Det*_*ing 4 python

我是新手,我正在阅读这样一段代码:

...
proto = ('http', 'https')[bool(self.https)]
...
Run Code Online (Sandbox Code Playgroud)

看起来这条线路proto要在'http'和之间切换'https'.

但这( , )[ .. ]意味着什么?我怎样才能利用这种风格?

Roc*_*key 10

第二个元素(在括号中)是将在第一个元素上使用的索引.所以在这种情况下,你有一个元组:

('http', 'https')
Run Code Online (Sandbox Code Playgroud)

然后是一个表示是否self.https设置的布尔值.如果是,则值为1,拨打电话:

('http', 'https')[1]
Run Code Online (Sandbox Code Playgroud)

这将从https元组中选择值.这利用了bool作为子类的事实,int可能被视为滥用:)

In [1]: t = ('http', 'https')

In [2]: t[0]
Out[2]: 'http'

In [3]: t[1]
Out[3]: 'https'

In [4]: https_setting = True

In [5]: int(https_setting)
Out[5]: 1

In [6]: t[bool(https_setting)]
Out[6]: 'https'

In [7]: True.__class__.__bases__
Out[7]: (int,)
Run Code Online (Sandbox Code Playgroud)

有关此技术的很酷用法,请查看此视频中的2:14 (这也恰好是一个很棒的视频!).它索引一个string('^ ')而不是一个元组,但概念是相同的.