标签:执行 nta 方式 数据结构 在定义函数时 hello 并且 打印 sel
在python中,函数是一等对象
一等对象一般都会具有如下特点:
对象是在运行时创建的
能赋值给变量或作为数据结构中的元素
能作为参数传递
能作为返回值返回
高阶函数
高阶函数至少要符合以下两个特点中的一个
接受一个或多个函数作为参数
将函数作为返回值返回
接受函数作为参数,或者将函数作为返回值得函数是高阶函数
#定义一个函数
#可以将制定列表中的所有的偶数,保存到一个新的列表中返回
def fn(list):
new_list = []
for i in list:
if i % 2 == 0:
new_list.append(i)
return new_list
fulter() 可以从序列中过滤出符合条件的元素,保存到一个新的序列中
参数:
函数,根据该函数来过滤序列(可迭代的结构)
需要过滤的序列(可迭代结构)
返回值
过滤后的新序列(可迭代结构)
lambda函数表达式专门来创建一些简单地函数,他是函数创建的又一种方式
语法:lambda 参数列表:返回值
匿名函数一般都是作为参数使用,其他部分一般不会使用
该方法用来对列表中的元素进行排序
sort()方法默认是直接比较列表中的元素大小
在sort()可以接收一个关键字参数,key
key需要一个函数作为参数,当谁知了函数作为参数
每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素的大小
l = [2,3,4,1,6,5]
l.sort()
print(l)
这个函数和sort()的用法基本一致,但是sorted()可以对任意的序列进行排序,并且使用sorted()排序不会影响原来的对象,而是返回一个新对象
将函数作为返回值返回,也是一种高阶函数,这种高阶函数我们也成为闭包,通过闭包可以创建一些只有当前函数能访问的变量,
作用:可以将一些私有的数据藏到闭包中
形成函数的要件
函数嵌套
将内部函数作为返回值返回
内部函数必须要使用到外部的变量
def fn():
a = 10
#函数内部在定义一个函数
def inner():
print(‘我是fn2‘,a)
#将内部函数 innner作为返回值返回
return inner
#r是一个函数,是调用fn()后返回的函数
#这个函数是在fn()内部定义,并不是全局函数
#所以这个函数总是能访问到fn()函数内的变量
r = fn()
?
# 求多个数的平均值
# print(sum(sum)/len(sum))
?
def make_avg():
nums = []
?
def avg(n):
nums.append(n)
return sum(nums)/len(nums)
return avg
avg = make_avg()
print(avg(10))
print(avg(30))
通过直接修改代码的方式来完成某个需求,会产生一下某些问题
如果要修改的函数过多,修改起来会比较麻烦
不方便后期维护
这样做会违反开闭原则(ocp)
开闭原则:程序的设计,要求开发对程序的扩展,要关闭对程序的修改
像begin_end()这种函数我们称它为装饰器
通过装饰器,可以再不修改原来函数的情况下来对函数进行扩展
在开发中,我们都是通过装饰器来扩展函数功能的‘
在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数。同时可以为一个函数指定多个装饰器,这样的函数将会安装从内到外的方式进行装饰
def begin_end(old):
‘‘‘
用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束
参数:
old 要扩展的函数对象
‘‘‘
#创建一个新函数
def new_function(*args,**kwargs):
print(‘开始执行---‘)
#调用被扩展的函数
result = old(*args,**kwargs)
print(‘执行结束---‘)
#返回执行的结果
return result
?
#返回新函数
return new_function
标签:执行 nta 方式 数据结构 在定义函数时 hello 并且 打印 sel
原文地址:https://www.cnblogs.com/wn-888/p/11647170.html