2012-11-28 3 views
1

나는 거짓으로 값 테스트에 빈 목록을 기대하지만, 나는 조금 혼란 스러워요 이유를 False로 객체 보고서를 포함하는 목록에 대한 참조도 값 다음 예제와 같이 시험했을 때 :값을 테스트 할 때 개체를 포함하는 목록이 False 인 이유는 무엇입니까?

>>> weapon = [] 
>>> weapon == True 
False 
>>> weapon.append("sword") 
>>> weapon == True 
False 
>>> weapon 
['sword'] 

weapon = []이 거짓이면 weapon = ['sword']도 False일까요? 문서 http://docs.python.org/release/2.4.4/lib/truth.html에 따르면 True 여야합니다. 나는 이것을 어떻게 이해하지 못했을 까?

+3

당신은'== True'를 사용하고 있기 때문에. – Mehrdad

+0

그러나'weapon = [ 'sword']'이라면 무기가 참이 아니어야'weapon == True'가됩니까? 무기는 '없음'또는 빈 문자열과 반대되는 개체와 같습니다. 문서에는 " ',(), []와 같은 빈 시퀀스가 ​​있습니다." False로 간주됩니다 ... 비어 있지 않은 문자열은 == True 여야합니다. –

답변

2

대신 당신은 bool(["sword"])True에 비교하려는 암시 적으로 완료

>>> if weapon == True: # weapon isn't equal to True 
...  print "True" 
... 
>>> if weapon: 
...  print "True" 
... 
True 
+0

감사합니다. 부울을 사용하여 정의 된 함수를 통해'무기 '를 평가할 때 객체가 포함되어있는 한 True로 평가되고 비어 있으면 False로 평가됩니다. –

+1

@VinBreau, 맞습니다. 빈 문자열, 빈 튜플, 빈 dict, 빈 세트 등에 대해 동일한 유형의 작업이 수행됩니다. –

4

하면, 그 기사에서

In [1]: w = [] 

In [2]: if w: 
    ...:  print True 
    ...: else: 
    ...:  print False 
    ...: 
False 
2

같은 검사를 할 경우에도 일이 "true"로 진리 값이 점을 유의해야한다, 그들은 == True 필요는 없습니다.

["hi"] == True 
// False 

if ["hi"]: 
    print("hello") 
// prints hello 
3

당신이 할 때 : 예를 들어

w = [] 
if w: 
    print "Truthy" 
else: 
    print "Falsy" 

중요한 것은주의해야 할 당신이 부울 강제 변환 된 if 절에서 테스트하고 어떤 점이다. 그것은 명시 적으로 만들려면 :

w = [] 
if bool(w): 
    print "Truthy" 
else: 
    print "Falsy" 

사과에 사과를 비교하기 위해 다음 True["sword"]를 비교하고 싶지 않아요. 당신은 당신이 그것을 직접

>>> weapon = [] 
>>> bool(weapon) == True 
False 
>>> weapon.append("sword") 
>>> bool(weapon) == True 
True 

당신이 if 또는 while를 사용하여 조건을 테스트

bool로의 전환은 비교하려는 경우 bool()를 사용할 필요가

bool(["sword"]) == True 
# True 
1

문서 sa "모든 객체는 또는 ['whatever'] == True이 아니고 진위 값"을 테스트 할 수 있습니다. 문서 "에 지정된대로 객체를 테스트해야합니다. if 또는 while 조건 또는 부울 연산의 피연산자로 사용합니다..