#1.函数是一等对象,一等对象的特点:
对象是运行时创建的
能赋值给变量或作为数据结构中的元素
能作为参数传递
能作为返回值返回
#2.python中的所有对象都是一等对象, 但是并不是所有的语言中的函数都是一等对象
#3.高阶函数至少要符合下面的特点中的一个:
接收一个或多个函数作为参数
将函数作为返回值返回
#当我们使用一个函数作为参数时, 实际上是将指定的代码传递进了目标函数
def fun1(n): #判断一个数n是否是偶数
if n%2 == 0:
return True
return False
def f(func, l): #根据条件筛选列表l中的数据, 其中, func就是筛选条件
‘’’
自定义函数f , 是根据第一个参数的值来筛选列表l中的对象
并将其返回
‘’’
list =[]
for n in l:
if func(n):
list.append(n)
return list
print(help(f))
l = [1,2,3,4,5,6,7,8,9,10]
print(f(fun1, l))
#python中, 有内置函数filter()可以实现上述功能, filer()可以从序列中过滤出符合条件的元素, 保存到新的序列中
#参数: 1)函数, 根据该函数来过滤序列(可迭代结构)
2)需要过滤的序列(可迭代结构)
3)返回值, 过滤后的新序列(可迭代结构)
print(list(filter(fun1, l)))
#匿名函数, lambda 函数表达式
#lambda的语法: lambda 参数列表: 返回值
#eg:
f1 = lambda a, b: a+b
print(f1(3, 5))
print(list(filter(lambda i : i%2==1,l)))
#内置的map()函数, 可以对迭代对象中的所有元素做指定的操作, 然后将其添加到一个新的对象中返回
r = map(lambda i : i**3, l) #将l中的数据都取3次幂
print(list®)
#sort()用来对列表中的元素进行排序, sort()方法默认是截至比较列表中的元素的大小
#在sort()中可以接受一个关键字参数, key
#key需要一个函数作为参数, 当设置了函数作为参数, 每次都会以列表中的一个元素作为参数来调用函数, 并且使用函数返回值来比较元素的值
#l.sort(key = len) 会根据长度进行排序
#2.sort(key = int), 如果要排序的序列中既有str类型数据,又有int类型数据, 直接用sort()无法直接排序, 则用int()将str类型数据转为int类型
#3.sorted(), 这个函数和sort()方法的用法基本一致, 但是sorted()可以对任意的序列进行排序
#并且使用sorted()排序不会影响原来的对象, 而是返回一个新的对象, eg: sorted(l, key = int), 而sort会改变原来的值
l = [7,5,3,6,1]
print(l)
l.sort()
print(l)