博客
关于我
(四)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。
print 和 return 的区别: 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/

你可能感兴趣的文章
python 使用filetype校验文件
查看>>
Python 使用flush函数将缓冲区数据立即写磁盘
查看>>
python 使用in判断不准确,in不好使
查看>>
Python 使用pandas 进行查询和统计详解
查看>>
Redis 配置文件redis.conf详细解释
查看>>
python网络爬虫(2)——scrapy框架的基础使用
查看>>
python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
查看>>
Python 使用哈希函数用于加密
查看>>
Python 依赖管理的革新——Poetry 深度解析
查看>>
python 保留精度及增加去除数字的千位分隔符(金额化数字)
查看>>
python 倒计时 9,8,7,。。。。。。0
查看>>
Python 入门开发学习笔记之数据的增删改查
查看>>
Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
查看>>
Python 八大排序算法合集
查看>>
python 关于epoll的学习
查看>>
Python 内存管理
查看>>
Python 内嵌函数:它们有什么用处?
查看>>
Python 内置 sum 函数 vs. for 循环性能
查看>>
Python 内置时间模块
查看>>
python 内部如何实现命名元组?
查看>>