파이썬은 Ruby에서 || =와 같은 "또는 같음"함수를 가지고 있습니까?
그렇지 않은 경우이를 수행하는 가장 좋은 방법은 무엇입니까?
지금 나는 (django 프로젝트를 위해)하고있다.
if not 'thing_for_purpose' in request.session:
request.session['thing_for_purpose'] = 5
하지만 꽤 어색합니다. Ruby에서는 다음과 같습니다.
request.session['thing_for_purpose'] ||= 5
훨씬 좋습니다.
받아 들여지는 대답은 dicts에 좋지만 제목은 Ruby의 || = 연산자에 해당하는 일반적인 것을 찾습니다. Python에서 || =와 같은 작업을 수행하는 일반적인 방법은 다음과 같습니다.
x = x or new_value
dict
있습니다 setdefault()
.
그래서 만약 것은 request.session
A는 dict
:
request.session.setdefault('thing_for_purpose', 5)
미들웨어 등에서 수행하는 경우 기본값을 설정하는 것이 합리적이지만 한 요청의 컨텍스트에서 기본값이 필요한 경우 :
request.session.get('thing_for_purpose', 5) # gets a default
보너스 : 실제로 ||=
파이썬 에서하는 방법이 있습니다.
def test_function(self, d=None):
'a simple test function'
d = d or {}
# ... do things with d and return ...
정확한 답 : 아닙니다 파이썬은 하나가없는 내장 연산자 op
번역 할 수 있습니다 x = x or y
로 x op y
.
그러나 거의 그렇습니다. 비트 또는 같음 연산자 ( |=
) 는 두 피연산자가 모두 부울로 처리되는 경우 위에서 설명한대로 작동합니다. (주의 사항은 무엇입니까? 대답은 물론 아래에 있습니다.)
첫째, 기능의 기본 데모 :
x = True
x
Out[141]: True
x |= True
x
Out[142]: True
x |= False
x
Out[143]: True
x &= False
x
Out[144]: False
x &= True
x
Out[145]: False
x |= False
x
Out[146]: False
x |= True
x
Out[147]: True
주의 할 점은 파이썬이 엄격하게 형식화되지 않았기 때문에 값이 표현식에서 부울로 취급 되더라도 비트 연산자에 주어지면 단락되지 않습니다. 예를 들어 목록을 지우고 True
삭제 된 요소 가있는 경우 반환하는 부울 함수가 있다고 가정합니다 .
def my_clear_list(lst):
if not lst:
return False
else:
del lst[:]
return True
이제 다음과 같이 단락 된 동작을 볼 수 있습니다.
x = True
lst = [1, 2, 3]
x = x or my_clear_list(lst)
print(x, lst)
Output: True [1, 2, 3]
그러나를 or
비트 또는 ( |
)로 전환하면 단락이 제거되므로 함수가 my_clear_list
실행됩니다.
x = True
lst = [1, 2, 3]
x = x | my_clear_list(lst)
print(x, lst)
Output: True []
Above, x = x | my_clear_list(lst)
is equivalent to x |= my_clear_list(lst)
.
In general, you can use dict[key] = dict.get(key, 0) + val
.
참고URL : https://stackoverflow.com/questions/3929433/does-python-have-an-or-equals-function-like-in-ruby
'program tip' 카테고리의 다른 글
commons httpclient-GET / POST 요청에 쿼리 문자열 매개 변수 추가 (0) | 2020.11.04 |
---|---|
데이터 파일에서 ASCII가 아닌 문자 제거 (0) | 2020.11.04 |
셀에서 UITableViewCell indexPath를 얻는 방법은 무엇입니까? (0) | 2020.11.03 |
파이썬 목록의 모든 요소에 논리 연산자를 적용하는 방법 (0) | 2020.11.03 |
MySQL에서 누적 합계 열 만들기 (0) | 2020.11.03 |