我无法理解 python 中的全局和局部变量,尤其是函数。我看了很多例子,但都没有在函数调用中清楚地解释。我的示例代码如下:def called(d): del d[0] b=[1] return bdef 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 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
Python 永远不会隐式复制任何东西,当你将一个对象(Python 中的一切都是一个对象)传递给一个函数时,你在函数中拥有的是你传入的对象,所以如果你改变它,变化将在函数之外看到。
OTHO,参数名称是函数的局部名称,因此在函数内重新绑定参数只会更改该名称在函数内指向的对象,它对传递的对象没有影响。
扬帆大鱼
TA贡献1799条经验 获得超9个赞
基本上,全局变量是一个可以在任何地方访问的变量,无论它是否在函数(或其他任何东西)中。
局部变量是仅存在于相关函数中的变量。您不能在其他任何地方声明或访问它。但是,您可以通过将其显式包含在函数中来使其成为全局变量。
就我所见,'d' 并未真正定义为变量,而是定义为函数参数,如called(d)
. 这可能已经改变called(blabla)
,你的功能会表现得完全相同的方式,如果你的函数中,也发生了变化d[0]
,以blabla[0]
。
这意味着当您调用该函数时,其中包含 'd' 的任何内容都将被您调用的内容替换。在这种情况下,参数已更改为变量 a,然后按照您的说明执行函数。
为了定义一个变量,你必须使用'='。
添加回答
举报
0/150
提交
取消