美文网首页
013-函数2

013-函数2

作者: 小D修行笔记 | 来源:发表于2022-07-31 23:27 被阅读0次

\color{red}{递归函数、lambda表达式、abs、round、map、reduce、filter}

递归函数

应用场景

  • 递归是一种编程思想
  • 如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现

递归的特点

  • 函数内部自己调用自己
  • 必须有出口

简单应用

# 3以内数字累加和 3 + 2 + 1
def sum_numbers(num):
    # 如果是1,直接返回1  ---- 出口
    if num == 1:
        return 1
    # 如果不是1,当前值 + 继续调用该函数,num值减1
    return num + sum_numbers(num - 1)
# 调用函数
print(sum_numbers(100))

输出结果

5050
  • 如果没有出口,会报错---超出最大递归深度
  • 递归调用的次数超过最大深度也会报错

lambda表达式

  • 如果一个函数只有一个返回值,并且只有一句代码,可以使用lambda简化

lambda 参数列表:表达式

  • lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用
  • lambda表达式能接收任何数量的参数,但只能返回一个表达式的值

无参数

# 无参数
fn1 = lambda: 100
print(fn1())

输出结果

100

一个参数

# 一个参数
fn1 = lambda a: a
print(fn1('hello world'))

输出结果

hello world

缺省参数

# 缺省参数
fn1 = lambda a, b, c = 100: a + b + c
print(fn1(10,20))  # 使用默认参数
print(fn1(10, 20, 30))  # 不使用默认参数

输出结果

130
60

可变参数:*args

# 可变参数:*args
fn1 = lambda *args:args
print(fn1(10, 20, 30))  # 元组

输出结果

(10, 20, 30)

可变参数:**kwargs

# 可变参数:**kwargs
fn1 = lambda **kwargs:kwargs
print(fn1(name='Tom', age=20))

输出结果

{'name': 'Tom', 'age': 20}

lambda应用

带判断的lambda

# 带判断的lambda
fn1 = lambda a, b: a if a > b else b
print(fn1(10, 20))

输出结果

20

列表数据按字典key的值排序

# 列表数据按字典key对应的value排序
students = [
    {'name': 'Tom', 'age': 20},
    {'name': 'Rose', 'age': 19},
    {'name': 'Jack', 'age': 22}
]
students.sort(key=lambda x:x['age'])
print(students)
students.sort(key=lambda x:x['age'], reverse=True)
print(students)

输出结果

[{'name': 'Rose', 'age': 19}, {'name': 'Tom', 'age': 20}, {'name': 'Jack', 'age': 22}]
[{'name': 'Jack', 'age': 22}, {'name': 'Tom', 'age': 20}, {'name': 'Rose', 'age': 19}]

高阶函数

  • 高阶函数就是把一个函数作为另外一个函数的参数传入

内置函数abs()

  • 对数字求取绝对值计算
# abs函数
a = abs(-10)
print(a)

输出结果

10

内置函数round()

  • 对数字的四舍五入计算
# round函数
a = round(1.2)
b = round(1.8)
print(a)
print(b)

输出结果

1
2

两个函数求取绝对值后再求和计算

直接传入数据
# 先求取绝对值,再求和
def add(a, b):
    return abs(a) + abs(b)
print(add(-3, 5))

输出结果

8
传入函数作为参数
# 传入函数
def add_num(a, b, fn):
    return fn(a) + fn(b)
print(add_num(-3, 5, abs))

输出结果

8
  • 函数作为参数传入,只需传入函数名即可

内置高阶函数

map函数

  • map(func,lst)将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(python2)/迭代器(Python3)返回
# map函数
list1 = [1, 2, 3, 4]
def fn(a):
    return a ** 2
result = map(fn, list1)
print(list(result))

输出结果

[1, 4, 9, 16]

reduce函数

-reduce(func,lst)其中func必须要有两个参数。每次func计算的结果继续和序列中的下一个元素做累积计算

  • 使用reduce函数,需要导入 functools模块
  • 使用functools.reduce来调用函数
# reduce
import functools
list1 = [1, 2, 3, 4, 5]
def fn(a, b):
    return a + b
result = functools.reduce(fn,list1)
print(result)

输出结果

15

filter函数

  • filter(func,lst)函数用于过滤序列
  • 过滤掉不符合条件的元素,返回一个filter对象
  • 如果要转换成列表,可以使用list()来转换
# filter
list1 = [1, 2, 3, 4, 5, 6]
def func(x):
    return x % 2 == 0
result = filter(func, list1)
print(result)
print(list(result))

输出结果

[2, 4, 6]
  • 过滤条件为,当func有返回值,并且返回不会False的时候

相关文章

  • 013-函数2

    递归函数 应用场景 递归是一种编程思想 如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现 递归的特点 函数...

  • 【Python】-013-函数-函数式编程-1

    不同语言之间的共同特点 不同点语法,运行环境和库的使用等 相同点语言层面:编程方法和模式,那些场景适合什么方法和模...

  • openpyxl.utils.exceptions.Illega

    1,既然检测到excel中存在[\000-\010]|[\013-\014]|[\016-\037]这些非法的字符...

  • 013-升级

    李笑来用它过往的一个真实案例举例子,正处于上班工作状态的,他对于朋友给他讲述的创业经验之谈,没有走心,多年后回顾起...

  • 013-追赶

    今儿下午携大四学弟学妹去给大一学弟学妹做大学生活的经验分享会。这帮学弟学妹们都太猛了,我怀疑老师拉我去完全是垫背的...

  • Day9总结

    1.回顾昨天学习知识: 1)字典2)集合 2.函数 1)函数语法 def 函数名():函数体 2)函数的调用 函数...

  • 【火炉炼AI】机器学习013-用朴素贝叶斯分类器估算个人收入阶层

    【火炉炼AI】机器学习013-用朴素贝叶斯分类器估算个人收入阶层 (本文所使用的Python库和版本号: Pyth...

  • 廖雪峰 | 3.0 函数

    1 调用函数 2 定义函数 3 函数的参数 4 递归函数 1 调用函数 1,使用函数时,需要知道函数的名称和参数2...

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

    05 函数的参数是函数 3. 变量作为函数的实参 函数1作为函数2的实参 -- 函数2就是一个高阶函数 非常重要...

  • 函数2

    1.函数的返回值 在python中,每个函数都有返回值。当函数体中存在return语句的时候,返回值为return...

网友评论

      本文标题:013-函数2

      本文链接:https://www.haomeiwen.com/subject/yjulwrtx.html