python自学篇九[ 函数(四):递归函数+匿名函数+内置函数+高阶函数]

python基础系列:
python自学篇一[ Anaconda3安装 ]
python自学篇二[ pycharm安装及使用 ]
python自学篇三[ 判断语句if的使用 ]
python自学篇四[ 基本数据类型和字符串常用处理 ]
python自学篇五[ 列表 ]
python自学篇六[ 元组 ]
python自学篇七[ 字典+深拷贝与浅拷贝 ]描述
python自学篇八[ 循环:while+for+pass+range()+推导式 ]
python自学篇九[ 函数(一):参数+对象 ]
python自学篇九[ 函数(二):返回值return+yield+迭代器+生成器 ]
python自学篇九[ 函数(三):变量作用域+ATM+5个小练习 ]
python自学篇九[ 函数(四):递归函数+匿名函数+内置函数+高阶函数 ]
python自学篇十[ 面向对象 (一) :面向对象概念+定义类+练习一]
python自学篇十[ 面向对象 (二) :继承+多继承+类属性+实例属性]
python自学篇十[ 面向对象 (三) :访问限制+类方法+静态方法]
python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]
python自学篇十一[ 模块简介+模块制作+dir()函数+标准模块+包]
python自学篇十二[ 文件:打开+读取+写入+3个习题]

递归函数

  • 递归函数:递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。(一句话,自己调用自己)
  • 举例,计算阶乘 n! = 1 * 2 * 3 * … * n,用函数 fact(n)表示,可以看出:
    1! = 1
    2! = 2 × 1 = 2 × 1!
    3! = 3 × 2 × 1 = 3 × 2!
    4! = 4 × 3 × 2 × 1 = 4 × 3!

    n! = n × (n-1)!
  • 同样的,可以把递归看作一场梦,做梦的时候梦到自己在做梦,梦中的自己正在做梦···,或者是镜子里面看见有个镜子,里面有自己,一层一层的。
  • 求阶乘
def factorial(n):
    if n == 1:
        return 1
    else:
        return n*factorial(n-1)

print(factorial(10))

结果:

3628800

匿名函数

  • 定义函数的过程中,没有给定名称的函数就叫做匿名函数;Python中使用lambda表达式来创建匿名函数
lambda 来创建匿名函数规则:
  • lambda只是一个表达式,函数体比def简单很多

  • lambda的主体是一个表达式,而不是一个代码块,所以不能写太多的逻辑进去

  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数

  • lambda定义的函数的返回值就是表达式的返回值,不需要return语句块

  • lambda表达式的主要应用场景就是赋值给变量、作为参数传入其它函数

  • lambda匿名函数的表达式规则是:

lambda [参数列表]: 表达式

例如:

a=lambda :'我爱你'
print(a())

结果:

我爱你
  • 带参数的lambda
s = lambda x: x*2
print(s(3))

结果:

6
  • 多参数lambda
s = lambda x,y: x+y
print(s(3,4))

结果:

7

矢量化的三元运算符

  • 原来:
if  条件:
        代码块哦
    else:
        代码块
  • 矢量化的三元运算符
条件成立的内容   if 条件 else 条件不成立的内容

如:

s = lambda x,y: x if x > 2 else y
print(s(1,4))

常用内置函数

在这里插入图片描述

  • 字典排序
dic = {'a':1,'c':2,'b':3}
dic = sorted(dic.items())
print(dic)

结果:

[(‘a’, 1), (‘b’, 3), (‘c’, 2)]

  • 倒序排序
dic = {'a':1,'c':2,'b':3}
dic = sorted(dic.items(),reverse= True)
print(dic)

结果:

[(‘c’, 2), (‘b’, 3), (‘a’, 1)]

  • 列表推导式
dic = {'a':1,'c':2,'b':3}
dic = sorted(dic.items()) #通过内置函数 sorted进行排序内置函数有返回值  默认通过KEY排序
print({k:v for k,v in dic})  #列表推导式输出

结果:

{‘a’: 1, ‘b’: 3, ‘c’: 2}

  • 通过lambda按指定元素排序
dic = sorted(dic.items(),key = lambda x:x[1])  
#x:x[1]是指 [('c', 2), ('b', 3), ('a', 1)]中每个元组中的索引值为1的元素,即231
lsit01 = [
    {'name':'joe','age':18},
    {'name':'susan','age':19},
    {'name':'tom','age':17}
]
dic = sorted(lsit01,key = lambda x:x['age'],reverse=True)   #内置函数有返回值  默认通过KEY排序
print(dic)
#按照age从大到小排序

结果:

[{‘name’: ‘susan’, ‘age’: 19}, {‘name’: ‘joe’, ‘age’: 18}, {‘name’: ‘tom’, ‘age’: 17}]

常用高阶函数

在这里插入图片描述

map

#map
list01 = [1, 3, 5, 7, 9]
list02 = [2, 4, 6, 8, 10]
new_list = map(lambda x, y: x*y, list01, list02)
print(list(new_list))#将map对象转换为list

结果:

[2, 12, 30, 56, 90]

filter

#filter
list02 = [2, 4, 6, 8, 10]
new_list = filter(lambda x: x > 4, list02) #filter将不符合条件的元素过滤掉
print(list(new_list))

结果:

[6, 8, 10]

reduce

#reduce
from functools import reduce
list02 = [2, 4, 6, 8, 10]
new_list = reduce(lambda x, y: x+y, list02, 0)#0为x的初始值,先把0给x,2给y,再把结果给x,4给y,依次进行,类似求和
print(new_list)

结果:

30

高阶函数使用三个案例

案例一:格式化用户的英文名,要求首字母大小,其它字母小写
name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']
new_name = map(lambda x:x.title() ,name)
new_name = list(new_name)
print(new_name)

结果:

[‘Joe’, ‘Susan’, ‘Black’, ‘Lili’]

案例二:将用户英文名、年龄、性别三个集合的数据结合到一起,形成一个元组列表
name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']
users = map(lambda x,y,z:(x,y,z),name,age,sex)
new_users = list(users)
print(new_users)

结果:

[(‘joe’, 18, ‘m’), (‘susan’, 19, ‘w’), (‘black’, 20, ‘m’), (‘lili’, 21, ‘w’)]

案例三:过滤性别为男的用户
name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']

users = map(lambda x,y,z:(x,y,z),name,age,sex)
new_users = list(users)
print(new_users)


new_users = filter(lambda x:x[2] == 'm',new_users)
new_users = list(new_users)
print(new_users)

结果:

[(‘joe’, 18, ‘m’), (‘susan’, 19, ‘w’), (‘black’, 20, ‘m’), (‘lili’, 21, ‘w’)]
[(‘joe’, 18, ‘m’), (‘black’, 20, ‘m’)]

案例四:求性别为男的用户的平均年龄
name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']

users = map(lambda x,y,z:(x,y,z),name,age,sex)
new_users = list(users)
#print(new_users)

#
# new_users = filter(lambda x:x[2] == 'm',new_users)
# new_users = list(new_users)
# print(new_users)
from functools import reduce
total_age = reduce(lambda x,y:x+y[1],new_users,0)
print(total_age/len(new_users))

结果:

19.5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章