python函数及面向过程高级特性

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​ 接收多个"键=值"形式的参数

    结合起来看一个完整例子:

    python 复制代码
    func(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 到 5
    • x * x 是"要放进新列表的内容"
      最终生成所有平方值列表 [1, 4, 9, 16, 25]
  • 列表生成式可以附加条件过滤,让你"只保留满足条件的元素"。

    示例:

    python 复制代码
    positives = [x for x in nums if x > 0]

    作用:从 nums 中筛选出所有正数生成新列表。

  • 生成式中的"表达式"不一定是简单计算,也可以是字符串操作、函数调用甚至三元表达式。

    例如:

    python 复制代码
    lengths = [len(word) for word in words]

    生成所有单词的长度列表。

  • 与普通 for 对比:

    普通写法:

    python 复制代码
    res = []
    for x in nums:
        if x % 2 == 0:
            res.append(x * 2)

    列表生成式:

    python 复制代码
    res = [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

  • 第一次调用:

    python 复制代码
    print(next(g))

    流程:

    1. 进入 gen() 函数
    2. 进入 for i in range(3)
    3. i == 0
    4. 遇到 yield i,返回 0,但并没有结束函数
    5. 暂停在 yield 这一行

    所以第一次输出:

    复制代码
    0

    第二次调用:

    python 复制代码
    print(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


相关推荐
cs麦子1 小时前
C语言--函数(function)
c语言·开发语言
DP+GISer1 小时前
基于站点数据进行遥感机器学习参数反演-以XGBOOST反演LST为例(附带数据与代码)试读
人工智能·python·机器学习·遥感与机器学习
是苏浙2 小时前
零基础入门C语言之C语言实现数据结构之顺序表
c语言·开发语言·数据结构
代码雕刻家2 小时前
C语言中关于类型转换不匹配的解决方案
c语言·开发语言·算法
RedJACK~2 小时前
Go Ebiten小游戏开发:扫雷
开发语言·后端·golang
程序猿_极客2 小时前
【2025】16届蓝桥杯 Java 组全题详解(省赛真题 + 思路 + 代码)
java·开发语言·职场和发展·蓝桥杯
工业互联网专业3 小时前
基于协同过滤算法的小说推荐系统_django+spider
python·django·毕业设计·源码·课程设计·spider·协同过滤算法
星星的月亮叫太阳3 小时前
large-scale-DRL-exploration 代码阅读 总结
python·算法
玉树临风江流儿3 小时前
C++左值、右值、move移动函数
开发语言·c++