艰苦地学习Python-练习24

艰苦地学习Python-练习24,python,function,python-2.7,Python,Function,Python 2.7,额外学分问题: 问:为什么您要调用变量jelly\u beans,而不是名称beans 以后 答:这是函数工作原理的一部分。记住,在 函数变量是临时的。当你归还它时,它就可以 分配给以后的变量。我正在创建一个名为 bean来保存返回值 “函数中的变量是临时的”是什么意思?这是否意味着返回后变量无效?似乎在函数缩进之后,我无法打印函数部分中使用的变量 从答案中可以看出,“当您返回它时,可以将其分配给一个变量以供以后使用”。有人能解释一下那个句子吗 print "Let's practice eve

额外学分问题:

问:为什么您要调用变量
jelly\u beans
,而不是名称
beans
以后

答:这是函数工作原理的一部分。记住,在 函数变量是临时的。当你归还它时,它就可以 分配给以后的变量。我正在创建一个名为
bean
来保存返回值

“函数中的变量是临时的”是什么意思?这是否意味着
返回后变量无效?似乎在函数缩进之后,我无法打印函数部分中使用的变量

从答案中可以看出,“当您返回它时,可以将其分配给一个变量以供以后使用”。有人能解释一下那个句子吗

print "Let's practice everything."
print 'You\'d need to know \'bout escape with \\ that do \n newlines and \t tabs.' 


poem = """
\tThe lovely world
with logic so firmly planted
cannot discern \n the needs of love
nor comprehend passion from intuition
and requires an explanation
\n\t\twhere there is none.
"""

print "-------------"
print poem
print "-------------" 


five = 10 - 2 + 3 - 6 
print "This should be five: %s" % five 

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) 

start_point = start_point / 10 

print "We can also do that this way:" 
print "We'd have %d beans, %d jars, and %d crates." % secret_formula(start_point)
这是否意味着
返回后变量无效

对,;当函数结束时,所有本地范围的名称(
jelly_beans
,在您的示例中)将不再存在。名称
jelly\u beans
只能在
secret\u formula
中访问

似乎在函数缩进之后,我无法打印函数部分中使用的变量

您无法从函数外部访问它们,即使是通过函数名(因此
jelly_bean
secret_formula.jelly_bean
都不允许您访问该值)。这实际上是一件好事,因为这意味着您可以在函数中封装内部逻辑,而无需将其暴露给程序的其余部分

从答案中可以看出,“当您返回它时,可以将其分配给一个变量以供以后使用”

只删除函数中的本地名称,不一定删除它们引用的对象。当您
返回果冻豆、罐子、板条箱时,这会将对象(而不是名称)传递回任何称为
秘方的对象。您可以在函数外为对象指定相同的名称或完全不同的名称:

foo, bar, baz = secret_formula(...)

是Python中命名工作原理的有用介绍。

由于Python的作用域规则,名称
jelly\u beans
仅在
secret\u formula
函数中有效。这就是您不能在函数外部通过类似于
print jelly\u beans
的语句引用它的原因

请注意,
secret\u formula
向其调用者返回一个元组。因此,键入时:

beans, jars, crates = secret_formula(start_point) 
指定对
secret\u formula
(使用特定参数)的调用,并将元组的内容分配给三个不同的名称

  • jelly\u beans
    的返回值分配给
    beans
  • jars
    的返回值分配给
    jars
  • 板条箱
    的返回值分配给
    板条箱

在后两种情况下,重要的是要注意,即使名称相同,底层对象也可能不相同(但不是由于范围规则-请参阅注释)。

“即使名称相同,底层对象也可能不相同”-我不确定您的意思。Python函数将对对象的引用传递回调用方,因此它们将是完全相同的对象。我认为,当赋值的lhs是对象属性时,被重写的
\uuuuuuu setitem\uuuuu
可能完全执行其他操作,例如,将新构造的对象的名称分配给lhs。这是真的,但不是你写的,也不适用于这个案例。没错,它不适用于这个特定的问题-澄清。