函数
一.函数的定义:
对功能或者动作的装封.
语法:
def 函数名(形参)
函数体
函数名(实参)
return:
返回,谁调用就返回到哪
1.函数中不写 return,返回 None
2.只写了 return,也返回 None ,结束一个函数的运行
3. return 值 代表:返回 一个值
4.return 值1 值2 值3.....一次返回多个结果,打包成元祖返回
参数:
1.形参: 在函数声明的位置写的变量
1) 位置参数
2) 默认值参数
3)动态传参
聚合 接收位置参数的动态传参
聚合 接收关键字参数的动态传参
参数列表顺序:
位置参数 > *args > 默认值参数 > **kwargs
2.实参:函数调用的地方写的具体的值
1) 位置参数
2) 关键字参数
3) 混合参数: 位置 > 关键字
* 把列表,字符串 ,元祖 打散成位置参数
** 把字典打散成关键字 参数
命名空间: 我们的变量在存储的时候就是存储在这片空间中的
名称空间
1.内置名称空间 :存放python 解释器为我们提供的名字,list,tuple,str,int这些都是内置命名空间
2.全局名称空间:我们直接在py文件中, 函数外声明的变量都属于全局命名空间
3.局部命名空间:在函数中声明的变量会放在局部命名空间
作用域:
1.全局作用域: 全局空间空间 + 内置名称空间
2.局部作用域: 局部名称空间
globals() 查看全局作用域的名字
locals() 查看当前作用域的名字
global 在局部引入全局作用域的内容
nonlocal 在局部,在内层函数中引入离他最近的那一层的变量
一 第一类函数 - -> 函数名-->变量名
1) 函数对象可以像变量一样赋值 2) 还可以作为列表的元素进行使用 3) 可以作为返回值返回 4) 可以作为参数进行传递
二 闭包 --> 函数的嵌套
内层函数对外层函数中的变量的使用
好处: 1) 保护变量不被侵害 2) 让一个 变量常驻内存
如何通过代码查看一个闭包
__closure__: 有东西就是闭包,没东西就不是闭包
三 迭代器 固定的思路: for 循环
一个数据类型中包含了__iter__函数表示这个数据是可迭代的
dir(数据): 返回这个数据可以执行的所有操作
判断迭代器和可迭代对象的方案(野路子)
__iter__ 可迭代的
__iter__ __next__ 迭代器
判断迭代器和可迭代对象的方案(官方)
from collections import Iterable, Iterator
isinstance(对象,Iterable) 是否是可迭代的
isinstance(对象,Iterator)是否是迭代器
模拟for循环
lst = []
it = lst.__iter__()
while 1:
try:
it.__next__()
except StopIteration:
break
特征: 1) 省内存(生成器) 2) 惰性机制 3) 只能向前,不能后退 作用: 统一 了各种数据类型的遍历