Python语法-函数进阶篇
2020-10-18 本文已影响0人
蒋征
主要是对函数的一些补充内容,包括递归函数,常见内置函数和常见的高阶函数的使用
递归函数
image.png和所有语言一样,递归函数说穿了就是自己调用自己,如果大家想要一个官方术语:递归就是子程序(函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。
递归函数例子:
# 递归函数
def factorial(n) :
# 结算数字的阶乘
if n==1 :
return 1
else :
return n * factorial(n-1)
print('数字的阶乘结果为:%d'%factorial(5))
计算的结果为:
数字的阶乘结果为:120
匿名函数
定义函数的过程中,没有给定名称的函数就叫匿名函数; Python中使用lambda表达式来创建匿名函数
匿名函数有一些基本规则:
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- lambda定义的函数返回值就是表达式的返回值,不需要return语句
- lambda的主要应用场景就是赋值给变量,作为参数传入其他函数
# 匿名函数
"""
匿名函数格式:lambda [参数] : expression
默认会返回一个表达式
"""
匿名函数案例:
# 无参匿名函数
e = lambda : 'Hello World'
print(e())
# 有参匿名函数
e = lambda x,y : x+y
print(e(3,2))
# 矢量化三元运算符
e = lambda x,y : x if x > 2 else y
print(e(3,2))
运行结果:
Hello World
5
3
内置函数
print(dir(__builtins__)) # 我们可以通过这行命令打印所有的内置函数
image.png
上图中展示的为经常使用的几个函数,以及相应的参数和方法
以sorted函数使用举例:
# -*- coding:utf-8 -*-
dict = {'a':'1','c':'2','b':'3'};
## 只返回key
dict2 = sorted(dict);
## 整个item返回
dict3 = sorted(dict.items());
## 逆序排列
dict4 = sorted(dict.items(),reverse=True);
## 指定排序key
dict5 = sorted(dict.items(),key=lambda x:x[1],reverse=True);
print(dict)
print(dict2)
## 列表推导式
print({k:v for k,v in dict3})
print({k:v for k,v in dict4})
print({k:v for k,v in dict5})
运行结果,大家可以自己映射
{'a': '1', 'c': '2', 'b': '3'}
['a', 'b', 'c']
{'a': '1', 'b': '3', 'c': '2'}
{'c': '2', 'b': '3', 'a': '1'}
{'b': '3', 'c': '2', 'a': '1'}
我们可以通过help函数来帮助我们学习使用函数:
help(sorted)
运行结果:
Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
image.png
上图中展示的就是常见的内置函数,标红的为经常使用的函数。
高阶函数
以下为常见的三个进阶函数,我们了解以下
- map
- filter
- reduce
map
## base data
list01 = (1,3,5,7,9)
list02 = (2,4,6,8,10)
## map
maplist = map(lambda x:x*2,list01)
print(maplist) ## map函数返回的是map对象
print(list(maplist)) ## 将map对象转化为list对象
maplist = map(lambda x,y:x+y,list01,list02)
print(list(maplist)) ## 多个集合操作
运行结果
<map object at 0x0000024DAE790A60>
[2, 6, 10, 14, 18]
[3, 7, 11, 15, 19]
filter
## base data
list01 = (1,3,5,7,9)
list02 = (2,4,6,8,10)
## filter
filterlist = filter(lambda x:x>4, list02)
print(filterlist) ## filter函数返回的是filter对象
print(list(filterlist)) ## 将filter对象转化为list对象
运行结果为:
<filter object at 0x000001638C7B4A60>
[6, 8, 10]
reduce
## base data
list01 = (1,3,5,7,9)
list02 = (2,4,6,8,10)
## filter
from functools import reduce
reducelist = reduce(lambda x,y:x+y,list02)
print(reducelist) ## reduce函数返回合并以后的结果
运行结果为:
30