研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南

news/2025/10/20 21:34:57/文章来源:https://www.cnblogs.com/slgkaifa/p/19153713

研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南

⭐持续记录,保持初心,python的学习笔记将会在这里持续更新,新手小白跟着黑马程序员up主上路,欢迎各位佬批评指正。大家一起进步!创作不易,您的点赞是我最大的动力!

目录

一、Python函数的基本概念

二、Python函数的语法

(一)函数的定义语法

(二)函数调用

(三)函数的参数类型

形参和实参

(四)函数的返回值

(五)函数说明文档

(六)函数嵌套调用

函数嵌套调用的概念

基本语法

嵌套调用的执行流程

实际应用示例

(七)变量在参数中的作用域

变量作用域的基本概念

全局作用域

局部作用域

参数的作用域

修改全局变量的方法

不使用 global 的情况

修改可变对象

注意事项

嵌套函数的作用域

作用域优先级规则


一、Python函数的基本概念

Python函数是一段已组织好、有特定功能,可重复调用的代码块,用于执行特定任务。通过定义函数,可以将复杂逻辑封装起来,提高代码的可读性和复用性,提升开发效率

二、Python函数的语法

(一)函数的定义语法

def 函数名(传入参数):

        函数体

        return 返回值

def function_name(parameters):"""函数文档字符串"""# 函数体return value

(二)函数调用

函数名(参数),先执行函数调用,再回到定义。

注意事项:

  1. 参数如不需要,可以省略
  2. 返回值如不需要,可以省略
  3. 函数必须先定义后使用

(三)函数的参数类型

形参和实参

传入参数不限量,形参和实参一一对应:

(四)函数的返回值

  1. 函数可以通过return语句返回一个或多个值。
  2. 不写return语句时,函数默认返回None字面量。
  3. return后边的代码不执行。

(五)函数说明文档

函数说明文档是代码可读性和可维护性的关键部分,注释,中间回车,可以得到需要填补的说明文档,鼠标悬停可以查看实参的说明。

(六)函数嵌套调用

函数嵌套调用的概念

函数嵌套调用指的是在一个函数内部调用另一个函数。这种调用方式可以将复杂的问题分解为多个小问题,通过调用不同的函数逐步解决。嵌套调用有助于提高代码的可读性和模块化程度。

基本语法

在大多数编程语言中,函数嵌套调用的语法类似。以下是一个伪代码示例:

def outer_function():# 执行一些操作inner_function()  # 嵌套调用# 执行其他操作
def inner_function():# 执行内部函数的操作
outer_function()  # 调用外层函数

以下是一个嵌套语句的基本形式:

嵌套调用的执行流程

  1. 当外层函数(如 outer_function)被调用时,程序会进入该函数的代码块。
  2. 在执行过程中遇到内层函数(如 inner_function)时,程序会暂停外层函数的执行,转而执行内层函数。
  3. 内层函数执行完毕后,程序会回到外层函数继续执行剩余代码。

实际应用示例

以下是一个计算阶乘的嵌套调用示例:

def factorial(n):if n == 0:return 1else:return n * factorial(n - 1)  # 递归嵌套调用
result = factorial(5)  # 计算5的阶乘
print(result)  # 输出120

(七)变量在参数中的作用域

变量作用域的基本概念

变量的作用域指变量在程序中可被访问的范围。根据声明位置不同,变量的作用域分为全局作用域和局部作用域。全局变量在函数外部声明,整个程序均可访问;局部变量在函数内部声明,仅限该函数内部使用。

全局作用域

全局变量在函数外部定义,生命周期从程序开始到结束。所有函数均可读取或修改全局变量,但过度使用可能导致代码难以维护。

global_var = 10  # 全局变量
def func():print(global_var)  # 可访问
func()

局部作用域

局部变量在函数内部定义,仅在该函数内有效。函数执行结束后,局部变量会被销毁。不同函数的局部变量互不影响。

def func():local_var = 20  # 局部变量print(local_var)
func()
# print(local_var)  # 报错:未定义

参数的作用域

函数参数属于局部变量,仅在函数内部有效。参数的作用域与局部变量相同,但初始值由调用时传入。

def add(a, b):  # a和b为局部参数return a + b
result = add(3, 5)
# print(a)  # 报错:a未定义

修改全局变量的方法

在函数内部修改全局变量需要使用global 关键字显式声明。否则,函数内部对变量的修改会被视为局部变量,而不会影响全局作用域中的同名变量

x = 10  # 全局变量
def modify_global():global x  # 声明使用全局变量xx = 20    # 修改全局变量
modify_global()
print(x)  # 输出 20

不使用 global 的情况

如果未使用 global 关键字,函数内部对变量的赋值会创建一个新的局部变量,而不会修改全局变量。

x = 10  # 全局变量
def no_global():x = 30  # 创建局部变量x,不影响全局变量
no_global()
print(x)  # 输出 10(全局变量未改变)

例如:

运行结果:

修改可变对象

对于可变对象(如列表、字典),即使不使用 global 关键字,也可以通过方法(如 appendupdate)直接修改全局变量。

my_list = [1, 2, 3]  # 全局列表
def modify_list():my_list.append(4)  # 直接修改全局列表
modify_list()
print(my_list)  # 输出 [1, 2, 3, 4]

注意事项

  • 过度使用全局变量可能导致代码难以维护和调试。
  • 在大型项目中,建议通过函数参数传递数据,而非依赖全局变量。
  • 如果必须使用全局变量,确保其命名清晰且仅在必要时修改。

嵌套函数的作用域

嵌套函数中,内部函数可访问外部函数的变量(非全局)。这种变量称为闭包变量,作用域介于全局和局部之间。

def outer():outer_var = 30  # 闭包变量def inner():print(outer_var)  # 可访问inner()
outer()

作用域优先级规则

当变量名冲突时,访问优先级为:局部作用域 > 闭包作用域 > 全局作用域。使用globalnonlocal可显式指定作用域。

x = 100  # 全局变量
def test():x = 200  # 局部变量print(x)  # 输出200
test()
print(x)  # 输出100

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小马算力致敬程序员

10 月 20日凌晨,我把最后一条 CI 流水线从自建 GPU 机器迁移到小马算力,推送、合并、触发——单元测试跑完,账单弹出:0.82。 同一时刻,公司群里弹出财务提醒:上月闲置显卡折旧 4 300。那一刻,我意识到“算力”这…

Project. 2025.11化学小组pre

\(\boldsymbol{Project.}\) 2025.11 化学小组pre \(\rm I\) 选题阶段 \(\it 1.1\) 超导 【文献堆】介绍超导(泛) 常压下双层结构镍氧化物薄膜高温超导电性的发现与研究展望 高压下金属硼碳(氮)化合物的结构及超导电…

蛋白表达标签:重组蛋白研究的精妙引擎

在重组蛋白的世界里,效率与精准是核心追求。如何从复杂的细胞裂解液中快速捕获目标蛋白?如何直观地追踪其表达与定位?又如何让那些难以折叠的蛋白稳定溶解?这些问题的答案,常常不在于蛋白本身,而在于一个精妙的分…

106.腾讯地图位置服务再出错

106.腾讯地图位置服务再出错我再实现项目的一个客户端登录时候 出现问题为了实现此功能之前关于地图调用的总结https://www.cnblogs.com/gaodiyuanjin/p/19135390 以为换了就好了 但项目已经使用这个 顺便插一下 项目中…

Luogu P10034 「Cfz Round 3」Circle 题解 [ 蓝 ] [ 背包 DP ] [ 质数筛 ] [ 图论 ] [ 构造 ]

Circle:思维难度并没有很大,难点主要还是细节的特判上。 先转化题意:构造一张无自环的有向图,使得每个点的出度、入度均为 \(1\),并且部分点走 \(l\) 步后必须回到自己。 因为每个点的出度、入度均为 \(1\),所以…

2025.10.20模拟赛

赛时 T1是原...10分钟过了 然后先看了眼3个题,T2感觉可推,T3感觉更简单 想开T3,然后想到还是按顺序开吧,所以开的T2 先推了一会重复的性质,发现什么也没有 此时1h过去了 然后想到前缀和的性质,然后没怎么证明,然…

20232410 2025-2026-1 《网络与系统攻防技术》实验二实验报告

20232410 2025-2026-1 《网络与系统攻防技术》实验二实验报告 一、实验内容回答问题: (1)例举你能想到的一个后门进入到你系统中的可能方式? 比如某些钓鱼邮件或者钓鱼网站,携带着一些捆绑着后门程序的exe文件。若…

SQLite简单使用

SQLite的简单使用记录创建数据库创建完成简单使用先进行一个链接一个表 一个视图创建表 输入表明创建列后面的就跟MySQL大差不差了创建完之后点击OK点击这个可以查看SQL语句

Adaptive Learning Rate(自适应学习率) - -一叶知秋

Adaptive Learning Rate(自适应学习率) Adaptive Learning Rate(自适应学习率) 是指在模型训练过程中,学习率会根据参数更新的反馈自动调整,而不是使用一个固定值。其核心思想是: 👉 不同参数或不同训练阶段,…

新学期每日总结(第12天)

今日 相较昨日 学习了继承与多态

17 线程的创建

17 线程的创建进程 进程:一个程序的运行过程 线程:组成这个程序的并行的模块 一个进程可以包含多个线程。 线程的创建继承Thread类 实现Runnable接口 实现Callable接口1.继承Thread类 继承Thread类,重写run()方法,…

2025.10.20总结 - A

今天满课,感觉挺充实的,加油。

一般公共预算收入 + 全国政府性基金收入

一、税收增速意外创出新高 9月,一般公共预算收入(+2.6%),温和回升0.6个百分点,其中税收(+8.7%)显著回升5.3个百分点,增速创2023年7月以来新高;非税(-11.4%)受去年同期大幅征收、基数走高的影响跌幅扩大。支…

从C10K到Reactor:事件驱动,如何重塑高并发服务器的网络架构

从C10K到Reactor:事件驱动,如何重塑高并发服务器的网络架构事件驱动 事件驱动(Event Driven)是一种核心的编程范式,其根本特征是控制反转(Inversion of Control,IoC)。在这种模型中,程序的执行流不再由代码的…

类欧几里德算法

引入 Floor Sum 令 \(f(a,b,c,n)=\displaystyle \sum_{i=0}^{n}\lfloor\dfrac{a\times i+b}{c}\rfloor\)。我们要求的就是这个东西。 考虑如果 \(a,b\) 中有一个比 \(c\) 大。那么有: \[f(a,b,c,n)=\sum_{i=0}^{n}\lf…

AI助力可再生能源系统优化研究

本文介绍了研究者如何利用人工智能技术解决能源供应挑战,重点探讨了大语言模型在数值数据分析、风能评估和齿轮箱功率损失预测中的应用,以及将AI扩展到太阳能和水电等可再生能源领域的未来计划。使用AI应对能源供应挑…

结对项目:小学四则运算题目生成器

结对项目:小学四则运算题目生成器这个项目属于哪个课程 课程链接作业要求 作业链接作业的目标 结对编程实现一个自动生成小学四则运算题目的命令行程序学号姓名 3223004816王韵清,3223004820曾钰仪Github链接 Github…

数据范围

废话不多讲,直接给图:(注意:不同版本的c++程序,数据范围可能有所改动!!!)

CF2107E Ain and Apple Tree

拆贡献拆到每个点就是 \(C_{siz}^2\)。 根据世界沉睡童话的结论,我们很大概率能用这种不同的 \(siz\) 组合出很多数,打个表发现都能组合出来,然后依次挂在一条链上就做完了(因为叶子没有贡献)。