【问题标题】: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 次?或者变量只是一个可以调用的函数?还是将加载的数据分成三部分,其中三分之一分配给每个变量?我是菜鸟,所以这可能很愚蠢,但请帮助我!

【问题讨论】:

    标签: python function variables


    【解决方案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 个元素)这有帮助吗?

        【讨论】:

          猜你喜欢
          • 2016-09-23
          • 2019-07-21
          • 2013-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多