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

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

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

python函数


Python 函数(Function) 是将一段具有独立功能的代码进行封装,通过函数名即可重复调用,提高代码可读性与复用性。Python 还提供切片、迭代、生成器等功能,使面向过程编程更灵活强大。

基本用法:

def 函数名(参数):函数体return 返回值

定义与调用函数
def add(a, b):        # 定义函数,a 和 b 是“参数”return a + b      # 返回结果res = add(3, 5)       # 调用函数
print(res)            # 输出 8

说明:

  • def​ 用于定义函数
  • 参数在定义时编写,调用时传入实际值(称为“实参”)
  • return​ 返回结果;若省略,函数默认返回 None

参数类型示例
def func(a, b=10, *args, **kwargs):print(a)          # 位置参数 必须传print(b)          # 默认参数print(args)       # 可变参数(元组) 元组就是一个“不能改的列表”print(kwargs)     # 关键字参数(字典)

说明:

  • b=10​ 为默认参数,可不传

  • *args​ 接收多个位置参数

  • **kwargs​ 接收多个“键=值”形式的参数

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

    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}
    

函数的嵌套调用
def func1(x):return x * 2def func2(y):return func1(y) + 3   # 内部调用另一个函数print(func2(5))           # 输出 13

说明:
函数内部可以调用其他函数,用于拆分复杂逻辑,让结构更清晰。


递归函数(函数自己调用自己)
def factorial(n):if n == 1:        # 递归终止条件return 1return n * factorial(n - 1)print(factorial(5))   # 输出 120

说明:

  • 递归必须有“终止条件”,否则会无限调用
  • 常用在数学问题、树结构处理等场景

Python 面向过程编程高级语法


切片(slice)
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 循环遍历)
例子一
for x in [1, 2, 3]:print(x)#输出:
#	1
#	2
#	3

说明:

  • Python 的 for 循环可以遍历序列(列表、字符串)、字典、集合等
  • 内部自动控制索引,无需自己写 i++
例子二
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 的单词

words = ["hi", "python", "sun", "a", "coffee", "dog"]for w in words:if len(w) > 3:          # 判断字符串长度是否大于 3print(w.upper())    # 转成大写并打印

输出结果:

PYTHON
COFFEE

列表生成式(List Comprehension)
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]
  • 列表生成式可以附加条件过滤,让你“只保留满足条件的元素”。
    示例:

    positives = [x for x in nums if x > 0]
    

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

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

    lengths = [len(word) for word in words]
    

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

  • 与普通 for 对比:
    普通写法:

    res = []
    for x in nums:if x % 2 == 0:res.append(x * 2)
    

    列表生成式:

    res = [x * 2 for x in nums if x % 2 == 0]
    

    功能完全一致,但更紧凑。

  • 列表生成式会返回一个全新的列表,不会修改原数据。
    因此适用于“基于旧列表,生成一个新列表”的场景。


生成器(Generator)
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

  • 第一次调用:

    print(next(g))
    

    流程:

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

    所以第一次输出:

    0
    

    第二次调用:

    print(next(g))
    

    这次不是从头开始,而是:

    • 接着上次暂停的地方继续执行
    • 所以继续 for 循环
  • 节省内存,适合处理大量数据()

    因为生成器:

    • 不一次性生成全部数据

    • 而是按需生成一个算一个

    • 用一个值算一个值,不要的值就不占内存

next 是 Python 的一个内置函数,作用非常简单:一句话解释next(x) 的意思是:从可迭代对象(iterator/迭代器)里取下一个值。在 Python 中,有些东西可以“一步一步”取值,比如:生成器(generator)迭代器(iterator)用 iter() 包装后的列表、元组等这些东西就像“能连续产出数据的机器”。而 next() 就是:让这个机器继续吐出下一个值。
用生成器举例
def gen():for i in range(3):yield ig = gen()   # g 是一个生成器

此时 g​ 还没有开始执行。

我们用 next(g)​ 让它吐出数据:

next(g)   # 取到第一个值 0
next(g)   # 取到第二个值 1
next(g)   # 取到第三个值 2

再调用一次:

next(g)   # 没有值了,会报 StopIteration

用 iter() 包装也能用 next()

iter(iterable) : 这个函数接收一个可迭代对象(如列表、元组、字典、字符串等)作为参数,并返回一个与该对象关联的迭代器。

lst = [10, 20, 30]
it = iter(lst)     # 把列表变成迭代器print(next(it))    # 10
print(next(it))    # 20
print(next(it))    # 30

迭代器(Iterator)
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


http://www.dtcms.com/a/582013.html

相关文章:

  • python+django/flask的莱元元电商数据分析系统_电商销量预测
  • Git分支创建与推送全攻略
  • python+django/flask基于Echarts+Python的图书零售监测系统设计与实现(带大屏)
  • 获取网站访问qq承德网站建设制作
  • 运用阿里云怎么做网站网站建设内容介绍
  • Redis_7_hash
  • 建站行业有前途个人主页网页设计案例
  • 数据分析报表如何选?详解 DataEase 四大表格:明细表、汇总表、透视表与热力图的适用场景与选择策略
  • 建立电商网站克拉玛依燃气公司主页
  • 关于从嘉立创导入元器件的原理图和封装到 Cadence 保姆级教程
  • 成都网站建设及推广谷歌浏览器引擎入口
  • 详解:长连接/短连接/Cookie/Session/WebSocket
  • 如何选择两种缓存更新策略(写缓存+异步写库;写数据库+异步更新缓存)
  • pcl::ProjectInliers功能介绍,分别对平面、直线、圆、圆柱提供详细范例及可视化展示
  • ftp网站建立wordpress数据导出
  • 赣州瑞金网站建设网站推广公司成功的经典案例
  • 11.7 LeetCode 题目汇总与解题思路
  • Golang 开发Prometheus 自定义 Exporter
  • 找效果图的网站哪个好ps做网站框架搭建
  • 做平面设计的网站有哪些深圳市福田区公司
  • 2026年新疆职业院校技能大赛GZ073网络系统管理赛项模块A:网络构建真题
  • JavaScript基础入门
  • 软考中级软件设计师(上午题)/ 上
  • 京东淘宝网站是怎么做的历史街区和历史建筑信息平台
  • 泉州市住房和乡村建设网站网页设计个人
  • 【Linux】网络层与数据链路层中重点介绍
  • 一站式营销型网站建设服务泉州市华泰建设工程有限公司网站
  • 异地共享音乐、观影、手机、电脑文件方案(待续)
  • 口碑好的建筑设备监控管理系统厂家
  • Rust 练习册 :Luhn与校验算法