Python从入门到实战(一)——Python基础
Python从入门到实战(二)——程序流程控制
Python从入门到实战(三)——组合数据类型
Python从入门到实战(四)——函数
Python从入门到实战(五)——模块和包
Python从入门到实战(六)——文件
Python从入门到实战(七)——面向对象
Python从入门到实战(八)——异常
Python从入门到实战(九)——多线程
Python从入门到实战(十)——爬虫
文章目录
- 函数的定义
- 函数的调用
- 函数的参数
-
- 参数的传递过程
- 参数的形参和实参
- 参数的返回值
- 参数的类型
-
- 位置参数
- 关键字参数
- 默认参数
- 可变参数
- 可变关键字参数
- 强制关键字参数
- 变量作用域
- 递归函数
- 匿名函数
- 高阶函数
-
- map函数
- reduce函数
- filter函数
- sorted函数
- 其它常用函数
-
- zip函数
- any函数
- all函数
- 闭包函数
- 装饰器
函数的定义
文章图片
函数的调用 一个栗子
输出 “Hello World”
文章图片
函数的参数
文章图片
参数的传递过程
文章图片
参数的形参和实参
文章图片
参数的返回值
文章图片
参数的类型 位置参数
文章图片
关键字参数
文章图片
默认参数
文章图片
可变参数
文章图片
可变关键字参数
文章图片
文章图片
文章图片
强制关键字参数
文章图片
文章图片
变量作用域
文章图片
文章图片
文章图片
文章图片
文章图片
递归函数
文章图片
文章图片
一个栗子
递归求阶乘
def factorial(n):
if n == 1: # 递归结束条件
return 1
else:
return n * factorial(n-1) # 向下递归
factorial(10) # 求10的阶乘
文章图片
匿名函数 匿名函数不需要显示地定义函数名,使用 [lambda + 参数 + 表达式],即。
lambda [arg1 [,arg2, ... argN]] : expression
也就是说,lambda用来表示匿名函数,可以传入多个参数,但只能有一个表达式。
文章图片
举个栗子
写一个函数用于两数相加
普通函数
文章图片
用匿名函数来写
func = lambda x,y:x+y
可以看到,上面把匿名函数对象赋给一个变量,只要直接调用该对象就可以使用匿名函数。
文章图片
再举个栗子
将下面的add和sub用匿名函数替代
文章图片
替代后
文章图片
优势
- 不用取名称
- 可以直接在使用的地方定义
- 语法结构简单
- 可以与其它高阶函数联合使用
map函数 语法
map(function, iterable, ...)
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的迭代器。
文章图片
文章图片
reduce函数 使用该函数要先从
functools
模块导入from functools import reduce
reduce()函数会对参数序列中元素进行累计。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function (有两个参数) 先对集合的第1、2个元素进行操作,得到的结果再与第三个数据用 function函数进行操作,…,一直到最后一个参数被用完,将结果返回。
语法
reduce(function, iterable[, initializer])
文章图片
filter函数 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的迭代器。
语法
filter(function, iterable)
接受两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回
True
或 False
,最后将返回 True
的元素放到新列表中。文章图片
sorted函数 sorted() 函数对所有可迭代的对象进行排序操作。
语法
sorted(iterable, key=None, reverse=False)
文章图片
文章图片
其它常用函数 zip函数 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用
list()
转换来输出列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用
*
号操作符,可以将元组解压为列表。语法
zip([iterable, ...])
文章图片
any函数 any() 函数用于判断给定的可迭代参数 iterable 是否全部为
False
,如果是,则返回False
,如果有一个为 True
,则返回 True
元素除了0、空、FALSE外都算函数等价于True
def any(iterable):
for element in iterable:
if element:
return True
return False
文章图片
all函数 all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为
True
,如果是返回 True
,否则返回 False
。元素除了是 0、空、None、False 外都算
True
。函数等价于
def all(iterable):
for element in iterable:
if not element:
return False
return True
文章图片
闭包函数
- 存在函数嵌套
- 外部函数必须返回内部嵌套函数的函数对象
- 内部函数使用了外部函数的局部变量
文章图片
这样就可以为函数增加一些新的功能,而不用在原本的函数上进行修改。
示例
# 装饰器方案
def pre(func):
def wapper_func():
print("Tom said:")
func()
return wapper_func@pre # 语法糖
def func1():
print('hello, python')@pre
def func2():
print('goodbye, python')# func1 = otherfunc(func1)
func1()# func2 = otherfunc(func2)
func2()
文章图片
这里还有一个语法糖的概念,就是在要装饰的函数前,加上
@装饰函数
就可以完成下面等价的功能,对函数进行装饰。func1 = otherfunc(func1)
装饰在实际开发中有什么用
- 引入日志
- 函数执行时间统计
- 执行函数前预备处理
- 执行函数后清理功能
- 权限校验等场景
- 缓存
# 函数执行时间统计
import time as t
def get_time(func):
def new_func():
st = t.time()
func()
ed = t.time()
print("函数执行了%ds"%(ed-st))
return new_func@get_time
def func1():
t.sleep(3) # 睡眠3sfunc1()
文章图片
如何对有不同参数个数的函数进行装饰
可以使用可变参数,和可变关键字参数
# 装饰器方案
def pre(func):
def wapper_func(*args, **kwargs):
print("Tom said:")
func(*args, **kwargs)
return wapper_func@pre # 语法糖
def func1(name1,name2):
print("hello, %s.I'm %s"%(name1,name2))@pre
def func2(name):
print('goodbye, %s'%name)# func1 = otherfunc(func1)
func1('Lily','Tom')# func2 = otherfunc(func2)
func2('Lily')
文章图片
如何使装饰器的参数可变
在外面再套一个装饰器
# 装饰器方案
def dc(name):
def pre(func):
def wapper_func(*args, **kwargs):
print("%s said:"%name)
func(*args, **kwargs)
return wapper_func
return pre@dc('Tom') # 语法糖
def func1(name1,name2):
print("hello, %s.I'm %s"%(name1,name2))@dc('Kity')
def func2(name):
print('goodbye, %s'%name)# pre = dc(name)
# func1 = pre(func1)
func1('Lily','Tom')# pre = dc(name)
# func2 = pre(func2)
func2('Lily')
【Python|Python从入门到实战(四)——函数】
文章图片
推荐阅读
- 机器学习|Spark ALS 协同过滤算法实践
- AI芯片|存算一体——后摩尔时代的AI芯片架构
- 大数据|新型存算一体芯片诞生,利好人工智能应用~
- python|Numpy - 1.22.1 详细笔记
- 大数据|C语言每日题目练习与巩固
- 如何正确使用yield()
- 大数据|TiDB Operator 准入控制器
- 3D视觉|【论文精读】基于骨架行为识别—STGCN
- 开发者|Orbbec-Astra相机windows系统下Python配置使用