向一个函数分配多个变量

时间:2019-02-05 16:37:02

标签: python function variables

我这里有些我不懂的东西。我的意思是,它有效,但是我想了解幕后发生的事情:

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 个答案:

答案 0 :(得分:0)

select * from tabla order by 1 offset 0 rows fetch next 50 rows only; 被执行一次。您看到的构造称为拆包,或多或少等同于

pickle.load(...)

(实际上,拆包还有另外一件事:它确保result = pickle.load(f, encoding="latin1") training_data = result[0] validation_data = result[1] test_data = result[2] 恰好具有3个元素)这有帮助吗?

答案 1 :(得分:0)

否,该功能没有执行三次, 但会同时返回值。

question可以为您提供帮助。

答案 2 :(得分:0)

这称为序列拆包。您可以在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()