繁体   English   中英

python函数中的全局和局部

[英]Global and local in python function

我无法理解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)”解决了这个问题。 但我想了解逻辑。

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

OTHO,参数名称是函数的局部变量,因此在函数内重新绑定参数只会更改该名称指向函数内的对象,而对传递的对象没有影响。

有关更深入的解释,最佳参考是Ned Batchelder的文章

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

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

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

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

为了定义变量,您必须使用'='。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM