匿名函数、递归函数与生成器函数 .

前言

变量作用域,全局变量,局部变量,函数作为参数,匿名函数,递归函数,生成器函数。

变量作用域

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=' ')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容