700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【Python基础避坑】函数内存底层分析 全局变量/局部变量 参数传递 浅拷贝/深拷贝

【Python基础避坑】函数内存底层分析 全局变量/局部变量 参数传递 浅拷贝/深拷贝

时间:2019-03-29 08:54:23

相关推荐

【Python基础避坑】函数内存底层分析 全局变量/局部变量 参数传递 浅拷贝/深拷贝

老高说,基本功不扎实会在工作中遇到很多的坑,非常同意…

函数定义示例

1.含有返回值

# -*-coding:utf-8-*-def add(a, b):'''两数相加'''sum = a + breturn sum c = add(1, 2)print c

2.不含有返回值

# -*-coding:utf-8-*-def add(a, b):'''两数相加'''sum = a + bprint sumreturnadd(1, 2)

3.返回一个列表

# -*-coding:utf-8-*-def add(a, b):'''两数相加'''sum = a + bprint sumreturn [sum, a, b]res = add(1, 2)print res# 输出:[3, 1, 2]

要点

1.我们使用def来定义函数,python执行def时,会创建一个函数对象,并绑定到函数名变量上。

2.如果打印函数的type,结果是<class 'function'>

3.括号是调用符(call)

内存说明

函数也是对象,内存底层分析

python函数被调用的时候,在栈空间中,会创建栈帧,保存局部变量的值。函数调用结束后,栈帧被销毁。

局部变量与全局变量的保存位置不同。不能再函数中直接调用函数外面声明的变量。

如果要在函数内改变全局变量的值,需要增加global关键字声明

变量的作用域–全局变量和局部变量

# -*-coding:utf-8-*-c = 100def add(a, b):global cc = 200returnadd(1, 2)print c# 输出:200

局部变量和全局变量效率测试

参数的传递

传递不可变对象的引用

注意:以int为例,Java在传参的时候就会创建一个新的对象,而python在传参的时候传递的还是原来的对象的引用,只有在赋值的时候才会进行新对象的创建。

浅拷贝和深拷贝

(1)浅拷贝示例

内存分析

(2)深拷贝示例

内存分析

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。