я заметил, что сопоставление пустого DICT не работает, просто сопоставляя {} , как это происходит для списка s.
Согласно моему наивному подходу, неэмпт sy-prey (python 3.10.4. PrettyPrint-Override ">
Код: Выделить всё
def match_empty(m):
match m:
case []:
print("empty list")
case {}:
print("empty dict")
case _:
print("not empty")
< /code>
match_empty([]) # empty list
match_empty([1, 2]) # not empty
match_empty({}) # empty dict
match_empty({'a': 1}) # empty dict
< /code>
Сопоставление конструкторов даже нарушает пустое сопоставление списка: < /p>
def match_empty(m):
match m:
case list():
print("empty list")
case dict():
print("empty dict")
case _:
print("not empty")
< /code>
match_empty([]) # empty list
match_empty([1, 2]) # empty list
match_empty({}) # empty dict
match_empty({'a': 1}) # empty dict
< /code>
Вот решение, которое работает так, как я ожидаю: < /p>
def match_empty(m):
match m:
case []:
print("empty list")
case d:
if isinstance(d, dict) and len(d) == 0:
print("empty dict")
return
print("not empty")
< /code>
match_empty([]) # empty list
match_empty([1, 2]) # not empty
match_empty({}) # empty dict
match_empty({'a': 1}) # not empty
Почему мои первые 2 подходы не работают (как и ожидалось)?>
Подробнее здесь: https://stackoverflow.com/questions/753 ... dictionary