老高说,基本功不扎实会在工作中遇到很多的坑,非常同意…
函数定义示例
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)深拷贝示例
内存分析