source

Python: None을 빈 문자열로 변환하는 가장 관용적인 방법?

lovecheck 2022. 11. 19. 11:44
반응형

Python: None을 빈 문자열로 변환하는 가장 관용적인 방법?

다음을 수행하는 가장 관용적인 방법은 무엇입니까?

def xstr(s):
    if s is None:
        return ''
    else:
        return s

s = xstr(a) + xstr(b)

업데이트: 스트링을 사용하는 Tryptich의 제안을 포함시키고 있습니다.이것에 의해, 이 루틴은 문자열 이외의 다른 타입에서도 사용할 수 있습니다.Vinay Sajip의 람다 제안에 매우 감명받았습니다만, 비교적 간단하게 코드를 유지하고 싶습니다.

def xstr(s):
    if s is None:
        return ''
    else:
        return str(s)

아마 가장 짧은 것은str(s or '')

None은 False이고 "x 또는 y"는 x가 false일 경우 y를 반환하기 때문입니다.자세한 내용은 부울 연산자를 참조하십시오.짧지만 명쾌하지는 않다.

def xstr(s):
    return '' if s is None else str(s)

실제로 기능을 동작시키고 싶은 경우는,str()인수가 [None]인 경우 빈 문자열을 반환합니다.다음 절차를 수행합니다.

def xstr(s):
    if s is None:
        return ''
    return str(s)

값이 항상 문자열 또는 없음인 경우:

xstr = lambda s: s or ""

print xstr("a") + xstr("b") # -> 'ab'
print xstr("a") + xstr(None) # -> 'a'
print xstr(None) + xstr("b") # -> 'b'
print xstr(None) + xstr(None) # -> ''

return s or ''당신이 말한 문제라면 잘 될 거예요!

def xstr(s):
   return s or ""

기능적 방식(원라이너)

xstr = lambda s: '' if s is None else s

이 빌딩을 완성하기 위한 깔끔한 원라이너입니다.

s = (lambda v: v or '')(a) + (lambda v: v or '')(b)

또는 단순히:

s = (a or '') + (b or '')

갱신:

현재는 주로 이 방법을 사용하고 있습니다.

some_string = None
some_string or ''

some_string이 없는 경우NoneType,그or거기서 단락되어 반환됩니다.그렇지 않으면 빈 문자열이 반환됩니다.

구:

Max 함수는 python 2.x에서는 동작하지만 3.x에서는 동작하지 않습니다.

max(None, '')  # Returns blank
max("Hello", '') # Returns Hello
def xstr(s):
    return {None:''}.get(s, s)

Python 2.4와 호환성이 필요한 경우 위의 다양한 기능

xstr = lambda s: s is not None and s or ''

문자열 포맷에 관한 경우 다음을 수행할 수 있습니다.

from string import Formatter

class NoneAsEmptyFormatter(Formatter):
    def get_value(self, key, args, kwargs):
        v = super().get_value(key, args, kwargs)
        return '' if v is None else v

fmt = NoneAsEmptyFormatter()
s = fmt.format('{}{}', a, b)
def xstr(s):
    return s if s else ''

s = "%s%s" % (xstr(a), xstr(b))

아래에 설명된 시나리오에서는 항상 타입 캐스팅을 피할 수 있습니다.

customer = "John"
name = str(customer)
if name is None
   print "Name is blank"
else: 
   print "Customer name : " + name

위의 예에서 변수 고객 값이 없음인 경우, '이름'에 할당되는 동안 캐스팅이 더 진행됩니다.if' 절의 비교는 항상 실패합니다.

customer = "John" # even though its None still it will work properly.
name = customer
if name is None
   print "Name is blank"
else: 
   print "Customer name : " + str(name)

위의 예는 올바르게 동작합니다.이러한 시나리오는 URL, JSON 또는 XML에서 값을 가져오거나 심지어 값을 조작하기 위해 추가 유형의 캐스팅이 필요한 경우에 매우 일반적입니다.

단락 평가 사용:

s = a or '' + b or ''

+ 는 문자열에서는 그다지 좋은 연산이 아니기 때문에 포맷 문자열을 사용하는 것이 좋습니다.

s = "%s%s" % (a or '', b or '')

python v3.7을 사용하는 경우 F 문자열 사용

xstr = F"{s}"

언급URL : https://stackoverflow.com/questions/1034573/python-most-idiomatic-way-to-convert-none-to-empty-string

반응형