나는 장고-CAS라는 라이브러리에 대한 몇 가지 코드를 통해보고하고이 줄을 발견했다 :이 파이썬 구문의 의미는 무엇입니까?
이protocol = ('http://', 'https://')[request.is_secure()]
정확히이 라인의 의미 무엇을/어떻게가? True
가 1
동일 로
나는 장고-CAS라는 라이브러리에 대한 몇 가지 코드를 통해보고하고이 줄을 발견했다 :이 파이썬 구문의 의미는 무엇입니까?
이protocol = ('http://', 'https://')[request.is_secure()]
정확히이 라인의 의미 무엇을/어떻게가? True
가 1
동일 로
이것은 단지, 튜플에서 0
또는 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://
로 설정됩니다. 파이썬의
최신 버전 (2.5까지)가 더 읽기 될 것이라고하는 conditional expression 허용 : 연결이 안전한지
protocol = 'https://' if request.is_secure() else 'http://'
첫 번째로 더 일반적인 방법을 추가하려면 +1. (나는 페이지를 열어서 편집을 계속하고있다) – Josay
request.is_secure()
이 True
로 평가됩니다 (HTTPS : HTTP TLS 이상) 또는 비보안 인 경우 False
(표준 HTTP) 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://')
이이 두 가지 프로토콜의 2 항목 튜플을 생성
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