变量一套三个?

时间:2014-11-20 06:28:19

标签: python

我开始从教程中学习Python,我不确定这段代码是如何工作的。所以我们在函数中有return jelly_beans, jars, crates;然而,稍微低于我们看到一组名为beans, jars, crates的新变量。这是否意味着来自jelly_beans, jars, crates的{​​{1}}可以替换为任何三个组合?有人可以为我打破这个吗?

return

4 个答案:

答案 0 :(得分:1)

该函数返回tuple

return jelly_beans, jars, crates

或更明确地

return (jelly_beans, jars, crates)

下一部分称为元组解包

sometuple = secret_formula(start_point)
beans, jars, crates = sometuple

因为你的函数返回一个3的元组,所以它可以解包为3个变量

您也可以一步完成此操作

beans, jars, crates = secret_formula(start_point)

答案 1 :(得分:0)

formula = secret_formula(start_point)
print type(formula)  # <type 'tuple'>

所以当你返回它的return元组时。

beans, jars, crates = secret_formula(start_point)

通过这种方式,您可以使用tuple中的数据初始化这些变量,如下所示: -

In [6]: a, b, c = (1, 2, 3)

In [7]: a
Out[7]: 1

In [8]: b
Out[8]: 2

In [9]: c
Out[9]: 3

所以如果你做这样的事情,即使存储在一个变量中它也能正常工作,

print "We'd have {!r} formula" .format(formula)

答案 2 :(得分:0)

def secret_formula(started):
    jelly_beans = started * 500
    jars = jelly_beans / 1000
    crates = jars / 100
    return jelly_beans, jars, crates

start_point = 10000
beans, jars, crates = secret_formula(start_point)

print "With a starting point of: %d" % start_point
print "We'd have %d beans, %d jars, and %d crates." % (beans, jars, crates)

击穿:

  1. 将start_point定义为10,000
  2. 将其传递给secret_formula()
  3. 内部secret_formula是一个新的“范围” - 变量可以存在的地方。这就像在一个单向玻璃窗的房子里。您可以在范围外看到变量,但外部看不到。{范围部分存在,因此您可以使用相同的变量名称(如xy而不冲突}来使用不同的函数。
  4. 在secret_formula 范围中,创建变量jelly_beansjars以及crates并进行计算,并链接( bind )这些名字的结果数字。
  5. 在secret_formula中,将这三者合并为tuple。这就是jelly_beans, jars, crates通过在它们之间使用逗号来做的事情。元组是由几个组合在一起的元素的集合,为方便起见被视为一件事。你只能返回一件事,所以这是一个解决方法,返回三个数字作为一个东西。元组包含数字,而不是名称
  6. 在secret_formula中,返回元组并完成。
  7. Python清除secret_formula 范围并删除在其中运行的jelly_beansjars以及crates 名称就在这时候。该函数不再运行,其中使用的所有名称都“超出了范围”并被清理干净。
  8. 按功能输出的元组是一组三个数字。创建三个新变量名,将三个数字拆分,然后将数字绑定到 this 外部范围中的新名称。
  9.   

    这是否意味着返回的jelly_beans,jars,crate可以用三个组合替换?

    是的。 NB。当print打印“%d”时,它正在查找整数,因此您必须使用任意三个数字3,55,100或数字变量替换它们。

答案 3 :(得分:0)

python与其他语言(例如java和C#)之间的一个有趣区别是python可以返回几个结果,这就是我们所谓的元组

那么你的问题: 这是否意味着来自返回的jelly_beans,罐子,板条箱可以用三个组合替换?

我的回答是肯定的,

在代码之后:三个变量将被初始化,并且知道自己的类型......

beans, jars, crates = secret_formula(start_point)

如果secret_formula()函数返回为:

return 1, 'a', {'key':'value'}

也会使感官,豆类,罐子,板条箱分别知道它们是int,string和dict类型