Python에서 문자열 변수 초기화 : ""또는 None?
문자열 인스턴스 속성 이있는 클래스가 있다고 가정 합니다. 이 속성을 "" 값 또는 None으로 초기화해야합니까 ? 둘 다 괜찮습니까?
def __init__(self, mystr="")
self.mystr = mystr
또는
def __init__(self, mystr=None)
self.mystr = mystr
편집 : 내가 생각한 것은 "" 를 초기 값으로 사용 하면 변수를 문자열 유형으로 " 선언 "한다는 것입니다 . 그런 다음 나중에 다른 유형을 할당 할 수 없습니다. 내가 맞아?
편집 : 여기에 내 제안이 잘못되었음을 주목하는 것이 중요하다고 생각합니다. 그리고 변수에 다른 유형을 할당하는 데 문제가 없습니다. S.Lott 의 코멘트가 마음에 들었습니다 . " Python에는"선언 "된 것이 없기 때문에 올바른 방식으로 생각하고 있지 않습니다. "
값이없는 경우 프로그램에서 의미가있는 경우 (예 : 선택적 값) None을 사용해야합니다. 어쨌든 그 목적입니다.
__init__ 호출자가 값을 제공해야한다면 초기화하지 않는 것이 좋습니다.
""가 기본값으로 의미가 있으면 사용하십시오.
Python에서 유형은 사용법에서 추론됩니다. 따라서 다른 유형의 값을 할당하여 유형을 변경할 수 있습니다.
>>> x = None
>>> print type(x)
<type 'NoneType'>
>>> x = "text"
>>> print type(x)
<type 'str'>
>>> x = 42
>>> print type(x)
<type 'int'>
None은 "설정되지 않음"을 나타내는 데 사용되는 반면 다른 값은 "기본값"값을 나타내는 데 사용됩니다.
따라서 클래스가 빈 문자열을 처리하고 기본값으로 선호하는 경우 ""를 사용하십시오. 클래스에서 변수가 설정되었는지 확인해야하는 경우 None을 사용하십시오.
처음에 변수가 문자열인지 여부는 중요하지 않습니다. 언제든지 다른 유형 / 값으로 변경할 수 있습니다.
빈 문자열을 초기화하는 또 다른 방법은 str()인수없이 내장 함수를 사용하는 것 입니다.
str (객체 = '')
멋지게 인쇄 가능한 객체 표현을 포함하는 문자열을 반환합니다.
...
인수가 제공되지 않으면 빈 문자열 ''을 반환합니다.
원래 예에서는 다음과 같습니다.
def __init__(self, mystr=str())
self.mystr = mystr
개인적으로 이것이 당신의 의도를 더 잘 전달한다고 믿습니다.
그 str()자체로 기본 매개 변수 값을 ''.
때에 따라 다르지. 매개 변수가 전혀 전달되지 않은 것과 빈 문자열이 전달 된 것을 구별하려면 None을 사용할 수 있습니다.
어느 쪽이든 괜찮을지 모르지만 확실한 대답은 없다고 생각합니다.
- 당신이 비교 값이 설정되지 않았 음을 표시하려는 경우
None에 비해보다 더""있기 때문에,""유효한 값이 될 수있다, - 기본값을 원하면
""실제로 문자열이기 때문에 더 좋을 것입니다. 문자열 메서드를 호출 할 수 있습니다. 을 사용하면None예외가 발생합니다. - 여기에 문자열이 필요하다는 것을 향후 유지 관리자에게 알리고 싶다면
""도움이 될 수 있습니다.
전체 참고 :
루프가있는 경우 다음과 같이 말합니다.
def myfunc (self, mystr = ""):
for other in self.strs:
mystr = self.otherfunc (mystr, other)
그러면 잠재적 인 미래 최적화 프로그램 str이 항상 문자열 임을 알 수 있습니다. 를 사용한 경우 None첫 번째 반복까지 문자열이 아닐 수 있으며, 동일한 효과를 얻으려면 루프를 풀어야합니다. 이것은 가설은 아니지만 (내 PHP 컴파일러에서 많이 나타남)이를 고려하여 코드를 작성해서는 안됩니다. 나는 그것이 흥미로울 것이라고 생각했다. :)
어느 쪽이든 괜찮지 만 None규칙으로 더 일반적입니다- None선택적 매개 변수에 값이 전달되지 않았 음을 나타냅니다.
""이 올바른 기본값 인 경우 가있을 것 입니다. 내 경험상 이러한 시간은 자주 발생하지 않습니다.
None과 ""는 모두 거짓이므로 둘 다 수행 할 수 있습니다. 6.1을 참조하십시오 . 진실 가치 테스트 .
편집하다
편집에서 질문에 답하려면 : 아니요, 다른 유형을 지정할 수 있습니다.
>>> a = ""
>>> type(a)
<type 'str'>
>>> a = 1
>>> type(a)
<type 'int'>
목록 또는 사전의 경우 대답이 더 명확합니다. http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#default-parameter-values 에 따르면 기본 매개 변수로 None을 사용합니다.
그러나 문자열의 경우에도 키워드 매개 변수에 대해 런타임에 (빈) 문자열 객체가 인스턴스화됩니다.
가장 깨끗한 방법은 아마도 다음과 같습니다.
def myfunc(self, my_string=None):
self.my_string = my_string or "" # or a if-else-branch, ...
어느 쪽이든 파이썬에서는 괜찮습니다. 개인적으로 ""를 선호합니다. 다시 말하지만 어느 쪽이든 괜찮습니다
>>>x = None
>>>print(x)
None
>>>type(x)
<class 'NoneType'>
>>>x = "hello there"
>>>print(x)
hello there
>>>type(x)
<class 'str'>
>>>
>>>x = ""
>>>print(x)
>>>type(x)
<class 'str'>
>>>x = "hello there"
>>>type(x)
<class 'str'>
>>>print(x)
hello there
empty_string = ""
if not empty_string:
print "Empty string is not set"
=> 빈 문자열이 설정되지 않았습니다.
if empty_string is not None:
print "Empty string is not None"
=> 빈 문자열이 없음이 아닙니다.
Python philosophy is to be readable.
That's why it's good practice to define your attributes in __init__() even if it's optional.
In the same spirit, you have to ask yourself what clearer for anyone who reads your code. In fact the type itself give much information about future use of your variable. So:
kind = None
Is syntaxically correct, but reader does not know much. Is it a string, a code as integer, a list, etc. ?
kind_str = None
kind = ""
Both say a little more, the first has the type in its name and the second in its declaration. I would go for the second, neater.
참고URL : https://stackoverflow.com/questions/1398164/initialize-a-string-variable-in-python-or-none
'Program Club' 카테고리의 다른 글
| Facebook에서 Chrome에서 "Unsafe JavaScript attempt to access frame with URL"오류를 표시합니다. (0) | 2020.12.05 |
|---|---|
| MySql에서 악센트 구분 검색을 수행하는 방법 (0) | 2020.12.04 |
| Django 쿼리에서 반환하는 열을 제한하는 방법은 무엇입니까? (0) | 2020.12.04 |
| 스칼라 심볼의 목적? (0) | 2020.12.04 |
| 동일하지 않은 데이터 프레임을 병합하고 누락 된 행을 0으로 바꿉니다. (0) | 2020.12.04 |