development

파이썬 : None을 빈 문자열로 변환하는 가장 관용적 인 방법은 무엇입니까?

big-blog 2020. 6. 24. 07:07
반응형

파이썬 : None을 빈 문자열로 변환하는 가장 관용적 인 방법은 무엇입니까?


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

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

s = xstr(a) + xstr(b)

업데이트 : str (s)을 사용하는 Tryptich의 제안을 통합하여 문자열 이외의 다른 유형 에서이 루틴을 작동시킵니다. Vinay Sajip의 람다 제안에 크게 감명을 받았지만 코드를 비교적 간단하게 유지하고 싶습니다.

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

실제로 함수가 str()내장 함수처럼 동작하기를 원 하지만 인수가 None 일 때 빈 문자열을 반환하려면 다음과 같이하십시오.

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

def xstr(s):
    return '' if s is None else 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) # -> ''

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

None이 False이므로 x가 false 인 경우 "x 또는 y"는 y를 반환합니다. 자세한 설명 부울 연산자참조하십시오 . 짧지 만 명시 적이지는 않습니다.


return s or '' 명시된 문제에 대해 잘 작동합니다!


def xstr(s):
   return s or ""

def xstr(s):
    return {None:''}.get(s, s)

기능적인 방법 (한 줄짜리)

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 '')

Python 2.4와 호환되어야하는 경우 위의 변형

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

최대 기능을 사용합니다.

max(None, '')  #Returns blank
max("Hello",'') #Returns Hello

매력처럼 작동합니다.) 함수의 첫 번째 매개 변수에 문자열을 넣으십시오.


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

위의 예에서 변수 customer의 값이 None 인 경우 '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에서 값을 가져 오거나 조작을 위해 추가 유형 캐스팅이 필요한 경우에 매우 일반적입니다.


문자열 형식에 관한 것이라면 다음을 수행 할 수 있습니다.

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)

단락 평가 사용 :

s = a or '' + b or ''

Since + is not a very good operation on strings, better use format strings:

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

Use F string if you are using python v3.7

xstr = F"{s}"

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

반응형