将多个变量分配给函数[重复]

Posted

技术标签:

【中文标题】将多个变量分配给函数[重复]【英文标题】:Assigning of multiple variables to a function [duplicate] 【发布时间】:2019-06-29 13:06:49 【问题描述】:

我在这里有一些我不明白的地方。我的意思是,它有效,但我想了解幕后发生的事情:

def load_data():
    f = gzip.open('mnist.pkl.gz', 'rb')
    training_data, validation_data, test_data = pickle.load(f, encoding="latin1")
    f.close()
    return (training_data, validation_data, test_data)

所以,我想了解的是,在第 3 行,有 3 个变量(training_data、validation_data 和 test_data)。这些被分配给一个功能!?我的问题是,它们和/或功能会发生什么?该函数是否执行了 3 次?或者变量只是一个可以调用的函数?还是将加载的数据分成三部分,其中三分之一分配给每个变量?我是菜鸟,所以这可能很愚蠢,但请帮助我!

【问题讨论】:

【参考方案1】:

这称为序列解包。你可以在Python documentation. 中找到它,上面写着:

语句t = 12345, 54321, 'hello!'是元组的一个例子 打包:值1234554321'hello!' 一起打包在一个 元组。反向操作也是可以的:

x, y, z = t

这被恰当地称为序列解包,适用于右侧的任何序列。

该语言的这一特性使得编写看似返回多个结果的函数变得容易(尽管它们实际上只是返回一个元组),例如

def get_three_numbers():
    return 5, 7, 11

a, b, c = get_three_numbers()

【讨论】:

【参考方案2】:

no 函数不执行 3 次, 但同时返回值。

这个question可以帮助你。

【讨论】:

【参考方案3】:

pickle.load(...) 被执行一次。您看到的构造称为unpacking,或多或少等同于

result = pickle.load(f, encoding="latin1")
training_data = result[0]
validation_data = result[1]
test_data = result[2]

(实际上解包还有一件事:它确保result 正好有3 个元素)这有帮助吗?

【讨论】:

以上是关于将多个变量分配给函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从函数调用分配多个返回值的性能[重复]

VBA:无法将函数的返回值分配给变量[重复]

将 Firebase Firestore 文档值分配给 swift 变量 [重复]

地理位置 - 将纬度和经度值分配给变量[重复]

Firestore 查询 - 将重复的查询元素分配给变量

将shell命令的输出分配给变量[重复]