函数
特殊函数的使用之 filter:
_接收一个序列,将序列中的每一个元素传入到提供的函数中进行判断,如果函数的返回值为 True 那么将这个元素添加到新的序列中
# 筛选出所有的字符
def filter_alpha(param):
# 传入了所有的元素,但是只留下了返回值为 True 的
print(param)
# isalpha 是 str 的一个成员方法,用于判断是否是字母
# islower 是 str 的一个成员方法,用于判断是否是小写
return param.isalpha() and param.islower()
print(list(filter(filter_alpha, "A1!b2#C3%d4^E5&f6")))
特殊函数的使用之 reduce:
_接收一个序列和函数,函数必须拥有两个参数。首先将序列的第一个元素和第二个元素作为参数传 入到函数中,之后的每一次都将前一次的计算结果和下一个元素传入到函数中,最终返回计算结果
# 必须要有两个参数
def add(number1, number2):
return number1 + number2
def mul(number1, number2):
return number1 * number2
# 在 Python3 中 reduce 函数不再是内置函数,需要使用 fucntools
# 模块才能够调用到 reducue 函数
from functools import reduce
# range 生成了 0~99,第一次将 0 和 1 传入到 add,返回 1,第二
# 次将 1 和 2 传入到函数返回3, 第三次将3 和 3 再次传入,直到
# 整个序列计算完毕
print(reduce(add, range(101)))
print(reduce(mul, range(1, 100)))
特殊函数的使用之 map:
_map 要求传入一个函数以及一个或多个的可迭代序列,函数的参数个数必须和序列的数量相同,mao会在内部分别将每一个序列的元素传入到提供的函数中,并且把函数的返回值组合成一个新的可迭代序列
def rep_string(s, time):
return s * time
print(list(map(rep_string, "abcd", [1, 2, 3, 4])))
lambda 表达式的语法
_lambda 参数名 : 实现实现部分只能有一条语句,且不能有 return ,整个实现部分的结果就是函数的返回值
print(list(map(lambda a, b:a*b, "abcd", [1, 2, 3, 4])))
print(reduce(lambda x, y: x*y, range(1,101)))
print(list(filter(lambda n: True if n.isalpha() else False, "A1!b2#C3%d4^E5&f6")))
高阶函数的使用之【闭包】:
_闭包指内部函数使用外部函数作用域的变量
def outer(factor):
# 作用域:其中有 factor 和 inner
def inner(number):
# 作用域,其中有 number
return number * factor
# 返回了一个函数
return inner
fun = outer(10)
"""
在执行以上代码的时候,会返回一个内部函数
def inner(number):
return number * 10
"""
print(fun(20))
"""
fun 接受了上一个函数的返回值,已经是一个函数了
def inner(20):
return 20 * 10
"""
装饰器:
_在闭包的基础上,内部函数调用了# 外部作用域提供的函数。
def outer(func):
def inner():
print("执行之前的时间")
func()
print("执行之后的时间")
return inner
# 有些时候,我们需要给一些特定的函数添加功能,
# 但是不能修改函数的名称,函数的参数个数以及
# 函数的调用形式,可以使用装饰器实现功能
# @outer # 在 Python 中 @ 的是语法糖
def f1():
print('f1: 原有的功能')
# 传入了一个函数,返回了一个新的函数,并且
# 将新函数的地址赋值给 f1。
f1 = outer(f1)
"""
def inner():
print("这里是在原有函数上新添加的功能")
return 以前的f1()
"""
f1()
""" 这里是返回的新的函数
def f1():
print("这里是在原有函数上新添加的功能")
return 以前的f1()
"""
# 语法糖就是为了让代码可读性更高使用更简单
# arr[10][10] -> *(*(arr+10)+10)