내가 널 어떻게 object) 는 파이썬?
>>> foo is None
True
>>> foo = 'bar'
>>> foo is None
False
'없음' 유일한 '와' 더 이상 노네이피 클래스의 인스턴스를 해당 클래스를 통해 '없음' 같은 시도는 인스턴스화하며 반환되므로 객체에는 singleton. 파이썬 종종 볼 수 있는 오류 메시지 '와' 란 언급하십시오 노네이피 것이 무엇인지 궁금하다. # 39 의 it& 수 있다는 의견을 내 개인 이름으로 '없음' 이 메시지는 단순히 그냥 언급하십시오 we& 조만간 '없음' ll see # 39 로 때문에, l '찻입 여지가 거의 없다. 만일 언급하고 있다는 메시지를 볼 수 있는 't', '일부' TypeError 노네이피 can& # 39 이 일을 할 수 있다는 것을 알고, 또는 can& # 39, t, 그냥 단순히 'one' s # 39 it& 사용되고 있던 어떤 방식으로 can& # 39, t. 또한 '없음' 는 파이썬 it& # 39 의 내장현 상수입니다 즉시 시작할 때, 어떤 모듈에서는 어디에서든 클래스 또는 기능을 사용할 수 있습니다. 반면, '아니다' 노네이피 you& # 39 를 찍어봐야; d '없음' 을 처음 참조입니다 쿼리하여 동급.
>>> NoneType
NameError: name 'NoneType' is not defined
>>> type(None)
NoneType
>>> NoneType = type(None)
>>> id(None)
10748000
>>> my_none = NoneType()
>>> id(my_none)
10748000
>>> another_none = NoneType()
>>> id(another_none)
10748000
>>> def function_that_does_nothing(): pass
>>> return_value = function_that_does_nothing()
>>> id(return_value)
10748000
훨씬 이전 버전의 파이썬 (전에 2.4) ',' 더 이상 아무 것도 아닌 재할당하려면 가능했다. Not even as a 클래스 속성 또는 함수의 제약 없이.
# In Python 2.7
>>> class SomeClass(object):
... def my_fnc(self):
... self.None = 'foo'
SyntaxError: cannot assign to None
>>> def my_fnc():
None = 'foo'
SyntaxError: cannot assign to None
# In Python 3.5
>>> class SomeClass:
... def my_fnc(self):
... self.None = 'foo'
SyntaxError: invalid syntax
>>> def my_fnc():
None = 'foo'
SyntaxError: cannot assign to keyword
if value==None:
pass
이렇게 거역하 또는 테스트하려면
if not value:
pass
이렇게 하는 이유는
value is None
대신
value==None
첫 번째 같습니다.
id(value)==id(None)
반면 '가치' 는 사실 이렇게 발려짐 표현식에서는 = 없음
value.__eq__(None)
>>> nothing = function_that_does_nothing()
>>> nothing.__eq__(None)
True
대부분의 일반적인 건 승부가 될 것 같지만 () ',' eq 열리고 개폐구에서 무시하는 수 있기 때문에 모든 클래스에서 무시됨 정밀도에는 보장을 제공할 수 있도록 특수 비헤이비어를. 이 고려해보십시오 구분된다.
>>> class Empty(object):
... def __eq__(self, other):
... return not other
So you try it on '없음' 와 작동하잖아
>>> empty = Empty()
>>> empty==None
True
그런데 또 빈 문자열을 작동합니다
>>> empty==''
True
그렇지만.
>>> ''==None
False
>>> empty is None
False
다음 두 가지 테스트
if value:
# do something
if not value:
# do something
사실 평가되고 있다.
if bool(value):
# do something
if not bool(value):
# do something
'없음' 은 " falsey", 즉, 이 경우, '거짓' 이 아닌 '캐스트 맞추기바인딩 부울을 반환되므로 아웃하기로 발려짐 연산자입니다 반환되므로' 이 'True'. 하지만, '없음' s not a # 39 it& 고유한 속성. 또한 '거짓' 속성 자체에 의해 공유되므로 열거합니다 튜플을 문장열 뿐만 아니라, 빈, 세트, 딕토스, 0, 모든 객체에는 '에서' 매직 '거짓' () 를 구현하는 클래스를 bool 메서드입니다 반환되기를.
>>> bool(None)
False
>>> not None
True
>>> bool([])
False
>>> not []
True
>>> class MyFalsey(object):
... def __bool__(self):
... return False
>>> f = MyFalsey()
>>> bool(f)
False
>>> not f
True
다음과 같은 방법으로 테스트를 외면하였나니 변수에 대한 모든 것을 알고, 수, 또는 제외) 에서 테스트 등 추가 # 39 you& re:
def some_function(value=None):
if not value:
value = init_value()
Did you mean to call '위에서, 특별히' 없음 ',' 값이 설정되었습니다 init_value () 또는 의미 있는 빈 문자열, 빈, 또는 '0' 으로 설정되었습니다 값을 나열하십시오 트리거하여 초기화하지 필요가 있다. 제가 말했듯이요, 두려워. # 39 의 경우도 자주 있다 it& 파이썬 명시성 암시적입니다 것보다 낫다.
'없음' 의 특별한 지위를 가지고 있다. # 39 의 값을 기준선까지의 it& 가장 많기 때문에 이를 처리하는 알고리즘을 표시됨과 탁월한 가치를. 이런 시나리오용으로 신호를 줄 수 있는 조건이 필요합니다 비호환성의 플래깅 사용할 수 있으며 특수 처리 (기본값입니다 설정 등). 키워드를 함수의 인수가 '없음' 을 지정할 수 있습니다 다음 직접 테스트 일이다.
def my_function(value, param=None):
if param is None:
# do something outrageous!
정보기술 (it) 을 할 때 기본값입니다 afaq 충족되었으며 object& 되돌릴 수 있습니다 다음 직접 테스트를 하기 전에 뭔가 특별한 것이 # 39 의 속성.
value = getattr(some_obj, 'some_attribute', None)
if value is None:
# do something spectacular!
기본적으로 '없음' 을 (를) ',' s get () 메서드를 dictionary& # 39 되돌려줍니다 액세스하려는 존재하지 않는 키:
>>> some_dict = {}
>>> value = some_dict.get('foo')
>>> value is None
True
이 경우 아래 첨자 표기법을 사용하여 시도하시려면 조교하실 액세스하려면 약간만이라도 뚜르산을 케이에로 'a'
>>> value = some_dict['foo']
KeyError: 'foo'
거짓하였으니 시도할 경우 존재하지 않는 한 품목으로부터 팝
>>> value = some_dict.pop('foo')
KeyError: 'foo'
보통 '없음' 으로 설정되었습니다 기본값입니다 함께 있는 것을 억제할 수 있습니다
value = some_dict.pop('foo', None)
if value is None:
# booom!
위의 설명됨 사용하는 '없음' 으로 더 가깝지 않은 적용하십시오 유효함 가치가 있지만 신호를 보내는 뭔가 특별한 경우이다. 하지만 가끔 있는 상황에 대해 '없음' 이 어디에 있는지 알고 있기 때문에 비록 it& came from # 39 의 신호로 일부라야 데이터를 사용할 수도 있습니다. 그 때 함께 쿼리하지 개체의 속성을 그레타르 (# 39, & # 39 attribute_name& some_obj,, 없음) '' 없음 ',' t tell you doesn& # 39 뒤로를 가져오는 경우 '없음' 또는 '설정되었습니다 조교하실 속성용 액세스하려는 전송되었기 경우 아예 없는 개체에서. 동일한 상황에 같은 핵심 사전을 액세스하면 some_dict.get (& # 39, some_key& # 39;) '에서' 전날에약혼자에게 don& # 39 some_dict [# 39, & # 39, some_key&] t 다운로드되었는지 ',' 또는 '없음' s just 누락되었는지 it& # 39 로 설정된 경우. 해당 정보를 처리할 수 있도록 하는 경우, 일반적인 방법으로 이를 '시도' 내에서 직접 또는 키를 속성용 액세스하면 해당하며 시도하시겠습니까 chunghwa:
try:
# equivalent to getattr() without specifying a default
# value = getattr(some_obj, 'some_attribute')
value = some_obj.some_attribute
# now you handle `None` the data here
if value is None:
# do something here because the attribute was set to None
except AttributeError:
# we're now hanling the exceptional situation from here.
# We could assign None as a default value if required.
value = None
# In addition, since we now know that some_obj doesn't have the
# attribute 'some_attribute' we could do something about that.
log_something(some_obj)
이와 함께 딕트:
try:
value = some_dict['some_key']
if value is None:
# do something here because 'some_key' is set to None
except KeyError:
# set a default
value = None
# and do something because 'some_key' was missing
# from the dict.
log_something(some_dict)
위의 두 가지 방법 소개 및 사전 경우 처리하십니까 객체에는 기능ᆞ기술과 어때? 하지만, 우리는 이를 위해 이중 별표 키워드를 사용하여 인수 같은 것입니다.
def my_function(**kwargs):
try:
value = kwargs['some_key']
if value is None:
# do something because 'some_key' is explicitly
# set to None
except KeyError:
# we assign the default
value = None
# and since it's not coming from the caller.
log_something('did not receive "some_key"')
위의 코드는 널려 있는 도움이 되는 경우 단순히 '없음' 국기와 구별하기 위해 '종료기 해당하며' 패턴 '없음' 값 데이터, 그리고 다른 테스트 됩니다. # 39 의 값을 creditbank. there& 패턴 집합에 속하는 위부의 유효함 일부로 삽입되어 있는 데이터를 데이터 구조 및 제어 및 테스트 데 사용되는 특수 조건 (예, 경계, 시/도, 등). 와 같은 값을 센티널 () 는 '없음' 으로 사용됩니다 신호 방식을 사용할 수 있습니다. # 39 의 it& 사소한 에서 센티넬 만들 수 있다.
undefined = object()
와 함수
def my_function(value, param1=undefined, param2=undefined):
if param1 is undefined:
# we know nothing was passed to it, not even None
log_something('param1 was missing')
param1 = None
if param2 is undefined:
# we got nothing here either
log_something('param2 was missing')
param2 = None
딕트 함께
value = some_dict.get('some_key', undefined)
if value is None:
log_something("'some_key' was set to None")
if value is undefined:
# we know that the dict didn't have 'some_key'
log_something("'some_key' was not set at all")
value = None
객체로
value = getattr(obj, 'some_attribute', undefined)
if value is None:
log_something("'obj.some_attribute' was set to None")
if value is undefined:
# we know that there's no obj.some_attribute
log_something("no 'some_attribute' set on obj")
value = None
앞서 언급한 바와 같이 따라 맞춤형 센티넬 따라오렴 일부 이다. 첫째, # 39, re like '없음' 도왔으매 파이썬 doesn& they& 여러_키워드 없습니다 # 39, t 사악함으로부터 그들을. 네 언제든지, 어디서든지 '에서 정의되지 않은 overwrite 수 있습니다' s # 39 위에 정의된, 이용 및 사용 방법을 it& 모듈에서는 저들이요 조심하십시오. 그런 다음, 한원소 집합 () '가 아닌' 객체에는 인스턴스입니다 의해 반환되었습니다 호츨 만드는 경우 10 배, 10 개의 객체에는 얻을 수 있습니다. 마지막으로, 사용에 센티넬 매우 특이한. # 39 에 대한 특정 라이브러리란 it& 한 센티널 (scope) 는 일반적으로 사용되는 제한될 수 있으며 이런 # 39 의 내부를 library& 한다. # 39, t it shouldn& " leak"; 초과됩니다. 그들의 목적은 외부 코드 경우에만 경우 이 모든 것이 확장하거나 보충하는 library& # 39 의 API.
파이썬, 의 값을 표현할 수 없는 사용할 수 있습니다 , , 객체에는 " " 되니그들 값 ( 티페스그노네이피그노네 ) 및 (또는 렌 () = 0을) 를 써줬지 따라서:
if yourObject is None: # if yourObject == None:
...
if yourString == "": # if yourString.len() == 0:
...
이와 관련해 " 차이 = "; is" ";; = " " 사용하는 테스트 및 객체 id; 충분합니다. 그러나 이 작전이 " is"; 아마 더 올바른 서비스를 사용할 수 있다 (identity) 은 다음과 같이 정의 객체에는 작업이 아닌 " " =. 잘 모를 경우 속도 차이가 있다.
어쨌든 보면 할 수 있습니다. < ul>; li>, 파이썬, a href = " < <;;;;; (http://docs.python.org/2/library/constants.html) = 없음 # none" > 내장현 constants< /a> 강조표시할? doc page.< /li>;
< /ul>;