首页 > 其他分享 >高阶函数

高阶函数

时间:2023-07-09 11:35:17浏览次数:34  
标签:map 函数 counter numbers print 高阶

什么是高阶函数?

在Python中,高阶函数是指能够接受函数作为参数或返回函数作为结果的函数。

 

'''
0. 体验
'''
def sum_num(a, b, f):  # 定义1个高阶函数:入参可接受一个函数f
    return f(a) + f(b)  # 调用函数f


result1 = sum_num(-1, 5, abs)  # 把内置函数abs作为实参,传入sum_num
print(result1) # 6


result2 = sum_num(1.1, 1.3, round) # 把内置函数round作为实参传入
print(result2)  # 2

  

示例

 

'''
在Python中,高阶函数是指能够接受函数作为参数或返回函数作为结果的函数。
换句话说,高阶函数将函数作为一等公民对待,可以像其他数据类型一样进行传递和操作。
'''

'''
1. 函数作为参数:高阶函数可以接受一个或多个函数作为参数,以便在函数体内部调用或处理这些函数。
例如,map()、filter()和sorted()函数都接受函数作为参数来操作列表的元素。
'''


# 1.1 定义函数
def square(x):
    return x ** 2


numbers = [1, 2, 3, 4, 5]
# 1.2 使用高阶函数map,让square函数当实参,传入map函数
squared_numbers = map(square, numbers)  # 使用map()将square函数应用于numbers列表中的每个元素
print(squared_numbers)  # <map object at 0x000001F47B9D6E60>
print(list(squared_numbers))  # [1, 4, 9, 16, 25]

'''
2. 函数作为返回值:高阶函数可以根据条件动态地返回一个函数。这样的函数被称为工厂函数或闭包函数。一个常见的例子是装饰器。
'''


def greet():
    def say_hello():
        return "Hello"

    return say_hello


hello_func = greet()  # 调用greet()函数返回say_hello函数
message = hello_func()  # 调用hello_func函数
print(message)  # Hello


def make_counter(increment):
    count = 0

    def counter():  # 多次调用就等价于在此处有一个for循环调用此函数
        nonlocal count
        count += increment
        return count

    return counter


# 返回是函数的引用,记住是引用,
counter_1 = make_counter(1)  # 创建一个增量为1的计数器函数
print(counter_1())  # 输出:1
print(counter_1())  # 输出:2  counter_1函数还没有死亡即它的栈还在,多次调用就等价于for循环

# 生成1个新的引用
counter_5 = make_counter(5)  # 创建一个增量为5的计数器函数
print(counter_5())  # 输出:5
print(counter_5())  # 输出:10

'''
3. Lambda函数(匿名函数):Lambda函数是一种特殊的函数形式,它可以在需要函数的地方快速定义简单的函数。
通常用于临时的、简单的功能需求,不需要为其定义一个独立的函数。常与高阶函数一起使用
'''
numbers = [1, 2, 3, 4, 5]
# lambda x: x ** 2 整体作为一个匿名函数,作为实参传给map函数,此处map函数是高阶函数,对比示例1
squared_numbers = map(lambda x: x ** 2, numbers)  # 使用lambda函数对numbers列表中的每个元素进行平方操作
print(list(squared_numbers))  # [1, 4, 9, 16, 25]

 

标签:map,函数,counter,numbers,print,高阶
From: https://www.cnblogs.com/allenxx/p/17538468.html

相关文章

  • jmeter函数
    1.jmeter常用函数1.1 Random${__Random(100000,999999,num)}引用变量:${num}后面不用可以不要num变量:${__Random(100000,999999,)}  1.2time直接生成,生成13位时间戳:${__time(,)}获取前十位时间戳:${__time(/1000,)} 按年月日时分秒生成:${__time(yyyy-MM-ddHH:m......
  • 内置函数round
    1'''2内置函数round对参数进行四舍五入/3语法:round(number,ndigits)4其中,number是要进行四舍五入的数字,而ndigits是可选参数,表示保留小数的位数,默认为0。5number:要进行四舍五入的数字。6ndigits:保留小数的位数。如果省略该参数,则默认为0,即对整数......
  • 内置函数abs02
    语法&说明语法abs(x) 说明abs()是Python内置函数,用于返回一个数的绝对值。其中,x是要求绝对值的数字1num=-52absolute_value=abs(num)#返回5示例1'''2abs()是Python内置函数,用于返回一个数的绝对值3语法:abs(x)其中,x是要求绝对值的数字45注......
  • 内置函数abs
    1'''2abs()是Python内置函数,用于返回一个数的绝对值3语法:abs(x)其中,x是要求绝对值的数字45注意事项:61.abs()函数只能应用于数值类型(整数、浮点数、复数),不能用于其他类型(如字符串)。72.注意在使用负数时,abs()函数会返回其绝对值,而不改变其符号。8......
  • 匿名函数(lambda表达式)01
    匿名函数顾名思义就是没有名字的函数。匿名函数是一种没有函数名的函数,也称为"lambda函数"。它是一种简洁的函数定义方式,可以在需要函数对象的任何地方使用,并且通常用于简化代码或作为其他函数的参数。语法1lambdaarguments:expression其中,arguments是函数的参数列表,而......
  • 函数递归
      1'''2函数的递归即函数调用自己3最佳实践:41.定义基本情况(终止条件):递归函数应该始终包含一个或多个基本情况,即终止条件。这些基本情况描述了递归的结束条件,当满足这些条件时,递归将停止并返回结果。52.确保向基本情况收敛:确保递归过程能够向基本情......
  • 函数的变量作用域、返回值、参数
    函数的变量作用域以及访问、修改全局变量1'''2函数往往涉及2类变量:31.全部变量,直接访问,修改需要使用global关键字42.局部变量,函数内部定义的变量5'''67#1.全局变量8name='Allen'91011#1.1定义函数12defprint_name():13p......
  • 小程序函数全集封装
    /***Createdbyzrs*/importVuefrom'vue'/***json拼接为字符串*@paramjson*@returns{string}*/exportfunctionqs(json){letstr=''for(letkeyinjson){if(json.hasOwnProperty(key)){str+=key+'......
  • R语言中 table函数统计不了NA
     001、vec2<-c(3,NA,6,5,NA,NA,8,9,NA,4,7,8)##测试向量vec2table(vec2)vec2table(vec2,useNA="always")##统计NA,增加参数useNA="always".  ......
  • python - 函数(二)
    4.传递列表defgreet_users(names):"""向列表中的每位用户发出问候。"""fornameinnames:msg=f"Hello,{name.title()}"print(msg)usernames=['hanks','jackson','jimmy']......