前言
变量作用域,全局变量,局部变量,函数作为参数,匿名函数,递归函数,生成器函数。
变量作用域
1>变量的作用域就是定义的变量可以使用的代码范围
2>全局变量 是可以被所有的函数访问的,除非被删除掉,否则一直存活到脚本运行结束。
3>局部变量只能在函数或代码块内部被调用,一旦函数或代码块执行完成,数据就会释放。引用比全局变量速度快,应优先考虑使用。
变量的作用域
1>当程序运行时,python先从局部作用域开始搜索变量,如果局部没有则从全局中找,找不到会抛出NameError,如果全局变量与局部变量重名,则内部访问则是局部变量,外部是全局变量。
2>在函数中想要对全局变量进行修改,要用到关键字global。
匿名函数
1>lambda 参数1,参数2… : 返回值。
2>print((lambda x,y,z:x+y+z)(1,2,3))。
递归函数
程序调用自身的编程技巧称为递归(recursion)。
# 使用递归方法实现5!
```def func(n):
if n == 1 or n == 0:
return 1
else:
return n * func(n-1)
print(func(5))```
递归函数优缺点
1>递归函数的优点就是定义简单,逻辑清楚。
2>缺点是递归效率不高,因为每一次调用都有相应的数值存放在栈,而栈的空间是有限的
3>此在写函数时候要注意不可无限递归或者递归次数非常大
递归函数
要求输入一个数字表示是第几个数字,正确输出第n个斐波那契数
def fun(n):
if n < 0:
print('输入有误!')
elif n == 1 or n == 2:
return 1
else:
return fun(n-1) + fun(n-2)
print(fun(6))
生成器函数
我们之前学过元组生成器.(i for i in range(10))。
yield语句的函数也可以用来创建生成器对象。
每次执行到yield语句并返回一个值之后会暂停或挂起后面代码的执行。
下次通过生成器对象的__next__()方法、内置函数next()、for循环遍历生成器对象元素或其他方式显式“索要”数据时恢复执行。
生成器--斐波那契
def f():
a, b =1, 1
while True:
yield a # 暂停执行,需要时再产生一个新元素
a, b = b, a+b # 继续生成新元素
a= f()
fori in range(10):
print(next(a), end=' ')