博客
关于我
(四)Python总结笔记:函数
阅读量:684 次
发布时间:2019-03-17

本文共 3491 字,大约阅读时间需要 11 分钟。

Python函数总结与笔记

随着编程知识的学习,函数在Python中扮演着越来越重要的角色。本文将从多个方面深入探讨Python中的函数概念,包括定义与使用、参数传递、变量作用域、偏函数、递归、高阶函数、BIFs中的高阶函数、匿名函数、闭包以及装饰器等内容。


1. Python中的函数

1.1 函数的意义

  • 函数的作用:接收输入参数,进行一定的数据处理,然后输出结果。函数可以反复调用,使得代码更加结构化和模块化。
  • 函数的创建
    def foo1(num):    # 函数名为 foo1,参数为 num    # 函数体内的逻辑yles    return num * 2  # 返回结果foo1(5)  # 调用函数 foo1,传入参数 5
  • 函数的结构
    • def:(定义函数名)
    • 参数:(可选择的参数列表)
    • 函数体:(函数执行的逻辑代码)
    • return:(可选的返回语句,用于输出结果)
    • yield:(可选的生成器语句,与 return 有区别)
返回类型 说明
有返回值 使用 return 语句返回一个值,例如 return num * 2
无返回值 如果没有 return 语句,函数将返回 None
printreturn 的区别: print 输出内容不影响函数返回值,而 return 告诉调用者函数已完成。

1.2 函数中的参数

  • 参数分类

    • 必选参数:必须传递给函数调用,顺序重要且不可缺少。
    • 默认参数:可以在函数定义时设置默认值,可按需传递。
    • 变长参数:使用 *args 接收任意数量的位置参数,使用 **kwargs 接收任意数量的关键字参数。
  • 参数传递方式示例

    def sum_all(*args):    return sum(args)sum_all(1, 2, 3, 4)  # 正确调用sum_all([1, 2, 3], [4, 5])  # 错误调用,需使用 `*`包裹非关键字参数
    def greet(name, age=25, country="中国"):     return f"您好!{name},来自{country},年龄{age}岁"greet("Reynold", country="美国")  # 传递关键字参数,覆盖默认值

1.3 变量作用域

  • 变量的生命周期
    • 全局变量:在整个程序中都可以访问,使用 global 关键字声明。
    • 局部变量:只在函数内部使用,存在于局部命名空间中,使用 nonlocal 可访问父函数的变量。
  • 变量搜索顺序
    • 当后续引用同名变量时,优先查找局部变量,然后是全局变量,最后是嵌套的上级函数。

2. 偏函数(Partial Function Application,PFA)

2.1 定义与用途

  • 偏函数:固定部分函数参数,使得在调用时不需要重复传递这些参数。
  • 语法
    from functools import partialfoo2_with_10 = partial(foo2, 10)foo2_with_10(20)  # 10 已经固定为第一个参数
  • 常见场景
    def hex2int(num):    return int(num, 16)hex2int(Configs.CONway)  # 配置文件中的字符串需要被转换为16进制# 使用偏函数优化:hex2int_p = partial(hex2int, base=16)hex2int_p('a1')  # 转换为10进制为 161

3. 递归函数

3.1 定义特点

  • 递归函数在内部调用自身,通过递推解决问题。
  • 常见例子包括阶乘、斐波那契数列和字符串重复。

3.2 示例

def factorial(n):    if n == 0:        return 1    else:        return n * factorial(n - 1)print(factorial(5))  # 输出:1*2*3*4*5 = 120

3.3 注意事项

  • 递归函数的终止条件在实现中至关重要。
  • 函数深度过深可能导致栈溢出错误。

4. 高阶函数

4.1 函数的引用与调用

  • 函数引用:函数名或变量名是函数对象。
  • 函数调用:使用 () 括号调用函数,最后返回一个值或生成器。
  • 高阶函数特点
    • 函数可以接收另一个函数作为参数。
    • 函数可以作为返回值传给另一个函数。

4.2 示例

def calculate(num, func):    return func(num)    # 使用高阶函数mycal = calculate(100, max)  # 返回 100

5. BIFs( unarmed binary functions)中的高阶函数

5.1 filter、map、reduce

  • filter(过滤器)
    def is_even(x):    return x % 2 == 0filtered_list = list(filter(is_even, [1, 2, 3, 4, 5]))print(filtered_list)  # 输出: [2, 4]
  • map(映射器)
    def multiplyby2(x):    return x * 2mapped_list = list(map(multiplyby2, [1, 2, 3, 4, 5]))print(mapped_list)  # 输出: [2, 4, 6, 8, 10]
  • reduce(归纳器)
    from functools import reducefrom operator import addsummed_value = reduce(add, [1, 2, 3, 4, 5])  # 返回 15

6. 匿名函数(Lambda)

6.1 语法与用途

  • 定义方式
    lambda_func = lambda a, b: a + bresult = lambda_func(5, 3)  # 返回 8
  • 常见用途
    sorted_list = sorted(student_marks, key=lambda x: x[0])# 按姓名排序学生成绩

7. 闭包(Closure)

7.1 定义与应用

  • 闭包:嵌套函数中引用外层函数的变量,形成记忆化函数。
  • 示例
    def outer():    x = [1, 2, 3]    def inner():        x.append(4)        return x    return innerinner_func = outer()inner_func()  # x = [1, 2, 3, 4]
  • 闭包的环境变量:被闭包函数所记忆的外层变量。

8. 装饰器(Decorator)

8.1 定义与用途

  • 装饰器:以函数为参数返回一个替换函数的可执行函数。
  • 应用示例
    import datetime@decoratordef foo():    print('原函数')# 装饰器实现:def decorator(func):    def inner():        print('装饰后的执行逻辑')        return func()    return innerfoo()  # 输出: 装饰后的执行逻辑

9. 函数式编程(Functional Programming)

9.1 核心思想

  • 函数是一等公民:可以作为参数传递、返回或赋值。
  • 代码通过函数调用组装:遵循“ наслідplaintext 结构”原则。

9.2 常见场景

  • 高阶函数的组合
    from itertools import chainfrom operator import addfrom functools import reduce# 计算列表元素之和total = reduce(add, chain([1, 2, 3, 4, 5]))  # 返回 15total = reduce(add, chain([10, 20, 30, 40, 50]))  # 返回 150
  • 函数式与命令式编程的对比:| 命令式编程(procedural) | 函数式编程(functional) ||---|---|| 通过步骤控制程序流程 | 通过数据和函数组合结果 |

以上就是对Python函数相关知识的总结与实践说明。通过案例和示例分析,可以更好地理解函数在Python中的核心作用和各种高级功能。

转载地址:http://ksfhz.baihongyu.com/

你可能感兴趣的文章
NOIp模拟赛二十九
查看>>
NOPI读取Excel
查看>>
NoSQL&MongoDB
查看>>
NoSQL介绍
查看>>
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
Now trying to drop the old temporary tablespace, the session hangs.
查看>>
npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
查看>>
npm install digital envelope routines::unsupported解决方法
查看>>
npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
查看>>
npm install报错,证书验证失败unable to get local issuer certificate
查看>>
npm install无法生成node_modules的解决方法
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm run build报Cannot find module错误的解决方法
查看>>
npm run build部署到云服务器中的Nginx(图文配置)
查看>>
npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
查看>>
npm start运行了什么
查看>>
npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
查看>>
npm—小记
查看>>
NPM使用前设置和升级
查看>>
npm入门,这篇就够了
查看>>