当前位置: 首页 > news >正文

10.16Python基础-函数

Python函数详解

1. 定义一个函数

1.1 def语句

  • 概念def是Python中用来定义函数的关键字。
  • 格式
    def 函数名([形参]):函数体
    

1.2 函数的调用

  • 方法:通过函数名加括号的方式调用函数。
  • 示例
    def hello():print('Hello, World!')
    hello()  # 调用hello函数
    

1.3 return语句

  • 用途:用于从函数中返回结果到调用处。
  • 格式
    return 表达式
    
  • 示例
    def add(a, b):return a + b
    result = add(5, 3)
    print(result)  # 输出 8
    

2. 函数参数

2.1 函数的调用传参

  • 分类
    • 位置传参:按参数的位置传入实参。
    • 关键字传参:指定参数名称来传入实参。
  • 示例
    def greet(name, message):print(f"{message}, {name}!")
    greet("Alice", "Hello")  # 位置传参
    greet(message="Hi", name="Bob")  # 关键字传参
    

2.2 函数的形式参数定义方法

2.2.1 缺省参数(默认参数)
  • 特点:当不传入该参数时,使用默认值。
  • 示例
    def func(a, b=1):return a + b
    print(func(3))  # 输出 4
    print(func(3, 2))  # 输出 5
    
2.2.2 形参的定义
2.2.2.1 位置形参
  • 定义:函数定义时的参数列表中的参数。
2.2.2.2 星号元组形参
  • 符号*
  • 用途:收集剩余的所有位置参数到一个元组中。
  • 示例
    def func(*args):return args
    print(func(1, 2, 3))  # 输出 (1, 2, 3)
    
2.2.2.3 命名关键字形参
  • 符号*后面加上参数名
  • 用途:收集所有未出现在前面的关键字参数到一个字典中。
  • 示例
    def func(*, a, b):return a + b
    print(func(a=5, b=3))  # 输出 8
    
2.2.2.4 双星号字典形参
  • 符号**
  • 用途:将传入的关键字参数收集到一个字典中。
  • 示例
    def func(**kwargs):return kwargs
    print(func(name="Alice", age=30))  # 输出 {'name': 'Alice', 'age': 30}
    

2.3 可变不可变

  • 区别
    • 可变对象:如列表、字典等,可以在原内存地址上被改变。
    • 不可变对象:如整数、字符串等,不能在原内存地址上被改变。
  • 示例
    # 可变对象示例
    my_list = [1, 2, 3]
    my_list.append(4)
    print(my_list)  # 输出 [1, 2, 3, 4]
    # 不可变对象示例
    my_string = "Hello"
    my_string += ", World!"
    print(my_string)  # 输出 "Hello, World!"
    

3. 返回值

  • 用法:使用return语句返回函数执行的结果。
  • 示例
    def sum(a, b):return a + b
    total = sum(10, 5)
    print(total)  # 输出 15
    

4. 匿名函数

  • 定义:使用lambda表达式创建的函数。
  • 格式
    lambda 参数列表: 表达式
    
  • 示例
    square = lambda x: x ** 2
    print(square(5))  # 输出 25
    # 在排序时使用匿名函数
    points = [(2, 3), (1, 2), (4, 1)]
    points.sort(key=lambda point: point[1])  # 按y坐标排序
    print(points)  # 输出 [(4, 1), (1, 2), (2, 3)]
    

5. 变量作用域

5.1 什么是变量作用域

  • 解释:变量的可见性和生命周期由其所在的作用域决定。

5.2 局部变量和全局变量

  • 局部变量:只在当前函数内有效的变量。
  • 全局变量:在整个程序中都有效的变量。
  • 示例
    global_var = "I am global"
    def func():local_var = "I am local"print(local_var)print(global_var)  # 可以访问全局变量
    func()
    # print(local_var)  # 会报错,因为local_var是局部变量
    

5.3 局部作用域修改全局变量

  • 方法:使用global关键字声明要修改的全局变量。
  • 示例
    count = 0
    def increment():global count  # 声明要使用全局变量countcount += 1
    increment()
    print(count)  # 输出 1
    

5.4 局部作用域修改外部变量

  • 方法:使用nonlocal关键字声明要修改的外部变量。
  • 示例
    def outer():outer_var = 10def inner():nonlocal outer_var  # 声明要使用外部变量outer_varouter_var += 5return outer_varreturn inner()
    print(outer())  # 输出 15
    

6. 函数的内存分配

  • 过程:当函数被调用时,会在内存中为其分配空间以存储局部变量和中间计算结果。
  • 示例
    def my_function():a = 10  # a在调用时被分配内存return a * 2
    result = my_function()
    print(result)  # 输出 20
    

7. 函数自调用(递归)

  • 定义:函数在其内部再次调用自己的行为。
  • 注意:需要有终止条件避免无限循环。
  • 示例
    def factorial(n):if n == 0:  # 终止条件return 1else:return n * factorial(n - 1)
    print(factorial(5))  # 输出 120
    

8. 练习

  • 任务:实现一个自定义的myrange函数,模拟内置的range函数的功能。
  • 示例
    def myrange(start, end=None, step=1):if end is None:  # 当只提供一个参数时end = startstart = 0while start < end:yield startstart += step
    # 使用自定义的myrange函数
    for i in myrange(5):print(i)  # 输出 0, 1, 2, 3, 4
    for i in myrange(1, 10, 2):print(i)  # 输出 1, 3, 5, 7, 9
    

http://www.mrgr.cn/news/51593.html

相关文章:

  • 1、HTML笔记
  • AI周报(10.6-10.12)
  • java-day11
  • 通过华为鲲鹏认证的软件产品如何助力信创产业
  • 【建议收藏】ElasticSearch会问什么?看这里!
  • 智慧引擎:探索十款顶尖AI知识库软件的奥秘
  • TCP Analysis Flags 之 TCP Window Update
  • JAVA防止订单重复提交
  • 基于Arduino的仿生面具
  • 如何在CSS中修改滚动条样式
  • AWS新用户注册活动参与教程
  • Java类与对象的分配机制
  • 1-3.Retrofit 异常请求清单(404 请求、超时请求、连接失败请求)
  • 力扣 中等 237.删除链表中的节点
  • Windows系统快捷键(自用)
  • 自动登录RPA的进阶:巧妙处理未知通知弹窗
  • Ajax(web笔记)
  • Linux调试器-gdb 与 冯诺依曼体系结构
  • 【Docker系列】docker-compose down 命令详解
  • Linux权限理解及环境基础开发工具使用