美文网首页
Python参数传递小结

Python参数传递小结

作者: 一念之动即是行 | 来源:发表于2019-05-22 10:22 被阅读0次

2016.06.14更新:
又踩坑了,百度后得到解决,参考链接:
python:函数传参是否会改变函数外参数的值

入参变化

当函数中传入可变对象时:

  • 函数体传入的参数 , 为函数体外变量引用的副本 .
  • 在函数体中改变变量指向的堆中的值 , 对函数外变量有效.
  • 在函数体中改变变量的引用 , 对函数外变量无效

e.g

def test1(a):
    b = [3, 2, 1]
    a = b  #不会改变

def test2(a):
    a.append(4)    #会改变

if __name__ == '__main__':
    a = [1, 2, 3]
    test1(a)
    print(a)    #[1, 2, 3]
    test2(a)
    print(a)    #[1, 2, 3, 4]

原文:

可变对象与不可变对象

  • 可变对象:dict、list、自定义对象等,修改时内存地址不会发生变化。在函数中对其进行修改会改变在函数外部时的值。
  • 不可变对象:tuple、str、int等,修改时内存地址会发生变化,即返回一个新的修改后的对象。在函数中对其进行修改不会改变在函数外部时的值。

参数传递

先来看一个例子:

def test(b=[]):
    print(id(b))
    b += [1] 
    print(b) 
    print(id(b)) 
test()  # [1]
test()  # [1, 1]
test()  # [1, 1, 1]

运行结果:

2392714224520
[1]
2392714224520
2392714224520
[1, 1]
2392714224520
2392714224520
[1, 1, 1]
2392714224520

可以看到,因为b的默认值[ ]是一个可变变量,故在每一次运行test函数时b的内存地址没有发生变化,导致值发生改变。
对比:

def test(b=1):
    print(id(b))
    b += 1
    print(b) 
    print(id(b)) 
test()  # 2
test()  # 2
test()  # 2

输出:

140716401815296
2
140716401815328
140716401815296
2
140716401815328
140716401815296
2
140716401815328

那么问题来了,在函数中设置了b的默认值,为什么没有每次运行都初始化一次呢?
原因是,在python中函数本身也是一个对象,这个对象只在定义的时候初始化一次,参数的默认值也随着只初始化一次,所以看到每次运行函数时b的内存地址都是一样的。

相关文章

  • Python参数传递小结

    2016.06.14更新:又踩坑了,百度后得到解决,参考链接:python:函数传参是否会改变函数外参数的值 入参...

  • Python的参数传递

    Python的参数传递概述 根据Python的官方文档,Python中的参数传递机制是所谓的pass by ass...

  • 2021-09-10

    python调用shell脚本 1. 传入参数 python文件 可以套用python传递参数,二次传递给shel...

  • python脚本传递参数

    给python程序传递参数 运行python脚本时有时需要执行实传递参数 在linux下: [root@Test ...

  • 抓取解析接口的视频真实地址(五)

    php调用python并传递参数

  • Python 函数的参数传递\*args和\**kwargs

    Python 函数的参数传递*args和**kwargs 参数传递机制具有值传递(int、float等值数据类型)...

  • Python函数参数传递机制(超级详细)

    Python中,函数参数由实参传递给形参的过程,是由参数传递机制来控制的。通过学习《Python函数值传递和引用传...

  • python参数

    python中参数传递有顺序传递,关键词传递,默认参数和不定长参数四种形式 顺序传递 顺序传递就是按照形参的顺序依...

  • 【react-native】小结

    【react-native】小结 一 底层 定义一个ui 调用 通过参数传递将参数: isShowShopInfo...

  • python的参数传递

    一、前言 在python中,函数参数的定义和传递有以下几种方式: 在python中,参数可以按照顺序传递,在调用函...

网友评论

      本文标题:Python参数传递小结

      本文链接:https://www.haomeiwen.com/subject/sbzjzqtx.html