2014-02-27 2 views
1

나는 장고-CAS라는 라이브러리에 대한 몇 가지 코드를 통해보고하고이 줄을 발견했다 :이 파이썬 구문의 의미는 무엇입니까?

protocol = ('http://', 'https://')[request.is_secure()] 

정확히이 라인의 의미 무엇을/어떻게가? True1 동일 로

+0

이 질문은 중복되어 있습니다. http://stackoverflow.com/questions/1947030/how-does-the-python-conditional-operator-workaround-work. 다시 작성된 if-else를 이해하는 것입니다. – RacerNerd

답변

2

이것은 단지, 튜플에서 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" 
8

부울 결과에 따라 두 값 중 하나를 선택합니다.

  • ('http://', 'https://')
  • request.is_secure() 부울 결과 True 또는 False을 생성하는 튜플이다.
  • 부울은 intTrue == 1, False == 0의 하위 클래스입니다. 요청이 보안 (사용 SSL 암호화, https 이상) 인 경우

따라서, 너무 https://로 설정됩니다. 파이썬의

최신 버전 (2.5까지)가 더 읽기 될 것이라고하는 conditional expression 허용 : 연결이 안전한지

protocol = 'https://' if request.is_secure() else 'http://' 
+0

첫 번째로 더 일반적인 방법을 추가하려면 +1. (나는 페이지를 열어서 편집을 계속하고있다) – Josay

1

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://' 

이 목적은 링크에 사용할 HTTP 스키마 (보안 또는 비보안)를 결정하는 것입니다.

1

이것은 영리한 삼진 연산자의 python입니다. 부울 결과에 따라 두 문자열 중 하나를 선택합니다.

False (0)은 첫 번째 것을 선택하고 True (1)이면 두 번째 것을 선택합니다.

이처럼 봐 :

>>>('http://', 'https://')[False] 
'http://' 

>>>('http://', 'https://')[True] 
'https://' 

또한 다음과 같이 얻을 수있다 :

protocol = 'https://' if request.is_secure() else 'http://' 
1
protocols = ('http://', 'https://') 

이이 두 가지 프로토콜의 2 항목 튜플을 생성

secure = request.is_secure() 

이렇게하면 True를 반환합니다. 또는, 거짓 0과 동등 또는 1

protocols[secure] 

이 보안

2

이 내가 영리 인덱싱 트릭이 선호 다음

protocol = 'https://' if request.is_secure() else 'http://' 

에 해당에게 맞는 올바른 요소를 선택합니다.

0

request.is_secure()True 또는 False 중 하나를 반환합니다. 따라서 True 인 경우 목록에서 색인 1의 항목 (True = 1)을 선택하고, 그렇지 않으면 목록에서 색인 0의 항목을 선택합니다.

따라서 httphttps은 각각 안전하지 않으며 안전하지 못합니다.

관련 문제