1.高阶函数的定义与使用
abs与abs()的区别
abs() # 返回值
abs # 返回整个函数
# 求绝对值
print('求出来的绝对值为:',abs(-11))
# 函数本身可以赋值给变量,变量也可以指向函数
# 调用函数来求绝对值
f=abs
print('求出来的绝对值为:',f(-10))
# 传递的函数包括函数名
def fun(x,y,f):
return f(x),f(y)
print('求出来的绝对值为:',fun(-10,34,abs))
2.内置函数
(1)a.map()函数练习
import random
# 对于序列[-1,3,-5,-4]的每个元素求绝对值
print(list(map(abs,[-1,3,-5,-4])))
# 对于序列的每个元素求阶乘(10个,2~7之间的随机)
for n in range(10):
n=random.randint(2,7)
def jc(n):
sum = 1
for i in range(1,n+1):
sum*=i
return sum
li=[random.randint(2,7)
for i in range(10)]
print(list(map(jc,li)))
(2)filter函数
# 求1~100之间的偶数
def isodd(num):
if num % 2 == 0:
return True
else:
return False
print(list(filter(isodd,range(100))))
# 求1~100之间的素数
def zhishu(num):
for i in range(2,num):
if num % i ==0:
return False
else:
return True
print(list(filter(zhishu,range(2,100))))
(4)sorted函数
# 调用排序方法sort进行排序
li = [5,2,4,2,3]
li.sort()
# 这是逆序
li.sort(reverse=True)
print(li)
# 使用sorted函数进行排序(逆序)
a=sorted(li,reverse=True)
print(a)
# 分别根据商品的数量,价格和名称对商品进行排序
info = { ('apple1',32,3), ('apple2',20,2), ('apple3',42,3), ('apple4',32,4)}
# 默认按照商品名称进行排序
print(sorted(info))
# 按照商品数量进行排序
def sorted_count(x):
return x[1]
print(sorted(info,key=sorted_count))
# 按照商品价格进行排序
def sotred_price(x):
return x[2]
print(sorted(info,key=sotred_price))
# 先按照商品数量进行排序,如果数量一样,就按照商品价格进行排序
def sorted_count_price(x):
return x[1],x[2]
print(sorted(info,key=sorted_count_price))
练习
在原始数组上进行操作,勿创建新的数组
输入:第一行是数组长度4 0 7 0 2
输出:调整后数组的内容4 7 2 0 0
# 定义用户输入的变量
n = ''.join(input('请输入:').split())
# 接收用户的输入为列表
li = [int(i) for i in n ]
def sorted_li(i):
# 把列表中的零元素用1代替
if i == 0:
return 1
# 把列表中非零元素用0代替
else:
return 0
# 按照返回值对列表中元素进行排序
print(sorted(li,key=sorted_li))
3.匿名函数
求平方
求阶乘
匿名函数的默认参数
匿名函数的可变参数
关键字参数
from functools import reduce
# 用reduce调用匿名函数实现x+y
print(reduce(lambda x,y:x+y,[1,2,3,4,5]))
# 用map调用匿名函数实现x**2
print(list(map(lambda x:x**2,range(10))))
# 用匿名函数求阶乘
print('求得10的阶乘为:',reduce(lambda x,y:x*y,range(1,10)))
# 匿名函数的默认参数
f = lambda
x,y=2:x**y # 一定要把匿名函数赋值给一个变量,不然不能调用
print('求3的平方:',f(3)) # 没有指定,所以用默认参数2
print('求2的4次方为:',f(2,4)) # 指定默认参数为4,所以4代替默认参数
# 匿名函数的可变参数
f= lambda *args:sum(args)
print('求得的序列的和为:',f(1,34,32,43,1,))
# 匿名函数的关键字参数
f1 = lambda **kwargs:kwargs.keys() # 定义匿名函数输出key值
f2 = lambda **kwargs:kwargs.values() # 定义匿名函数输出value值
print('输出key值为:',f1(name='lala',age=18))
print('输出value值为:',f2(name='lala',age=18))
练习
nums = [0 ,7 ,0 ,1 ,2 ,1 ,5 ,1 ,7 ,8 ,0 ,67 ,1 ,3 ,4],把0排到最后,其余数字不用排序
nums = [0 ,7 ,0 ,1 ,2 ,1 ,5 ,1 ,7 ,8 ,0 ,67 ,1 ,3 ,4]
print(sorted(nums,key=lambda x:1 if x == 0 else 0))