python函数中的全局和局部

时间:2018-08-29 08:56:47

标签: python python-3.x

我无法理解python中的全局和局部变量,尤其是函数。我看了很多示例,但是所有示例都没有在函数调用中清楚地说明。我的示例代码如下:

def called(d):
    del d[0]
    b=[1]
    return b

def main():
    a=[0,1,2,3]
    print("first ", a)
    c=called(a)
    print("second ", a)

main()

输出:

first  [0, 1, 2, 3]
second  [1, 2, 3]

我希望“ a”主要是局部变量。当我调用“被调用”函数时,a复制到d。 d在“被叫”处是局部的。但是现实是不同的。我用“被称为(a.copy)”解决了这个问题。但我想了解逻辑。

2 个答案:

答案 0 :(得分:2)

Python永远不会隐式复制任何内容,当您将一个对象(Python中的所有内容都是一个对象)传递给函数时,您在函数中所具有的就是传递的对象,因此,如果您对其进行了更改,则更改将在外部看到功能。

OTHO,参数名称对于函数而言是本地的,因此在函数内重新绑定参数只会更改此名称指向函数内的对象,而对传递的对象没有影响。

有关更深入的解释the best reference is Ned Batchelder's article here

答案 1 :(得分:-1)

基本上,全局变量是一个可以在任何地方访问的变量,无论它是否在函数(或其他任何函数)中。

局部变量是仅存在于相关函数中的局部变量。您无法在其他任何地方声明或访问它。但是,您可以通过在函数中显式包含它来使它成为全局的。

据我所知,'d'并没有真正定义为变量,而是定义为函数参数,如called(d)所示。可以将其更改为called(blabla),如果您在函数中也将d[0]更改为blabla[0],则函数的行为也将相同。

这意味着当您调用该函数时,其中任何带有“ d”的东西都将被您所调用的东西所代替。在这种情况下,参数已更改为变量a,然后按照您所说的执行函数。

要定义变量,必须使用'='。