第五章 函数---178页
函数 --- 递归 还有什么吗 参数,返回值
对哦其实,有了数据,数据类型,控制语句
就已经足够了 完全够解决很多的问题了 那为什么还要函数呢?函数拿来干嘛?
因为我们要少写一写重复的代码,然后函数就诞生了 我们把函数封装到里边
这样函数就是重用的模块了 也只是增加了函数调用,传递参数,返回计算结果
底层内存分析才是上道吗
值得一提的是,Python 中有一类函数称为匿名函数,除了没有函数名,与正常函数无异。
匿名函数语法格式为:lambda[arg1,arg2,...]:expression
匿名函数适用场合:代码中存在一次函数引用的场合
匿名函数调用方式:匿名函数定义时直接被调用
函数就是一个模块啊 就是把前面我们学习的数据,字典,列表,控制语句包裹起来
然后给个名字,当我们再次使用这个东西的时候,再调用 function 函数,功能
内置函数
标准库函数 import导入库
第三方库函数 python社区,下载安装之后,import语句导入
用户自定义函数
先定义后调用
万物皆对象 ----函数也是对象 栈 堆 内存存储
68. 形参和实参_文档字符串-函数注释
参数一定要对应,有就一定要传的,文档注释。help(函数名.__doc__)
69.返回值详解
可以有返回值,因为要对返回的值再进行操作嘛
还有一个功能就是结束函数执行 就是这两个作用
可以作为一个列表,元祖,字典返回的
70.函数也是对象_内存分析
我们可以看出变量c和pritn_star 都是指向了同一个函数对象,因此,执行
c(3),print_star(3) 的效果是完全一致的。圆括号意味着调用函数,没有圆括号
的情况下,python会把函数当做普通对象
定义函数的时候,对象已经建好了,所以每次调用的时候,不用再重建函数了
函数是对象,所有可以用作参数和返回值 内部的存储就容易理解了 递归,装饰器
71 全局变量 局部变量
当我在函数中定义global是就会改变全局变量的值
局部变量存在栈帧里边,函数消失,局部变量也消失
在局部变量中不能直接用全局变量的,因为在局部中没定义多,所以认为的是全局的变量
用global的时候,就指定了他是全局变量的a locals()globals()全局变量不仅只有自己定义的
73.传递可变对象_内存分析
他都是根据内存的存储来告诉我们为什么相等, 传递可变对象的引用
一般我们传的是不可变的对象 字符串,int 元祖 因为不能做变量名,做了变量名会重新创建这个变量名的
传参本质:从实参到形参的赋值操作 所以在python中参数的传递都是“引用传递”不是值传递
传的是地址 都是叫做引用地址的赋值 记得局部变量在函数消失之后而消失
74.传递不可变参数
在“赋值操作”,由于不可变对象无法修改系统会新创建一个对象
所以在以前的 n = n+1 没次都会重新的创建对象吗
75.深浅拷贝
那请问我在什么时候会用到这个鬼东西,深拷贝不会改变源对象值
为了更了解参数传递的底层原理吗?
浅拷贝:只拷贝自己,自己下面的不考虑
深拷贝:全部的都会拷贝,子代什么的
对象的引用 [2,3,4[6,7]] [6,7]是子对象吗 他们的子列表还是共用的
浅拷贝,只拷贝第一个
对象引用指向的问题 地址 他们是如何分配的 如何指向的,记得局部变量 会消失的
内存中怎么存的 栈 堆 变量名 地址(id)type value
75 传递不可变对象包含的子对象是可变的情况 这就是浅拷贝了
传递不可变对象是浅拷贝
对哦 以前好像都没注意参数的位置 还有局部变量,全局变量的东西
卧槽 它里面嵌套了列表 列表是可变的
77.参数的类型1
位置参数 默认参数 关键字传参(命名参数)
关键字传参可以不考虑位置,会根据变量找的
默认值参数放到位置参数后面
可变参数:*param,将多个参数收集到一个元祖对象中
**param,将多个参数收集到一个字典对象中
输出进行格式的改变是一定要想起format()
78.参数的类型2
可变参数:当位置参数匹配完了,剩下的就是元祖,字典的了
强制命名参数:再带星号的“可变参数”后面增加新的参数,必须是“强制命名参数”
79.lambda表达式和匿名函数
有意思,它不需要返回值吗?
lambda就是匿名函数吗? 只有一个表达式吗?
def都不需要,只需要lambda 函数也是对象,只是调用的方法不一样而已
其他的都一样 有些东西都是一样的 只是可能加了点皮 退一步其实都一样的
对象 对象的引用 都是对象 都可以引用地址
80.eval()函数用法
针对字符串的
81递归函数_调用内存分析-栈帧的创建
什么是递归函数列,就是自己调自己
方法也是函数啊 也在函数中使用 也是递归吗?
利用的是栈的原理 先进后出 就是栈的内存原理
两个条件:递归什么时候结束,一般用于返回值,不再自己调用自己
把第N步的值和第n-1步相关联
依次结束,因为要等上面的结束完下面的才能关闭 每个函数的内容都会执行一次的
有意思的递归 12345 54321
要等上边返回来结果,然后才能结束
分析几何都可以用递归画出来
83嵌套函数(内部函数)
闭包会用到 怎么作用呢 在内部嵌套的话呢 def 这个函数式局部变量的
所以在外边是不能调用的 只能在内部 数据隐藏吗
84.nonlocla 关键字
函数的嵌套,当想内函数使用外函数时的变量是 可以使用nonlocla关键字
每个函数都有自己的局部变量
很像global
85 LEGB规则
我想起来了,就是什么呢?找一个变量的时候呢,要先从函数内部开始
一个个的往外 局部,嵌套(闭包),模块,内置
函数总结:参数,作用域,递归,返回值,闭包