05 函数的参数是函数
3. 变量作为函数的实参
函数1作为函数2的实参 -- 函数2就是一个高阶函数
a = 10
def func4(n: int):
print(n + n - 1)
func4(a)
def func5(x):
print(x)
x(12)
func5(func4)
func5(lambda x: x*2)
非常重要!!!
函数作为参数的应用:sort函数
列表.sort(key=None, reverse=False)
参数key - 要求是一个带有一个参数并且返回值是比较对象。这儿的参数指向的是列表中元素。
确定按照元素的什么值进行排序
list1 = [1, 23, 45, 6]
list1.sort()
print(list1)
all_students = [
{'name': '张三', 'age': 19, 'score': 94},
{'name': '李四', 'age': 34, 'score': 70},
{'name': '地方三', 'age': 12, 'score': 45},
{'name': '范甘迪三', 'age': 45, 'score': 76},
]
# 这儿的item是需要排序的列表元素
# def func(item):
# return item['age']
# all_students.sort(key=func)
all_students.sort(key=lambda item: item['score']) # 按成绩从小到大排序
all_students.sort(key=lambda item: item['age'], reverse=True) # 按年龄从大到小排序
print(all_students)
tuple1 = (
(10, 23),
(23, 45),
(30, 34)
)
new_tuple = sorted(tuple1, key=lambda item: sum(item))
print(new_tuple)
极其重要!!!
sorted() 内部原理!!!
def my_sorted(iterable, key=None, reverse=False):
list1 = list(iterable)
if key:
for x in range(len(iterable) - 1):
for y in range(x + 1, len(iterable)):
item1 = list1[x]
item2 = list1[y]
if key(item1) > key(item2):
list1[x], list1[y] = list1[y], list1[x]
else:
# 快速排序
for x in range(len(iterable) - 1):
for y in range(x + 1, len(iterable)):
if list1[y] < list1[x]:
list1[x], list1[y] = list1[y], list1[x]
if not reverse:
# 从小到大
return list1
else:
# 从大到小
return list1[::-1]
print(my_sorted([1, 23, 9, 10]))
print(my_sorted(all_students, key=lambda x: x['age']))
# print(my_sorted(all_students))
练习:按学生的平均分排序
all_students = [
{'name': '张三', 'age': 19, 'score': {'c': 87, 'm': 56, 'e': 98}},
{'name': '李四', 'age': 34, 'score': {'c': 66, 'm': 88, 'e': 67}},
{'name': '地方三', 'age': 12, 'score': {'c': 76, 'm': 65, 'e': 87}},
{'name': '范甘迪三', 'age': 45, 'score': {'c': 78, 'm': 90, 'e': 40}},
]
# 我的解
new = sorted(all_students, key=lambda x: sum(x['score'].values()) / len(x['score']))
print(new)
print('=========老师的解=================')
# 老师的解
def average(student):
scores = student['score']
sum1 = 0
for key in scores:
sum1 += scores[key]
return sum1/4
all_students.sort(key=average)
print(all_students)
4. 变量作为函数的返回值
函数1作为函数2的返回值 - 函数2是返回值高阶函数
def operatioin(char):
if char == '+':
def func1(*nums):
return sum(nums)
# 将函数作为函数的返回值
return func1
elif char == '-':
def func1(*nums):
# (12, 32, 3, 4)
# 如果没有传参
if not nums:
return 0
sum1 = nums[0]
for index in range(1, len(nums)):
sum1 -= nums[index]
return sum1
return func1
print(operatioin('+')(1, 2, 3, 4))
print(operatioin('-')(10, 3, 4))
网友评论