将多个变量分配给函数[重复]
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!'
是元组的一个例子 打包:值12345
、54321
和'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 个元素)这有帮助吗?
【讨论】:
以上是关于将多个变量分配给函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章