为了账号安全,请及时绑定邮箱和手机立即绑定

python函数中的全局和局部

python函数中的全局和局部

慕码人8056858 2021-06-03 21:09:47
我无法理解 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,参数名称是函数的局部名称,因此在函数内重新绑定参数只会更改该名称在函数内指向的对象,它对传递的对象没有影响。


查看完整回答
反对 回复 2021-06-06
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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

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

就我所见,'d' 并未真正定义为变量,而是定义为函数参数,如called(d). 这可能已经改变called(blabla),你的功能会表现得完全相同的方式,如果你的函数中,也发生了变化d[0],以blabla[0]

这意味着当您调用该函数时,其中包含 'd' 的任何内容都将被您调用的内容替换。在这种情况下,参数已更改为变量 a,然后按照您的说明执行函数。

为了定义一个变量,你必须使用'='。


查看完整回答
反对 回复 2021-06-06
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信