马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、模块和包
将一段代码生存为应该扩展名为.py 的文件,该文件就是模块。Python中的模块分为三种,分别为:内置模块、第三方模块和自界说模块。
- 内置模块和第三方模块又称为库
- 内置模块,有 python 表明器自带,不消单独安装
- 第三方模块,须要下载后手动安装
- 如果内置模块和第三方模块没有须要的功能,就须要用户本身编写步调,将步调生存为.py 文件,便是自界说模块。
无论哪种模块都须要使用 import 调用后,才气在步调中调用此中的功能函数。
将功能近似的、关联较强的模块构造起来,形成一个目次,叫做包。
python中的包是模块包,文件名。包罗:
- 一组模块
- _init_.py 文件
- 支持多层嵌套
- .py 步调文件中可以直接界说一些变量,函数和类
- 使用时,通过import 导入,如: import math
他们的关系如下:
包——> 模块 ——> 函数
二、函数
1、函数的界说函数的语法格式如下:
- def 函数名( [ 次数1,参数2,…,参数n ] ):
- 语句块
- [ return [ 返回值1,返回值2,…,返回值n] ]
复制代码
2、函数的界说和调用
(1)def 为python生存字,用于界说函数,函数名的定名规则和变量同等;
(2)括号中是函数的参数,参数可以为空,此时,括号()不能省略,函数参数也可以是多个,多个参数之间有英文逗号隔开;
(3)语句块是函数体,可以对函数举行调用,完成函数的紧张功能;
(4)retrun 是函数的返回生存字,当函数没有返回值时,return 生存字可以省略,函数有多个返回值时,在return 生存字背面,将多个返回值以英文逗号隔开;
- #无返回值时省略return
- def greet(name):
- print(f"Hello, {name}!")
- result = greet("Alice") # 输出: Hello, Alice!
- print(result) # 输出: None
- #单返回值
- def add(a, b):
- return a + b
- sum_result = add(3, 5) # sum_result = 8
- #多返回值
- def calculate(a, b):
- add = a + b
- sub = a - b
- return add, sub # 实际返回元组 (add, sub)
- result = calculate(10, 5)
- print(result) # 输出: (15, 5)
- # 解包返回值
- sum_result, diff_result = calculate(10, 5)
- print(sum_result) # 输出: 15
- print(diff_result) # 输出: 5
复制代码 这里的解包返回值,各人不懂的话不关键怕,我在末了做了增补。
(5)函数的范例和函数的返回值范例雷同,当返回值是多个时,函数的返回值是元组范例。
- 单返回值范例:若函数返回单个值(如 int),则直接标注为对应范例。
- def get_number() -> int:
- return 42
复制代码
- 多返回值范例:若函数返回多个值(如 a, b),Python 会将其转换为元组。此时返回值范例应标注为 tuple[范例1, 范例2, ...]。
- def calculate(a: int, b: int) -> tuple[int, int]:
- return a + b, a - b # 实际返回 (int, int) 类型的元组
复制代码
三、函数的参数
1、形到场实参
- 函数界说时,圆括号内参数列表的参数,不代表具体的数据,称为形参;
- 函数调用时,将具体的数据转达给情势参数,此时的参数称为实参。
- 根据参数的差别数据范例,将实参的值大概引用转达给形参。
- 当参数范例为不可变数据范例时,在函数内部直接修改形参的值不会影响实参;
- 但当参数范例为可变数据范例时,在函数内部使用下标或其他方式为其增长、删除元素或修改元素值时,修改后的结果是可以转到达函数之外的,即实参也会得到相应的修改。
2、必备参数、默认参数、可变参数和关键字参数
- 函数调用时,必须转达的参数,称为必备参数,也称必选参数;
- 函数界说时,设置了默认值的参数函数调用时,可以转达实参,也可以不转达参数,不转达时,参数取界说时的默认值,这种参数,称为默认参数,也称可选参数。
- 须要注意的是,必备参数必须在前面界说,其他参数在背面界说。
3、参数转达
- 在函数调用参数转达时,按位置形参和实参逐一对应转达称为位置转达;
- 在函数调用参数转达时,按照参数的名称显式的转达,称为名称转达。
按位置转达,不须要给出参数的名称,但形参和实参的位置雷同、范例雷同,否则轻易堕落;按名称显式的转达参数,则不关心参数的前后序次,在参数较多时,不轻易肴杂。
4、全局变量与局部变量
- 在函数外部界说的变量,称为全局变量;在函数内部界说的变量称为局部变量。
- 全局变量的生命周期是步调的整个运行周期,只有步调被关闭后全局变量才会被烧毁并开释内存空间,因此,全局变量在整个步调中,都可以使用;
- 局部变量的生命周期是函数调用时间,函数调用竣事返回后,局部变量就烧毁并开释内存空间,因此局部变量的作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的。
5、匿名函数
当函数一次性使用,函数体语句较少,如只有一个表达式,为了节流内存中变量界说空间就不须要界说函数名,此时,可以界说匿名函数。名函数的语法格式是:
匿名函数可以有0个或多个参数,但必须有返回值。匿名函数的调用和一样平常函数的调用相似可以单独使用,也可以作为表达式的一部门。
常见使用场景
(1)作为参数转达(如 sorted, map, filter)
- # 按字符串长度排序列表
- words = ["apple", "banana", "cherry", "date"]
- sorted_words = sorted(words, key=lambda x: len(x))
- print(sorted_words) # 输出 ['date', 'apple', 'banana', 'cherry']
- # 过滤偶数
- numbers = [1, 2, 3, 4, 5]
- even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
- print(even_numbers) # 输出 [2, 4]
- # 对每个元素平方
- squared = list(map(lambda x: x**2, numbers))
- print(squared) # 输出 [1, 4, 9, 16, 25]
复制代码 filter()函数在前面提过,过滤出满足条件的函数。
(2)快速界说简单逻辑
- # 判断是否为偶数
- is_even = lambda x: x % 2 == 0
- print(is_even(4)) # True
- # 拼接字符串
- greet = lambda name: f"Hello, {name}!"
- print(greet("Alice")) # Hello, Alice!
复制代码 (3)团结条件表达式
- # 返回两数中的较大值
- max_value = lambda a, b: a if a > b else b
- print(max_value(5, 8)) # 8
复制代码
四、增补:
解包返回值:
Python 中一种便捷的语法,用于将函数返回的多个值(通常是元组、列表等可迭代对象)直接拆分并赋值给多个变量。它的焦点目标是让代码更轻便、可读性更强。
【例】假设有一个函数返回两个值:
- def get_coordinates():
- x = 3
- y = 4
- return x, y # 实际返回的是元组 (3, 4)
-
复制代码 不解包的环境:
直接获取返回值时,会得到一个元组:
- coords = get_coordinates()
- print(coords) # 输出 (3, 4)
- print(coords[0]) # 输出 3(通过索引访问)
- print(coords[1]) # 输出 4
复制代码 解包的环境:
将元组中的值直接拆分为两个变量:
- x, y = get_coordinates() # 解包赋值
- print(x) # 输出 3
- print(y) # 输出 4
复制代码
解包具有机动性:
(1)实用于恣意可迭代对象
不但是元组,列表、字符串等可迭代对象也可以解包:
- def get_data():
- return ["Alice", 25, "Engineer"]
- name, age, job = get_data() # 解包列表
- print(name) # Alice
复制代码 (2)忽略不须要的值
用下划线 _ 占位忽略不须要的返回值:
- x, _ = get_coordinates() # 只要 x,忽略 y
- print(x) # 3
复制代码 (3)解包嵌套布局
以致可以解包嵌套的返回值(如元组中的元组):
- def nested_data():
- return (1, (2, 3))
- a, (b, c) = nested_data()
- print(a, b, c) # 1 2 3
复制代码 (4)使用 * 处置处罚剩余值
用 * 变量名 吸收剩余的全部值(返回列表):
- def multiple_values():
- return 1, 2, 3, 4, 5
- first, *middle, last = multiple_values()
- print(first) # 1
- print(middle) # [2, 3, 4](中间的数值被封装为列表)
- print(last) # 5
复制代码
注意事项:
(1)变量数目必须匹配:
左侧变量数必须与返回值数目同等,否则会报错:
- x, y, z = get_coordinates() # 错误!元组只有 2 个值,但尝试解包给 3 个变量
复制代码 (2)返回值必须是可迭代对象:
如果函数返回单个值(非元组/列表等),实验解包会报错:
- def single_value():
- return 5
- a, b = single_value() # 错误!单个整数无法解包
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |