如何使用assert语句来确认python3s的类型

2024-10-01 02:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

如何确保此函数的参数必须是set类型?你知道吗

我尝试使用assert语句中的isinstance方法来验证剩余的参数和使用的参数只是set类型,但是失败了。你知道吗

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))

我想看看如何确保只设置remainingused参数。你知道吗


Tags: 方法函数类型参数lenifdefassert
2条回答

不是一个有效的方法,而是一个棘手的方法:

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

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))将引发断言错误


看看这个密码

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

None


已更改

我改了密码,我的,它能满足你的需要

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)

请原谅我英语不好,英语太难了!!你知道吗

相关问题 更多 >