program tip

파이썬은 Ruby에서 || =와 같은 "또는 같음"함수를 가지고 있습니까?

radiobox 2020. 11. 3. 07:55
반응형

파이썬은 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.sessionA는 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 yx 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

반응형