python基础-函数进阶

本文详细介绍了递归的概念及其在斐波那契数列中的应用,探讨了迭代器、生成器的工作原理以及如何创建和使用它们。同时,文章还涉及了装饰器的作用和基本用法,以及列表推导式的简洁用法。
摘要由CSDN通过智能技术生成

递归(函数自己调用自己)

递归最经典的例子就是斐波那契数列:

首先对斐波那契数列进行简要说明
斐波那契数列就是一列数字,他们之间存在如下规律,

除了前两项,后面所有的项都是前面两项之和

由于其自第三项开始,每一项都有着相同的特点,因此,我们只需要一个函数就可以概括此数列的所有特点,并求出其所有项

不断通过自己调用自己去寻找下一位的值

def fib(num):
    if num == 1 or num == 2:
        num = 1
    else:
        num = fib(num-1) + fib(num-2)
    return num
for i in range(1,16):
    content = fib(i)
    print("斐波那契数列的第{}位的值为:{}".format(i,content))

迭代器

此处先对迭代数据类型进行复习,我们前面说所的可迭代的基本的数据类型有:

可迭代类型

字符串,列表,元组,字典

官方文档中对可迭代类型的解释为:对象中含有”__iter__"方法,则其为可迭代对象(此处的对象,即基本数据类型,python中一切皆对象,处处为继承,后续面向对象中会提及)

因此,确认一个对象是否可以进行迭代,最基本的判断依据为”__iter__“方法的有无

对象方法的查看方式

使用dir()函数

迭代器的生成

使用iter()方法,可以将一个可迭代类型的数据转化为一个迭代器,然后使用next()方法,对迭代器中的内容进行输出,一个next仅会输出一个值,可以使用循环的方法使其输出多个内容

典型内置迭代器

python中最典型的迭代器就是文件句柄

具有iter和next两种方法,因此可说明文件句柄为迭代器

生成器

生成器可以节省系统的内存空间,例如,当我们对一个列表进行循环取数是,系统会创建一个与列表数据内存对等的空间,而生成器对空间比较节省,一次只生成一个较小的空间,然后对元素进行操作

def nim(num):
    for i in range(num):
        yield i

s = nim(100)
print(type(s))   #<class 'generator'>

创建一个生成器

使用yield将函数改造为生成器,使用next()方法在生成器中进行取值,生成器在进行取值时,会记录当前位置,并以此向下执行

# 函数
def nim(num):
    for i in range(num):
        return  i

s = nim(5)
for i in range(5):
    print(s)
#生成器
def nom(num):
    for i in range(num):
        yield i

ss = nom(5)
for i in range(5):
    print(next(ss))

创建生成器的另一种方法

使用列表推导式的格式,将[]换成()就可以自己定义一个生成器,并使用next()方法取值

列表推导式

创建列表的一种快捷方式

生成100以内的偶数列表

num_list = [ i for i in range(101) if i % 2 == 0]
print(num_list) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]

装饰器

可以在不改变函数调用方式的基础上,为函数增加部分功能

装饰器的本质

一个函数调用另一个函数

装饰器的使用

计算函数执行的时间

import time
def effic(f):
    def inner():
        start_time = time.time()
        f()
        end_time = time.time()
        sub_time = end_time - start_time
        print("函数执行时间为:{}".format(sub_time))
    return inner

@effic
def func():
    print("开始执行")
    time.sleep(1)
    print("执行结束")
func()

装饰器的基本格式

"基本装饰器"
def gendor(f):
    def inner():
        r = f(*args,**kwargs)       #r 代表所装饰的函数的返回值  f后面可以添加参数
        return r                     
    return inner()

匿名函数(lamda)

定义结构较为简单的函数的方法

fun = lambda x,y : x + y
add = fun(1,9)
print(add)              #10

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值