函数
def 函数名():
函数内容
def() 调用函数 如果需要变量填入变量
默认参数
def info(name,age,course,country="CN") : #默认参数必须放最后
print(name,age,country,course)
info("gxd",22,'python')
info("bzx",22,'java','USA')
修改函数中的变量
age = 123
def info () :
global age #全局修改
age = 22
print(age)
info()
print(age)
嵌套函数
age = 22
def info():
global age
def info1():
print(age) #输出22
info1()
age = 30
info()
print(age) #输出30
函数=作用域
函数可以返回任意指定变量值,函数名,列表等
#代码定义完成后 ,作用域已经生成,作用域链向上找 一个函数就是一个作用域
age = 22
def info():
age = 30
def info1():
print(age)
return info1 #函数名也可以当做返回值
val = info()
val() #输出30
匿名函数
func = lambda x,y:x*y #匿名函数,将函数一行化,不能太复杂,节省代码量
print(func(3,5))
#lambda 函数一般与其他方法搭配使用,不经常单独使用
函数递归相关
import sys
print(sys.getrecursionlimit()) #查询默认最多递归次数
sys.setrecursionlimit(1500) #修改默认最多秭归次数
print(sys.getrecursionlimit())
def calc(n):
v = n/2
print(int(v))
if int(v) == 0:
return
calc(v)
print(int(v))
calc(10) #输出关系,5 2 1 0 1 2 5
阶乘
def cal(n):
if n == 1:
return 1
return n*cal(n-1)
print(cal(10))
尾递归优化即下层递归与上层无任何关系,阶乘不是 python里并没有优化
列表生成式 简洁明了
a = list(range(10))
a = [i*i for i in a] #输出 0 1 4 9 16 25 36 49 64 81
a = list(range(10))
a = [ i if i < 5 else i * i for i in a] #输出 0 1 2 3 4 25 36 49 64 81
生成器相关
a = (i for i in range(50)) #相当于一个公式,每次取出一个。不能返回
next(a) #一个一个下一个
for n in a:
print(n)
def fib(max) :
n,a,b = 0,0,1
while n<max:
yield b #把函数的执行过程冻结在此处,并且把值返回给外面的NEXT
a,b=b,a+b
n=n+1
return 'done'
f = fib(10) #把函数转化为了生成器
#return 代表生成器的的结束,生成器结束会报错
#next唤醒生成器并执行
#send同上 而且可以发送一个信息到生成器内部 用此方法可以提前判断传入值然后停止生成器
#生成器属于迭代器