我无法理解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)”解决了这个问题。但我想了解逻辑。
答案 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,然后按照您所说的执行函数。
要定义变量,必须使用'='。