返回语句在Python 3.4.3中不起作用

时间:2015-07-03 14:08:40

标签: python

由于某种原因,当另一个函数访问时,Python解释器不会修改函数中的返回语句值。

x=10

def example():

    global_variable_x = x
    print(" i know i can access it", global_variable_x)
    global_variable_x +=5
    print(" woa, i can modify it" ,global_variable_x)
    return global_variable_x

example()

def modify_another_function():
    return 10*example()

modify_another_function()

3 个答案:

答案 0 :(得分:1)

该计划按预期运作。

您定义global_variable_x = x并将其命名为global_variable,但实际上它是一个局部变量。能够保持数据持久性的最简单方法是修改x或使用类并将其写入类变量。

为您提供一些更详细的信息:

    x=10

def example():

    global_variable_x = x
    print(" i know i can access it", global_variable_x)
    global_variable_x +=5
    print(" woa, i can modify it" ,global_variable_x)
    return global_variable_x
 example()

它可能是抽象的,但只是为了给你一些想法:

  • 您将把x = 10放在编程堆栈上。
  • 您将调用example()

  • example()函数调用将为其创建一个新的堆栈帧 函数调用放置global_variable_x

  • 当函数调用命中堆栈框架return语句时 被删除,唯一剩下的就是x
  • 第二次运行example()时,它将创建一个新堆栈 框架,再次放置global_variable_x并再次实例化它 值为x,为10。

此处的问题与范围界定有关,建议您查看一下:this blog

答案 1 :(得分:0)

内部打印示例将始终显示相同的内容。

这是因为在example的上下文中没有任何变化。

差异仅在examplemodify_another_function之外可见。与{10}的乘法发生在example之外,如果您将modify_another_function更改为此,则会看到差异:

def modify_another_function():
    return print 10*example()

答案 2 :(得分:0)

我认为你的意思是你得到的是:

 i know i can access it 10
 woa, i can modify it 15
 i know i can access it 10
 woa, i can modify it 15

我假设你想要类似的东西:

 i know i can access it 10
 woa, i can modify it 15
 i know i can access it 15
 woa, i can modify it 20

你可以这样做:

x=10

def example():
    print(" i know i can access it", x)
    x +=5
    print(" woa, i can modify it", x)
    return x

example()

def modify_another_function():
    return 10*example()

modify_another_function()

但是你不能按照你的方式去做,因为数字是值和不可变的。因此,如果你复制它们,你只是复制它们的值,而不是它们的引用。