匿名函数:在创建时不需要命名 函数体只能有一个表达式 不用写return 返回值就是表达式的值 lambda 参数1,参数2等:表达式 lambda x,y:x+y (返回x+y的和) 函数里面最好不要再放进print max():比较大小的函数 如max(1,2.3,5,55) sum():累加求和的函数 round():保留小数的函数 如round(x,2) 保留x的两位小数 递归函数: 自己调用自己 形成循环 定义出口条件 什么时候结束递归 通常是一个大问题通过寻找规律可以缩小规模的时候使用的 有最大递归深度 996 不可以超过 超级耗内存 且计算量大 能不用递归尽量不要用递归 每次递归都会保存结果再内存中,非常占用内存,效率低下 求n的阶乘: def func01(n): if n==1: return 1 else: return n*func01(n-1) 函数的参数传递本质上都是传递引用: 变量的空间作用域: 不可变数据类型 def func1(x): print(x) #局部变量 x=100 局部变量改变不会修改全局变量 print(x) #全局变量 x=1 func1(x) 输出100 print(x) 输出1 可变数据类型:(局部变量可以修改全局变量) def f(x): x[0]=100 在原基础修改了内存的[1,2,3]变成内存的[100,2,3] print(x) a=[1,2,3] a指向内存的[1,2,3] f(a) 将x也指向内存的[1,2,3] print(a) 故输出为内存的[100,2,3] 参数定义的时候,默认参数避免定义成一个可变数据类型 如 def f(a=[]) a.append(1) print(a) f() 输出[1] f() 输出[1,1] 这样每次调用都会相关联 因为在定义函数的时候就已经生成了a这个空列表 变量的作用域: 如果不可变数据类型想用局部变量修改全局变量 需要加一个关键字global 如 def f(): 在函数定义的括号里的参数是局部变量 global x#申明x为全局变量(前面不能有局部变量为同名的x) x=1 此时x为全局变量 修改x为1 x=5 当这一行没有的时候 输出结果还是1 f() print(x) 输出结果为1 变量名的解析(LEGB) L:local 在本地变量中找 也就是在当前局部变量里面找 E:enclosing 在任意上层函数中找 G:global 在全局作用域中找 B:builtin 在内置作用域里面找 镶嵌在python解释器里的 双下划线开头和双下划线结尾的变量一般都是内置变量 如 __name__ def f(): #__name__=2 def f2(): #__name__=3 print(__name__) f2() #__name__=1 f() 文档注释 (Document String) 可以用help()查看: 文档注释是包 模块 类或者函数第一个用三引号引起来的字符串 如 def f(): """ this is test funct f() :return """ print("hello") print(help(f)) 出现的就是引号里这一段 """ this is test funct f() :return """ 内建函数和工厂函数: 内建函数:python已经建好了的 无需导入 直接调用就好了 内建方法:一个对象自带的方法 需要用点去引用 如list.pop() list.insert() 工厂函数:类型转换函数相关 属于内建函数的一类 如 int() float() complex() bool()等 常用的内建函数: 看ppt: abs()取绝对值 hash()取哈希值