匿名函数:在创建时不需要命名
函数体只能有一个表达式 不用写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()取哈希值
|