Python模块与函数的终极指南

[复制链接]
发表于 2025-10-2 16:18:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、模块和包

        将一段代码生存为应该扩展名为.py 的文件,该文件就是模块。Python中的模块分为三种,分别为:内置模块、第三方模块和自界说模块。


  • 内置模块和第三方模块又称为库
  • 内置模块,有 python 表明器自带,不消单独安装
  • 第三方模块,须要下载后手动安装
  • 如果内置模块和第三方模块没有须要的功能,就须要用户本身编写步调,将步调生存为.py 文件,便是自界说模块。
无论哪种模块都须要使用 import 调用后,才气在步调中调用此中的功能函数。
       
        将功能近似的、关联较强的模块构造起来,形成一个目次,叫做
python中的包是模块包,文件名。包罗:


  • 一组模块
  • _init_.py 文件
  • 支持多层嵌套
  • .py 步调文件中可以直接界说一些变量,函数和类
  • 使用时,通过import 导入,如: import math
他们的关系如下:
        包——>  模块 ——> 函数

二、函数

1、函数的界说函数的语法格式如下:       
  1. def 函数名( [ 次数1,参数2,…,参数n ] ):
  2.                 语句块
  3.                 [ return [ 返回值1,返回值2,…,返回值n] ]
复制代码

2、函数的界说和调用
(1)def 为python生存字,用于界说函数,函数名的定名规则和变量同等;
(2)括号中是函数的参数,参数可以为空,此时,括号()不能省略,函数参数也可以是多个,多个参数之间有英文逗号隔开;
(3)语句块是函数体,可以对函数举行调用,完成函数的紧张功能;
(4)retrun 是函数的返回生存字,当函数没有返回值时,return 生存字可以省略,函数有多个返回值时,在return 生存字背面,将多个返回值以英文逗号隔开;
  1. #无返回值时省略return
  2. def greet(name):
  3.     print(f"Hello, {name}!")
  4. result = greet("Alice")  # 输出: Hello, Alice!
  5. print(result)            # 输出: None
  6. #单返回值
  7. def add(a, b):
  8.     return a + b
  9. sum_result = add(3, 5)  # sum_result = 8
  10. #多返回值
  11. def calculate(a, b):
  12.     add = a + b
  13.     sub = a - b
  14.     return add, sub  # 实际返回元组 (add, sub)
  15. result = calculate(10, 5)
  16. print(result)        # 输出: (15, 5)
  17. # 解包返回值
  18. sum_result, diff_result = calculate(10, 5)
  19. print(sum_result)    # 输出: 15
  20. print(diff_result)   # 输出: 5
复制代码
这里的解包返回值,各人不懂的话不关键怕,我在末了做了增补。
(5)函数的范例和函数的返回值范例雷同,当返回值是多个时,函数的返回值是元组范例。


  • 单返回值范例:若函数返回单个值(如 int),则直接标注为对应范例。
  1. def get_number() -> int:
  2.     return 42
复制代码


  • 多返回值范例:若函数返回多个值(如 a, b),Python 会将其转换为元组。此时返回值范例应标注为 tuple[范例1, 范例2, ...]。
  1. def calculate(a: int, b: int) -> tuple[int, int]:
  2.     return a + b, a - b  # 实际返回 (int, int) 类型的元组
复制代码

三、函数的参数

1、形到场实参


  • 函数界说时,圆括号内参数列表的参数,不代表具体的数据,称为形参;
  • 函数调用时,将具体的数据转达给情势参数,此时的参数称为实参
  • 根据参数的差别数据范例,将实参的值大概引用转达给形参
  • 当参数范例为不可变数据范例时,在函数内部直接修改形参的值不会影响实参;
  • 但当参数范例为可变数据范例时,在函数内部使用下标或其他方式为其增长、删除元素或修改元素值时,修改后的结果是可以转到达函数之外的,即实参也会得到相应的修改。

2、必备参数、默认参数、可变参数和关键字参数


  • 函数调用时,必须转达的参数,称为必备参数,也称必选参数
  • 函数界说时,设置了默认值的参数函数调用时,可以转达实参,也可以不转达参数,不转达时,参数取界说时的默认值,这种参数,称为默认参数,也称可选参数
  • 须要注意的是,必备参数必须在前面界说,其他参数在背面界说。

3、参数转达


  • 在函数调用参数转达时,按位置形参和实参逐一对应转达称为位置转达
  • 在函数调用参数转达时,按照参数的名称显式的转达,称为名称转达
        按位置转达,不须要给出参数的名称,但形参和实参的位置雷同、范例雷同,否则轻易堕落;按名称显式的转达参数,则不关心参数的前后序次,在参数较多时,不轻易肴杂。

4、全局变量与局部变量


  • 在函数外部界说的变量,称为全局变量;在函数内部界说的变量称为局部变量
  • 全局变量的生命周期是步调的整个运行周期,只有步调被关闭后全局变量才会被烧毁并开释内存空间,因此,全局变量在整个步调中,都可以使用;
  • 局部变量的生命周期是函数调用时间,函数调用竣事返回后,局部变量就烧毁并开释内存空间,因此局部变量的作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的。

5、匿名函数
        当函数一次性使用,函数体语句较少,如只有一个表达式,为了节流内存中变量界说空间就不须要界说函数名,此时,可以界说匿名函数。名函数的语法格式是:
 
  1.         函数名 =lambda」参数]:返回值
复制代码
              
        匿名函数可以有0个或多个参数,但必须有返回值。匿名函数的调用和一样平常函数的调用相似可以单独使用,也可以作为表达式的一部门。

常见使用场景
(1)作为参数转达(如 sorted, map, filter)
  1. # 按字符串长度排序列表
  2. words = ["apple", "banana", "cherry", "date"]
  3. sorted_words = sorted(words, key=lambda x: len(x))
  4. print(sorted_words)  # 输出 ['date', 'apple', 'banana', 'cherry']
  5. # 过滤偶数
  6. numbers = [1, 2, 3, 4, 5]
  7. even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
  8. print(even_numbers)  # 输出 [2, 4]
  9. # 对每个元素平方
  10. squared = list(map(lambda x: x**2, numbers))
  11. print(squared)       # 输出 [1, 4, 9, 16, 25]
复制代码
 filter()函数在前面提过,过滤出满足条件的函数。
(2)快速界说简单逻辑
  1. # 判断是否为偶数
  2. is_even = lambda x: x % 2 == 0
  3. print(is_even(4))  # True
  4. # 拼接字符串
  5. greet = lambda name: f"Hello, {name}!"
  6. print(greet("Alice"))  # Hello, Alice!
复制代码
(3)团结条件表达式
  1. # 返回两数中的较大值
  2. max_value = lambda a, b: a if a > b else b
  3. print(max_value(5, 8))  # 8
复制代码

四、增补:

解包返回值:

         Python 中一种便捷的语法,用于将函数返回的多个值(通常是元组、列表等可迭代对象)直接拆分并赋值给多个变量。它的焦点目标是让代码更轻便、可读性更强。
【例】假设有一个函数返回两个值:
  1. ​def get_coordinates():
  2.     x = 3
  3.     y = 4
  4.     return x, y  # 实际返回的是元组 (3, 4)
复制代码
不解包的环境

直接获取返回值时,会得到一个元组:
  1. coords = get_coordinates()
  2. print(coords)        # 输出 (3, 4)
  3. print(coords[0])     # 输出 3(通过索引访问)
  4. print(coords[1])     # 输出 4
复制代码
解包的环境

将元组中的值直接拆分为两个变量:
  1. x, y = get_coordinates()  # 解包赋值
  2. print(x)  # 输出 3
  3. print(y)  # 输出 4
复制代码

解包具有机动性:
(1)实用于恣意可迭代对象
        不但是元组,列表、字符串等可迭代对象也可以解包:
  1. def get_data():
  2.     return ["Alice", 25, "Engineer"]
  3. name, age, job = get_data()  # 解包列表
  4. print(name)  # Alice
复制代码
(2)忽略不须要的值
        用下划线 _ 占位忽略不须要的返回值:
  1. x, _ = get_coordinates()  # 只要 x,忽略 y
  2. print(x)  # 3
复制代码
(3)解包嵌套布局
        以致可以解包嵌套的返回值(如元组中的元组):
  1. def nested_data():
  2.     return (1, (2, 3))
  3. a, (b, c) = nested_data()
  4. print(a, b, c)  # 1 2 3
复制代码
(4)使用 * 处置处罚剩余值
用 * 变量名 吸收剩余的全部值(返回列表):
  1. def multiple_values():
  2.     return 1, 2, 3, 4, 5
  3. first, *middle, last = multiple_values()
  4. print(first)   # 1
  5. print(middle)  # [2, 3, 4](中间的数值被封装为列表)
  6. print(last)    # 5
复制代码

注意事项:
(1)变量数目必须匹配
        左侧变量数必须与返回值数目同等,否则会报错:
  1. x, y, z = get_coordinates()  # 错误!元组只有 2 个值,但尝试解包给 3 个变量
复制代码
(2)返回值必须是可迭代对象
        如果函数返回单个值(非元组/列表等),实验解包会报错:
  1. def single_value():
  2.     return 5
  3. a, b = single_value()  # 错误!单个整数无法解包
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表