Как использовать оператор assert для подтверждения типа набора python3 - PullRequest
1 голос
/ 08 ноября 2019

Как мне убедиться, что параметры этой функции должны быть типа set?

Я попытался использовать метод isinstance, помещенный в оператор assert, чтобы проверить, что оставшиеся и используемые параметрытолько типы набора, но это не удалось.

def listAllSubset(remaining = set(), used = set()):
    assert(isinstance(remaining, set))
    assert(isinstance(used, set))

    if (len(remaining) == 0):
        print(used)
    else:
        element = remaining.pop()
        listAllSubset(remaining, used)
        listAllSubset(remaining, used.add(element))

Я хотел бы увидеть, как обеспечить, чтобы параметры remaining и used были только наборами.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

isinstance является полномочным, точка находится в последней строке кода,

это код

def listAllSubset(remaining = set(), used = set()):
    assert(isinstance(remaining, set))
    assert(isinstance(used, set))

    if (len(remaining) == 0):
        print(used)
    else:
        element = remaining.pop()    # OK: element will be None
        listAllSubset(remaining, used)   # OK: remaining == used == set() 
        listAllSubset(remaining, used.add(element))    # Error: used.add(element) will return None, and the None will give to keyword argument "used", then "assert" will raise a AssertionError.

if __name__ == "__main__":
    listAllSubset()

ОК, код последней строки listAllSubset(remaining, used.add(element)) как равный listAllSubset(set(), None), тогда assert(isinstance(used, set)) вызовет ошибку AssertionError


, просто посмотрите этот код

used = set()
flag = used.add('_')
print(flag)    # print value of flag

Нет


изменено

Я изменяю код, возможно, он может удовлетворить ваши потребности,

def listAllSubset(remaining = set(), used = set()):
    assert(isinstance(remaining, set))
    assert(isinstance(used, set))

    if (len(remaining) == 0):
        print(used)
    else:
        element = remaining.pop()
        listAllSubset(remaining, used)
        used.add(element)
        listAllSubset(remaining, used)

пожалуйста, прости меня за мой плохой английский, английский такой сложный !!

0 голосов
/ 08 ноября 2019

Не эффективный, но хитрый способ:

def listAllSubset(remaining = set(), used = set()):
    remaining.discard
    used.discard
    ...
...