【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)深拷贝示例
内存分析
【Python基础避坑】函数内存底层分析,全局变量/局部变量,参数传递,浅拷贝/深拷贝相关推荐
- Python基础day05【函数应用:学生管理系统、拆包、今日总结】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...
- Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...
- python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....
python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 函数,就是一个代码块,这个代码块是别人写好的.我们调用就可以. 函数也可以称为方法. 1.函数语法定义 ...
- Python训练营—Tesk3—Python基础进阶—从函数到高级魔方方法
Python基础进阶--从函数到高级魔方方法 目录 Python基础进阶--从函数到高级魔方方法 一.函数 1.函数的定义 2.函数的调用 3.函数参数 4.变量作用域 ...
- python什么元素为真_如何使用Python基础内置函数
如何使用Python基础内置函数 发布时间:2020-08-05 13:46:59
- python中递归函数的基例_详谈Python基础之内置函数和递归 Python递归和循环的区别...
Python 递归函数基例 2. 关于递归函数基例的说明,以下选项中错误的是 A 递归函数的基例决定所谓基例就是不需要递归就能求解的,一般来说是问题的最小规模下的解. 例如:斐波那契数列递归,f(n) ...
- 【Python基础】reduce函数详解
转载请注明出处:[Python基础]reduce函数详解 reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中. reduce函数先从列表(或序列 ...
- Python程序设计与科学计算精录总结Episode.2 Python基础语法:函数、模块、内置数据结构、面向对象知识总结(基于Michael导师Python课程与VS2019)
Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文档编写.运行代码和展示结果.这个名字就很讲究,Jupyter改自木星的英文单词Jupiter,其中包 ...
- python入门之函数调用第二关_猪行天下之Python基础——5.1 函数(上)
内容简述: 1.函数定义 2.形参与实参 3.关键字参数与默认参数 4.可变参数 5.全局变量与局部变量 6.内部函数 7.闭包 8.lambda表达式 9.递归 1.函数定义 我们可以将一些实现特定 ...
最新文章
- 机器学习四剑客2——Matplotlib
- java jsp setAttribute setParameter 区别
- 【JAVA】大整数数据量排序
- linux源代码调用,linux – 哪里可以找到系统调用源代码?
- SpringBoot集成Mybatis(0配置注解版)
- 树型列表结构宽度调整_Material Design 网格列表
- java调取对方接口_java中如何调用对方接口
- python2升级_Python2 升级 Python3
- 软件测评师之2021软件测评师新大纲《软件评测师教程(第2版)》(四)
- 汤家凤高等数学2020年基础课手写笔记汇总
- 10.5NOIP模拟考 dfs序+贪心
- eclipse的优缺点
- 使jira支持reopen率的统计
- 众筹php,PHP众筹网源码 众筹网源码
- 到底什么是STN技术?
- 补充:Log4j2日志文件,RollingFile的文件滚动更新机制;
- 设计模式-责任链模式变体之管道模式
- 计算机网络 chapter 7 网络安全
- 【夏令营QA】2021年中国人民大学信息学院 | 高瓴人工智能学院夏令营经验分享帖
- 爬虫漫游指南:瑞数的反调试陷阱
热门文章
- java比较两个对象重写,不重写equals进行两个对象间的深度比较
- L1-045. 宇宙无敌大招呼
- 模拟赛-20190114-新魔法(distance)
- 推荐一款cpp解析json工具--rapidjson
- 【Boost】boost库中thread多线程详解9——thread_specific_ptr线程局部存储
- 使用Packet.dll和npf.sys实现原始数据包的发送和接收
- live555 源码分析: SETUP 的处理
- SurfaceTexture
- 分布式系统概念 | 分布式锁:数据库、Redis、Zookeeper解决方案
- C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr