사전이 비어 있는지 확인하려고하지만 제대로 작동하지 않습니다. 그냥 건너 뛰고 메시지를 표시하는 것을 제외 하고는 온라인 으로 표시합니다. 왜 어떤 아이디어?
def isEmpty(self, dictionary):
for element in dictionary:
if element:
return True
return False
def onMessage(self, socket, message):
if self.isEmpty(self.users) == False:
socket.send("Nobody is online, please use REGISTER command" \
" in order to register into the server")
else:
socket.send("ONLINE " + ' ' .join(self.users.keys()))
답변
빈 사전 은 파이썬에서 평가됩니다False
.
>>> dct = {}
>>> bool(dct)
False
>>> not dct
True
>>>
따라서 isEmpty
기능이 필요하지 않습니다. 당신이해야 할 일은 :
def onMessage(self, socket, message):
if not self.users:
socket.send("Nobody is online, please use REGISTER command" \
" in order to register into the server")
else:
socket.send("ONLINE " + ' ' .join(self.users.keys()))
답변
dict이 비어 있는지 확인할 수있는 세 가지 방법이 있습니다. 그래도 첫 번째 방법을 선호합니다. 다른 두 가지 방법은 너무 장황합니다.
test_dict = {}
if not test_dict:
print "Dict is Empty"
if not bool(test_dict):
print "Dict is Empty"
if len(test_dict) == 0:
print "Dict is Empty"
답변
dict = {}
print(len(dict.keys()))
길이가 0이면 dict가 비어 있음을 의미합니다.
답변
빈 dict를 확인하는 간단한 방법은 다음과 같습니다.
a= {}
1. if a == {}:
print ('empty dict')
2. if not a:
print ('empty dict')
방법 1st가 a = None 인 경우보다 더 엄격하지만 방법 1은 올바른 결과를 제공하지만 방법 2는 잘못된 결과를 제공합니다.
답변
사전은 False
빈 사전 및 비어 있지 않은 사전으로 평가되는 부울로 자동 캐스트 될 수 있습니다 True
.
if myDictionary: non_empty_clause()
else: empty_clause()
이것이 너무 관용적으로 보이지 않으면 len(myDictionary)
0 또는 set(myDictionary.keys())
빈 세트를 테스트하거나과의 동등성을 테스트 할 수도 있습니다 {}
.
isEmpty 함수는 불필요 할뿐만 아니라 구현에 prima-facie를 발견 할 수있는 여러 문제가 있습니다.
- 이
return False
문장은 한 단계 너무 깊이 들여 쓰기되었습니다. for 루프 외부에 있어야하며for
명령문 과 같은 레벨에 있어야 합니다. 결과적으로, 키가 존재하는 경우 코드는 임의로 선택된 하나의 키만 처리합니다. 키가 존재하지 않으면이 함수는를 반환None
하고 부울 False로 캐스트됩니다. 아야! 빈 사전은 모두 거짓 음성으로 분류됩니다. - 사전이 비어 있지 않으면 코드는 하나의 키만 처리하고 캐스트 된 값을 부울로 리턴합니다. 호출 할 때마다 동일한 키가 평가된다고 가정 할 수도 없습니다. 따라서 오 탐지가있을 것입니다.
return False
명령문 의 들여 쓰기를 정정 하고for
루프 외부로 가져 오십시오 . 그런 다음 모든 키 의 부울 OR 또는False
사전이 비어있는 경우입니다. 여전히 당신은 오탐과 오탐을 가질 것입니다. 증거를 찾기 위해 다음 사전에 대해 정정하고 테스트하십시오.
myDictionary={0:'zero', '':'Empty string', None:'None value', False:'Boolean False value', ():'Empty tuple'}
답변
get ()을 사용할 수도 있습니다. 처음에는 키가 있는지 확인하는 것만 믿었습니다.
>>> d = { 'a':1, 'b':2, 'c':{}}
>>> bool(d.get('c'))
False
>>> d['c']['e']=1
>>> bool(d.get('c'))
True
get과 함께 좋아하는 것은 예외가 발생하지 않으므로 큰 구조를 쉽게 통과 할 수 있다는 것입니다.
답변
평등 테스트를 사용하지 않는 이유는 무엇입니까?
def is_empty(my_dict):
"""
Print true if given dictionary is empty
"""
if my_dict == {}:
print("Dict is empty !")