2019-01-05 day10function2 函数作为函数

2019-01-05  本文已影响0人  woming

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))

上一篇 下一篇

猜你喜欢

热点阅读