python函数及面向过程高级特性
python函数
Python 函数(Function) 是将一段具有独立功能的代码进行封装,通过函数名即可重复调用,提高代码可读性与复用性。Python 还提供切片、迭代、生成器等功能,使面向过程编程更灵活强大。
基本用法:
def 函数名(参数):
函数体
return 返回值
定义与调用函数
python
def add(a, b): # 定义函数,a 和 b 是"参数"
return a + b # 返回结果
res = add(3, 5) # 调用函数
print(res) # 输出 8
说明:
def用于定义函数- 参数在定义时编写,调用时传入实际值(称为"实参")
return返回结果;若省略,函数默认返回 None
参数类型示例
python
def func(a, b=10, *args, **kwargs):
print(a) # 位置参数 必须传
print(b) # 默认参数
print(args) # 可变参数(元组) 元组就是一个"不能改的列表"
print(kwargs) # 关键字参数(字典)
说明:
-
b=10 为默认参数,可不传 -
*args 接收多个位置参数 -
**kwargs 接收多个"键=值"形式的参数
结合起来看一个完整例子:
pythonfunc(100, 20, 1, 2, 3, name="tom", age=19)最终:
- a = 100
- b = 20
- args = (1, 2, 3)
- kwargs = {"name": "tom", "age": 19}
打印结果会是:
100 20 (1, 2, 3) {'name': 'tom', 'age': 19}
函数的嵌套调用
python
def func1(x):
return x * 2
def func2(y):
return func1(y) + 3 # 内部调用另一个函数
print(func2(5)) # 输出 13
说明:
函数内部可以调用其他函数,用于拆分复杂逻辑,让结构更清晰。
递归函数(函数自己调用自己)
python
def factorial(n):
if n == 1: # 递归终止条件
return 1
return n * factorial(n - 1)
print(factorial(5)) # 输出 120
说明:
- 递归必须有"终止条件",否则会无限调用
- 常用在数学问题、树结构处理等场景
Python 面向过程编程高级语法
切片(slice)
python
lst = [10, 20, 30, 40, 50]
print(lst[1:4]) # [20, 30, 40]
切片语法是:
list[start:end:step]
从列表中按照指定的起点、终点、步长,把一段内容"切"出来,得到一个新的列表。:
-
start 起始位置从哪个索引开始取(包含该位置)。
例:
1 表示从第二个元素(20)开始。 -
end 结束位置(不包含)取到哪个索引之前结束(不包括该位置)。
例:
4 表示取到索引 3(40)为止,索引 4 的 50 不取。 -
step 步长(默认为 1)每次取元素时向前跳几格。
例:步长为 2,就是每隔一个取一个。
-
支持负数索引
-1 表示最后一个、-2 倒数第二个,以此类推。 -
支持倒序切片
当
step 为负数时,从右向左取,例如lst[::-1] 可以反转整个列表。当 step 为正数 时(正常方向):
start默认从 最左边(索引 0) 开始end默认到 最右边(索引 len) 结束
但当 step 为负数(倒序)时:
start默认从 最后一个元素 开始end默认到 第一个元素的前一位 结束
迭代(for 循环遍历)
例子一
python
for x in [1, 2, 3]:
print(x)
#输出:
# 1
# 2
# 3
说明:
- Python 的 for 循环可以遍历序列(列表、字符串)、字典、集合等
- 内部自动控制索引,无需自己写 i++
例子二
python
students = [
{"name": "Li", "age": 19},
{"name": "Wang", "age": 20},
{"name": "Zhang", "age": 18}
]
for stu in students:
print(stu["name"], stu["age"])
输出结果:
Li 19
Wang 20
Zhang 18
例子三
遍历字符串列表,筛选出长度大于 3 的单词
python
words = ["hi", "python", "sun", "a", "coffee", "dog"]
for w in words:
if len(w) > 3: # 判断字符串长度是否大于 3
print(w.upper()) # 转成大写并打印
输出结果:
PYTHON
COFFEE
列表生成式(List Comprehension)
python
squares = [x * x for x in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
说明:
列表生成式是一种 用一行代码生成列表 的写法,比传统的 for 循环更简洁、更直观。
基本结构为:
[ 表达式 for 变量 in 可迭代对象 if 条件可选 ]
-
它可以把普通的循环写成一行,适合根据某个规则"生成新列表"。
在例子中:
for x in range(1, 6)表示 x 依次为 1 到 5x * x是"要放进新列表的内容"
最终生成所有平方值列表[1, 4, 9, 16, 25]
-
列表生成式可以附加条件过滤,让你"只保留满足条件的元素"。
示例:
pythonpositives = [x for x in nums if x > 0]作用:从 nums 中筛选出所有正数生成新列表。
-
生成式中的"表达式"不一定是简单计算,也可以是字符串操作、函数调用甚至三元表达式。
例如:
pythonlengths = [len(word) for word in words]生成所有单词的长度列表。
-
与普通 for 对比:
普通写法:
pythonres = [] for x in nums: if x % 2 == 0: res.append(x * 2)列表生成式:
pythonres = [x * 2 for x in nums if x % 2 == 0]功能完全一致,但更紧凑。
-
列表生成式会返回一个全新的列表,不会修改原数据。
因此适用于"基于旧列表,生成一个新列表"的场景。
生成器(Generator)
python
def gen():
for i in range(3):
yield i # 用 yield 生成值
g = gen() #创建一个生成器对象 g 准备好即将执行 gen() 的代码,但还没开始跑
print(next(g)) # 0
print(next(g)) # 1
说明:
-
使用
yield 的函数就是生成器- 只要函数里出现了
yield ,这个函数就不再是普通函数,而是一个 生成器函数(generator function) 。 - 调用这个函数不会立即执行函数体,而是返回一个生成器对象(generator object) 。
- 函数遇到
yield会"停住",把值"交出去",下次再从停下的地方继续往后执行
- 只要函数里出现了
-
每次
next() 执行到下一个yield -
第一次调用:
pythonprint(next(g))流程:
- 进入
gen()函数 - 进入
for i in range(3) i == 0- 遇到
yield i,返回0,但并没有结束函数 - 暂停在
yield这一行
所以第一次输出:
0
第二次调用:
pythonprint(next(g))这次不是从头开始,而是:
- 接着上次暂停的地方继续执行
- 所以继续 for 循环
- 进入
-
节省内存,适合处理大量数据()
因为生成器:
-
不一次性生成全部数据
-
而是按需生成一个算一个
-
用一个值算一个值,不要的值就不占内存
-
python
next 是 Python 的一个内置函数,作用非常简单:
一句话解释
next(x) 的意思是:从可迭代对象(iterator/迭代器)里取下一个值。
在 Python 中,有些东西可以"一步一步"取值,比如:
生成器(generator)
迭代器(iterator)
用 iter() 包装后的列表、元组等
这些东西就像"能连续产出数据的机器"。
而 next() 就是:
让这个机器继续吐出下一个值。
用生成器举例
python
def gen():
for i in range(3):
yield i
g = gen() # g 是一个生成器
此时 g 还没有开始执行。
我们用 next(g) 让它吐出数据:
python
next(g) # 取到第一个值 0
next(g) # 取到第二个值 1
next(g) # 取到第三个值 2
再调用一次:
python
next(g) # 没有值了,会报 StopIteration
用 iter() 包装也能用 next()
iter(iterable) : 这个函数接收一个可迭代对象(如列表、元组、字典、字符串等)作为参数,并返回一个与该对象关联的迭代器。
python
lst = [10, 20, 30]
it = iter(lst) # 把列表变成迭代器
print(next(it)) # 10
print(next(it)) # 20
print(next(it)) # 30
迭代器(Iterator)
python
it = iter([10, 20, 30]) # 将列表转为迭代器
print(next(it)) # 10
print(next(it)) # 20
说明:
-
迭代器用于逐个获取数据
-
iter(obj)返回一个迭代器对象 -
可被 for 循环使用
-
一次取一个,仅向前,不可回退
lst = [1, 2, 3, 4]
it = iter(lst)
while True:
try:
val = next(it)
print(val)
except StopIteration: # 当迭代器耗尽时会触发异常
break
输出:
1
2
3
4