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
'source' 카테고리의 다른 글
AWS RDS - 'the_db.*'에서 'the_user'@%'에 대한 GRANT ALL Privileges ON을 사용할 때 관리 사용자에 대한 액세스가 거부되었습니다. (0) | 2022.11.19 |
---|---|
Python에서 주 번호를 얻는 방법은 무엇입니까? (0) | 2022.11.19 |
MySQL의 기본 조합이 latin1_swedish_ci인 이유는 무엇입니까? (0) | 2022.11.19 |
PHP 오류: "참조 기준으로 매개 변수 2를 전달할 수 없습니다." (0) | 2022.11.19 |
Java용 SSH 라이브러리 (0) | 2022.11.19 |