如果 python 函数返回多个值,我该如何使用它的返回值? [复制]

Posted

技术标签:

【中文标题】如果 python 函数返回多个值,我该如何使用它的返回值? [复制]【英文标题】:How do I use what's returned by a python function if it return more than one value? [duplicate] 【发布时间】:2020-06-20 22:17:16 【问题描述】:

所以我有这个代码:

def validate_username(username):
    find_username = cursor.execute("SELECT username FROM user WHERE username = ?", (username, ))
    if find_username.fetchone() is not None:
        username_is_valid = False
        invalid_reason = 'Username already exists'
    elif len(username) > 255:
        username_is_valid = False
        invalid_reason = 'Invalid format'
    elif not match(r"[^@]+@[^@]+\.[^@]+", username):
        username_is_valid = False
        invalid_reason = 'Username must be an email address'
    else:
        username_is_valid = True
        invalid_reason = None
    return username_is_valid, invalid_reason

很明显,它将返回其中之一:

(False, 'Username already exists')
(False, 'Invalid format')
(False, 'Username must be an email address')
(True, None)

现在我想做的是将这两个参数传递给变量,以便它们可以被重用、打印等,但由于某种原因,我真的无法在网上找到如何做到这一点;我假设是因为我没有正确表达我的问题。也许这里有人可以提供一些指导?

基本上这里的目标是使用用户名运行函数,然后如果用户名无效,打印为什么无效,如果有效,然后继续。

【问题讨论】:

Python 函数只能返回一个值。 (False, 'Username already exists') 是一个单一的值,它是一个 tuple,您可以像使用任何其他 tuple 一样使用它。 【参考方案1】:

只需将输出分配给两个变量,如下所示:

username_is_valid, invalid_reason = validate_username(username)

或者,如果将输出分配给单个变量,则可以使用切片访问其元素:

username_validation = validate_username(username)
username_is_valid = username_validation[0]
invalid_readon = username_validation[1]

【讨论】:

【参考方案2】:

术语是tuple(x, y)是一个元组,您可以像访问列表一样访问这些值,这意味着(x, y)[0]返回x,(x, y)[1]返回y

【讨论】:

以上是关于如果 python 函数返回多个值,我该如何使用它的返回值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用具有多个返回值的python赋值运算符

如何从 Oracle 存储过程中获取两个返回值

Stat() 函数返回值 -1,因此无法访问文件属性。我该如何纠正?

如果我需要在锁定互斥锁后解锁它,我该如何返回一个值?

python 基础---函数

如何从 FragmentPagerAdapter 返回多个片段