• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python函数的参数进阶-关于不可变和可变的参数会不会影响到函数外部的实参变量的问题

python 搞java代码 3年前 (2022-06-26) 36次浏览 已收录 0个评论

一、在函数外部,针对参数应用赋值语句,不会批改到内部的实参变量

问题:在函数外部,针对参数应用赋值语句,会不会影响调用函数时传递的实参变量

答案:不会

无论传递的参数是可变还是不可变,只有针对参数应用赋值语句,会在函数外部批改局部变量的援用,不会影响到内部变量的援用。

代码体验:

def demo(num):
    print("函数外部的代码")
    #  在函数外部,针对参数应用赋值语句,不会批改到内部的实参变量
    num = 100
    print(num)
    print("函数代码实现")


gl_num = 50
demo(gl_num)
print(gl_num)

执行后果:

减少可变类型的参数代码体验:

def demo(num, num_list):
    print("函数外部的代码")

    # 在函数外部,针对参数应用赋值语句,不会批改到内部的实参变量
    num = 100
    num_list = [1, 2, 3]

    print(num)
    print(num_list)

    print("函数代码实现")


gl_num = 50
gl_list = [10, 20, 30]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)

执行后果如图:

二、在函数外部,应用办法批改可变参数,会影响内部实参

问题:如果传递的参数是可变类型,在函数外部,应用办法批改了数据的内容,同样会影响到内部的数据

代码体验:

def demo(num_list):
    print("函数外部的代码")
    # num_list = [10, 20, 30]
    # 应用办法批改列表的内容
    num_list.append(40)  # num_list = [10, 20, 30, 40]
    print(num_list)

    print("函数代码实现")


gl_list = [10, 20, 30]
demo(gl_list)
print(gl_list)

执行后果如图:

本人能够尝试一下依照代码演练一下代码执行的程序,就能够晓得是如何扭转的了。这里简略的叙述一下以上代码的执行流程。

执行流程:

代码程序自上而下执行,来到第一行代码,发现函数定义间接向下寻找,来到第11行,这行定义了一个列表,列表等号左边中保留了数据10,20,30,等号右边用一个变量gl_list来记录这个列表,第11行代码实现之后持续向下执行来到第12行,第12行是函数的调用,调用函数的时候把全局变量gl_list的援用传递到函数外部,来到第1行代码,传递到函数外部Python的解释器会在函数外部再定义一个叫num_list的局部变量,让这个局部变量同样援用了内部的10,20,30列表。此时,在函数外部持续向下执行来到第5行,关键时刻到了,在第5行并没有应用过赋值语句,只是让num_list调用了append()这个办法,而调用append()办法并不会批改这个10,20,30列表的援用,只是会在列表的开端再追加一个数字40,追加实现咱们在打印这个列表时就能够看到是10,20,30,40,同时当函数执行实现返回到主程序中在代码第13行输入全局列表时,gl_list当初指向的列表内容是10,20,30,40,所以最初打印的是10,20,30,40。

三、列表应用+=,实质上是调用extend办法,不会批改变量的援用

在python中,列表变量调用+=,实质上是在执行列表变量的extend办法,不会批改变量的援用。

extend办法会把另外一个列表的内容整合到以后的列表当中。

代码示例:(数字应用+=)

def demo(num):
    print("函数开始")
    # num=num+num
    # 实质上是进行相加的操作,等号右边的num和等号左边的num进行相加,相加的后果再赋值给等号的左侧num
    num += num
    print(num)
    print("函数实现")


gl_num = 10
demo(gl_num)
print(gl_num)

执行后果:

代码示例:(列表应用+=)

def demo(num, num_list):
    print("函数开始")
    # num=num+num
    num += num
    # 列表变量应用+=不会坐相加再赋值的操作
    # num_list=num_list+num_list
    # 实质上是在调用列表的extend办法
    num_list += num_list
    # num_list.extend(num_list)
    print(num)
    print(num_list)
    print("函数实现")


gl_num = 10
gl_list = [1, 2, 3]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)

执行后果:

以上列举的三个方面就是对于函数的参数进阶局部,对于不可变和可变的参数会不会影响到函数内部的实参变量的问题就介绍到这里吧,有不了解的能够去找其余的对于这方面呢的Python基础教程查看学习。

文章借鉴起源:www.gaodaima.com/document-column-python.html


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python函数的参数进阶-关于不可变和可变的参数会不会影响到函数外部的实参变量的问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址