Python匿名函数

一.迭代

迭代在python就是属于可以做for循环遍历的对象,被叫做可迭代对象。

二.可迭代对象分为容器和迭代器两个,迭代器又有生成器分支。

迭代器
‘’’
性质:
1.使用print无法查看迭代器中的元素
2.使用len方法无法查看其中的元素个数。
3.迭代器(iteratar)
4.迭代器类似数据结构中的队列(先进先出),迭代器中的元素被取出,即消失。
5.任何容器型数据类型都可以使用iter方法转成迭代器

‘’’

str1=‘hello’
str1_inter=iter(str1)
print(str1_inter,type(str1_inter))

list1=[1,2,3]
list_iter=iter(list1)
print(list_iter,type(list_iter))

四.如何获取迭代器中的元素
方法一:for 循环遍历
方法二:next()
print(next(str1_inter))
print(next(str1_inter))
for i in str1_inter:
print(i)

五.迭代器能做什么?
元素被全部去除,迭代器消失,迭代器所占内存被释放,程序就可以减小内层占用

生成器(genertator)

‘’’
性质:
1.生成器是为了去生成迭代器(生成器就是迭代器,但是迭代器不一定是生成器)。
2.生成器就是一个函数。
3.调用生成器函数时,函数不执行。只有在获取元素时生成器函数才执行。
并且是获取一个元素才能够生成器函数执行一次。
4.生成器函数返回内部结果使用yield代替return
5.yield执行几次,生成器就产生几个元素
‘’’

def myGener():
print(‘1,2,3’)
yield 100
yield 200
if 100>200:
yield 300
return 1
yield 400

f=myGener()
print(f)
print(next(f))
for i in f:
print(i)

七 :yield和return的区别
‘’’
1.return被触发,函数立即结束。yiele不会结束函数执行
2.return 和yield 都可以将函数内部结果返回到外部
3.return 和yield 后面都是跟表达式

‘’’

练习: 使用生成器去创建python001-python999学号。
def stuid():
for i in range(1,1000):
yield f’python{i:0>3}’

f=stuid()
print(f)
print(next(f))
print(‘---------------------------------------------------’)
for _ in range(100):
print(next(f))

print(‘-’*30)

print(next(f))

匿名函数

一.概念
Python有一个lambda表达式,lambda有匿名的意思,并且lambda表达式就是简化的函数,所以被叫做匿名函数

理解
匿名函数和普通函数的关系理解为单分支结构和三目运算符的关系

匿名函数在语法上就是单一的严格限制的固定语法。在语义上是普通函数的语法糖。
语法糖(糖衣语法),是英国计算机学家提出的一个概念。语法唐就是对已经存在的语法简化
语法糖能提高代码的可读性,

案例: 计算两个数字的和
def numSum(num1,num2):
return num1+num2

print(numSum(10,20))

numSumLanba= lambda num1,num2:num1+num2
print(numSumLanba(10, 20))

匿名函数的语法:
函数名= lambda 形参:返回值
函数名(实参)

练习:计算1-100的和

def total(start=1, end=100):
sum = 0
for i in range(start, end + 1):
sum += i
print(sum)

totalLambda = lambda start, end: sum([i for i in range(start, end + 1)])
print(totalLambda(1, 100))

判断是否是闰年

leapYear = lambda year: True if (year % 4 == 0 and year % 100 != 0)
or year % 400 == 0 else False
print(leapYear(2005))

递归

递归就是一种循环的思想。

函数之间是一个相互调用的一个过程,递归是对函数来说的,但是递归是一种特殊的函数调用(自己调自己)

迭代(维和递归思维递推)思
递推思维:斐波那契数列:根据已有的数据推算规律(正向推算)
根据规律逆向推算。

三. 递归虽然是循环的思想,但是要注意循环结束的条件,不然就陷入了死循环
#著名的计算机学家:迭代是人,递归是神

斐波那契数列
a = 1
b = 1
N=9
for i in range(N-2):
MID=a+b
a=b
b=MID
print(b)

递归思想
def fib(N):
else:

     return fib(N-1)+fib(N-2)

print(fib(9))
‘’’
fib(9)=fib(8)+fib(7)=fib(7)+fib(6)+fib(5)+…+fid(1)+fib(2)

如何写出递归的思想代码:
1.知道最终结果的计算规律
2.从需要算的结果向前推
3.了解递归的条件
4.学会自己调用自己方式

‘’’

递归练习:计算N的阶层。
def factorial(n):
if n ==1:
return 1
else:
return n*factorial(n-1)

print(factorial(10))

能使用循环的解决方法要用对递归
回是递归使用需要谨慎,如果设计了计算量很大,有一个拓展线的过程,拓展容易溢出

栈是一个先进后出

高阶函数
将一个函数当作另一个函数的参数,叫做高阶函数。
print(max)

def func1():
print(‘这是一个函数’)

print(func1)
func1()
a = func1
a()

自定义函数相当于定义了一个数据类型为func的变量

def func2(func):
print(‘这是另一个函数’)
func()

func2(func1)

二.Python常用高阶函数:max min stortted map reduce

nums=[10,55,67,666,900]
print(max(nums))

max(容器,key=函数):按照函数定义的方式获取容器中的最大值
函数的要求:(1)函数有且仅有一个形参,(2)必须有返回值。

案例: 按照数字中个位数的大小取值。(找出那个个位数最大)

nums=[10,55,67,666,900]

def unitNum(num):
return num % 10

print(max(nums, key=unitNum))
print(max(nums, key=lambda num :num%10))
print(min(nums, key=unitNum))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值