Python参数传递

Python参数传递
在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="CJH"
以上代码中,[1,2,3] 是 List 类型,“CJH” 是 String 类型,而变量 a 是没有类型,它仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。

可更改(mutable)与不可更改(immutable)对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
不可变类型:变量赋值 a=10 后再赋值 a=5,这里实际是新生成一个 int 值对象 5,再让 a 指向它,而 10 被丢弃,不是改变 a 的值,相当于新生成了 a。
可变类型:变量赋值 l=[1,2,3,4] 后再赋值 l[2]=5 则是将 list l 的第三个元素值更改,本身l没有动,只是其内部的一部分值被修改了。

python 函数的参数传递:
不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 func(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 func(a) 内部修改 a 的值,则是新生成一个 a 的对象。
可变类型:类似 C++ 的引用传递,如 列表,字典。如 func(l),则是将 l 真正的传过去,修改后 func 外部的 l 也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

python传不可变对象实例
通过 id() 函数来查看内存地址变化:
def my_change(a):
    print(id(a))  # 指向的是同一个对象
    a = 10
    print(id(a))  # 一个新对象
a = 5
print(id(a))
my_change(a)

图片.png

可以看见在调用函数前后,形参和实参指向的是同一个对象(对象 id 相同),在函数内部修改形参后,形参指向的是不同的 id。

传可变对象实例
可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。如下为示例代码(代码可以在在线python3环境中运行):

def change_list(mylist):
    "修改传入的列表"
    mylist.append([1, 2, 3, 4])
    print("函数内取值: ", mylist)
    return
# 调用changeme函数
mylist = [10, 20, 30]
change_list(mylist)
print("函数外取值: ", mylist)

图片.png


1、本站资源长期持续更新。
2、本资源基本为原创,部分来源其他付费资源平台或互联网收集,如有侵权请联系及时处理。
3、本站大部分文章的截图来源实验测试环境,请不要在生产环境中随意模仿,以免带来灾难性后果。

转载请保留出处:  www.zh-cjh.com珠海陈坚浩博客 » Python参数传递

作者: cjh


手机扫一扫,手机上查看此文章:

一切源于价值!

其他 模板文件不存在: ./template/plugins/comment/pc/index.htm

未雨绸缪、居安思危!

数据安全、有备无患!

注意操作、数据无价!

一切源于价值!