实用指南:Python函数:从定义到调用的实用指南

news/2026/1/24 19:26:54/文章来源:https://www.cnblogs.com/ljbguanli/p/19527359

实用指南:Python函数:从定义到调用的实用指南

在编程时,你会不会遇到这样的问题:一段代码需要反复使用,每次都复制粘贴不仅麻烦,改起来还要一个个改,稍不注意就出错?这时候,“函数”就能帮你解决——它就像一个“代码工具包”,把常用的代码打包起来,想用的时候喊一声它的名字就能执行,既省心又高效。今天我们就用最直白的方式,把Python函数的定义、调用和使用技巧讲透。

一、先搞懂:函数到底是什么?

一个“函数”——它有固定的功能(榨汁),需要输入“原料”(水果),最后输出“结果”(果汁)。就是先举个生活中的例子:你家里有一台榨汁机,每次想喝果汁,不用重新造一台机器,只要把水果放进去、按下开关,就能得到果汁。这里的“榨汁机”就

编程里的函数和榨汁机完全是一个逻辑:把一段实现特定功能的代码块封装起来,起一个名字(函数名)。以后得用这个功能时,直接调用这个名字就行,不用再写一遍代码。比如计算两个数的和,不管是计算1+2还是100+200,都能靠同一个“求和函数”完成。

容易说,函数的核心价值就是“封装复用、简化代码、便于维护”——写一次用多次,改一次全生效。

二、函数的基础:怎么定义一个函数?

定义函数就像“制作榨汁机”,要规定它的名字、需要的原料(参数)和具体的工作流程(代码逻辑)。Python里定义函数的语法非常固定,记住这个“模板”就行:

python
def 函数名(参数1, 参数2, ...):
"""函数说明文档(可选,用于解释函数功能)"""
函数体代码(实现作用的具体代码,注意缩进)
return 返回值(可选,用于把结果交给调用者)

我们逐个拆解这些部分,保证你一看就懂:

  • def:这是Python的“函数定义关键字”,必须放在最前面,告诉Python“接下来要定义一个函数了”,就像榨汁机的“出厂标识”。
  • 函数名:给函数起的名字,方便调用时“喊它”。命名规则和变量一样:只能用字母、数字、下划线,不能以数字开头,最好见名知意(比如求和函数叫add,榨汁函数叫juice)。
  • 参数函数应该的“原料”。比如求和函数需要两个数字,括号里就写两个参数;如果不需要原料,括号里能够空着。就是:放在括号里,
  • 函数说明文档:用三个双引号括起来的文字,说明函数的功能、参数含义、返回值是什么——虽然可选,但强烈推荐写,不然过几天自己都忘了这个函数是干嘛的。
  • 函数体函数里的代码。就是:函数的核心,是实现具体功能的代码。这里必须缩进(通常4个空格),不然Python会分不清哪部分
  • return返回值:函数执行完后,把结果“交出去”的关键字。如果没有return,函数执行完后会默认返回None(可以理解为“没有结果”)。

1. 入门实例:定义一个简单的求和函数

大家来定义一个计算两个数之和的函数,把上面的模板用起来:

python
def add_numbers(num1, num2):
"""计算两个数字的和并返回结果
参数:
num1: 第一个数字
num2: 第二个数字
返回值:
两个数字的和
"""
total = num1 + num2 # 函数体:计算和
return total # 返回结果

这样,一个求和函数就定义好了。注意:定义函数只是“制作了榨汁机”,它不会自己运行——要让它工作,还需要“调用”它。

2. 无参数、无返回值的函数

不是所有函数都需要参数和返回值。比如一个单纯打印“欢迎信息”的函数,既不需要原料,也不用返回结果:

python
def show_welcome():
"""打印欢迎信息,无参数无返回值"""
print("欢迎学习Python函数!")
# 没有return,默认返回None

三、函数的核心:怎么调用函数?

调用函数就是“使用榨汁机”——喊出函数名,给它喂上原料(参数),就能得到结果(返回值)。调用的语法比定义容易多了:

python
返回值变量 = 函数名(参数1, 参数2, ...)

如果函数有返回值,许可用变量接住;如果没有,直接写“函数名(参数)”就行。

1. 调用前面定义的函数

大家把刚才定义的add_numbers和show_welcome调用起来,看看效果:

python
# 1. 调用无参数函数
show_welcome() # 直接写函数名+空括号

# 2. 调用有参数函数,并用变量接住返回值
result1 = add_numbers(3, 5) # 给num1传3,num2传5
result2 = add_numbers(10.5, 20.3) # 也支持浮点数

# 打印结果
print("3+5的结果是:", result1)
print("10.5+20.3的结果是:", result2)

运行结果:

Plain Text
欢迎学习Python函数!
3+5的结果是: 8
: 30.8就是10.5+20.3的结果

很直观?调用函数时,参数的数量和类型要和函数定义时匹配——比如add_numbers需要两个数字,你不能只传一个,也不能传字符串(比如add_numbers("3",5)会报错)。就是是不

2. 两种参数传递方式:位置参数和关键字参数

给函数传参数有两种常见方式,根据场景选着用,能让代码更清晰。

  • 位置参数:最常用的方式,参数的顺序和函数定义时一致。比如add_numbers(3,5),3对应num1,5对应num2,靠“位置”来匹配。

python
# 位置参数:按定义顺序传参
result = add_numbers(2, 4) # 2→num1,4→num2,结果6

  • 关键字参数:明确写出“参数名=值”,不用管顺序,适合参数比较多的场景。比如add_numbers(num2=5, num1=3),虽然顺序反了,但Python能依据参数名匹配。

python
# 关键字参数:明确参数名,顺序可换
result = add_numbers(num2=5, num1=3) # 结果还是8
print(result)

两种方式还能混合用,但要注意:位置参数必须在关键字参数前面。比如add_numbers(3, num2=5)是对的,但add_numbers(num1=3, 5)会报错。

3. 函数调用的“嵌套”

函数调用还能嵌套——一个函数的返回值允许直接作为另一个函数的参数。比如计算3+5的和,再乘以2:

python
# 先调用add_numbers(3,5)得到8,再把8传给乘2的运算
final_result = add_numbers(3,5) * 2
print(final_result) # 结果16

# 更简洁的嵌套写法
final_result = add_numbers(3,5) * 2 # 和上面效果一样

甚至可以把函数调用放在另一个函数的参数里,比如:

python
# 计算(2+3)+(4+5),嵌套调用add_numbers
total = add_numbers(add_numbers(2,3), add_numbers(4,5))
print(total) # 结果14

四、函数的进阶:灵活的参数设置

前面讲的参数都是“必须传的”,但实际开发中,我们可能需“可选参数”——比如买奶茶时,“糖度”默认是全糖,想换甜度再自己选。Python的函数参数支持这种灵活设置,主要有“默认参数”和“不定长参数”两种。

1. 默认参数:给参数设个“默认值”

定义函数时,可以给参数加一个“默认值”,调用时如果不传这个参数,就用默认值;如果传了,就用新值。语法是“参数名=默认值”。

实例:定义一个“买奶茶”的函数,糖度默认全糖,温度默认常温:

python
def buy_milk_tea(flavor, sugar="全糖", temperature="常温"):
"""买奶茶函数
参数:
flavor: 奶茶口味(必须传,无默认值)
sugar: 糖度(可选,默认全糖)
temperature: 温度(可选,默认常温)
"""
print(f"您点的奶茶:{flavor},{sugar},{temperature}")

调用这个函数时,有多种方式:

python
# 1. 只传必须参数(口味),用默认糖度和温度
buy_milk_tea("珍珠奶茶") # 输出:您点的奶茶:珍珠奶茶,全糖,常温

# 2. 传口味和糖度,温度用默认
buy_milk_tea("草莓奶绿", "七分糖") # 输出:您点的奶茶:草莓奶绿,七分糖,常温

# 3. 传所有参数,覆盖默认值
buy_milk_tea("杨枝甘露", "三分糖", "冰饮") # 输出:您点的奶茶:杨枝甘露,三分糖,冰饮

# 4. 用关键字参数,跳过中间的默认参数(比如只改温度)
buy_milk_tea("芋圆波波", temperature="热饮") # 输出:您点的奶茶:芋圆波波,全糖,热饮

设置默认参数有个重要规则:有默认值的参数必须放在无默认值参数的后面。比如def buy_milk_tea(sugar="全糖", flavor)是错的,Python会直接报错。

2. 不定长参数:参数数量不确定怎么办?

10个。这时候就需要“不定长参数”,用“*”和“**”来实现。就是有时候我们不知道要传多少个参数,比如计算“任意多个数字的和”——可能是2个,也可能

(1)*args:接收任意多个位置参数,存成元组

通过在参数名前加“*”,该参数就会接收所有传来的位置参数,存成一个元组(可以理解为“不可修改的列表”)。参数名通常叫args,也能够叫别的,但args是约定俗成的。

实例:定义一个“计算任意多个数字和”的函数:

python
def add_any(*args):
"""计算任意多个数字的和"""
total = 0
# 遍历args元组,把每个元素加起来
for num in args:
total += num
return total

调用时可能传任意多个参数:

python
print(add_any(1,2)) # 传2个参数,结果3
print(add_any(3,4,5,6)) # 传4个参数,结果18
print(add_any(10,20,30,40,50)) # 传5个参数,结果150
print(add_any()) # 不传参数也可以,结果0

(2)**kwargs:接收任意多个关键字参数,存成字典

在参数名前加“**”,这个参数会接收所有传来的关键字参数,存成一个字典(键是参数名,值是参数值)。参数名通常叫kwargs,是“keyword arguments”的缩写。

实例:定义一个“打印用户信息”的函数,用户可能提供姓名、年龄、性别等任意信息:

python
def show_user_info(**kwargs):
"""打印用户的任意信息"""
print("用户信息:")
# 遍历kwargs字典,打印键值对
for key, value in kwargs.items():
print(f"{key}:{value}")

调用时传任意多个关键字参数:

python
# 传2个关键字参数
show_user_info(name="张三", age=20)
# 传3个关键字参数
show_user_info(name="李四", gender="女", city="北京")

运行结果:

Plain Text
用户信息:
name:张三
age:20
用户信息:
name:李四
gender:女
city:北京

五、函数的“边界”:局部变量和全局变量

在函数里定义的变量,和在函数外定义的变量,作用范围是不一样的——这就像“办公室的物品”和“家里的物品”,适用范围不同。这就是“局部变量”和“全局变量”的区别。

1. 局部变量:函数内部的“私有变量”

在函数体内部定义的变量,只能在函数内部使用,函数外部无法访问——这就是局部变量。

python
def test_local():
# 局部变量:只能在test_local内部用
local_var = "我是局部变量"
通过print(local_var) # 函数内部能够访问,正常打印

# 调用函数
test_local()

# 函数外部尝试访问局部变量,会报错
print(local_var) # NameError: name 'local_var' is not defined

2. 全局变量:函数内外都能访问的变量

在函数外部定义的变量,默认是全局变量,函数内部可以访问(但要修改的话需要加关键字global)。

python
# 全局变量:函数内外都能访问
global_var = "我是全局变量"

def test_global():
# 函数内部访问全局变量,正常
print("函数内部访问全局变量:", global_var)

# 如果要修改全局变量,必须加global声明
global global_var
global_var = "全局变量被修改了"

# 调用函数
test_global()

# 函数外部访问修改后的全局变量
print("函数外部访问全局变量:", global_var)

运行结果:

Plain Text
函数内部访问全局变量: 我是全局变量
函数外部访问全局变量: 全局变量被修改了

建议:尽量少在函数内部修改全局变量,因为全局变量作用范围广,修改后容易影响其他地方的代码,不好排查问题。如果需要函数修改外部值,最好用return返回结果,在外部再赋值。

六、函数的“组合”:函数嵌套和递归(入门)

函数不是孤立的,它们行互相组合——一个函数里可以调用另一个函数,甚至自己调用自己。

1. 函数嵌套:函数内部调用另一个函数

比如大家定义一个“计算数字平方”的函数,再定义一个“计算两个数字平方和”的函数,后者可以调用前者:

python
# 定义计算平方的函数
def square(num):
return num * num

# 定义计算平方和的函数,嵌套调用square
def square_sum(num1, num2):
# 调用square函数计算每个数的平方,再求和
sum_sq = square(num1) + square(num2)
return sum_sq

# 调用函数
result = square_sum(3,4)
print("3的平方+4的平方=", result) # 结果25

2. 递归入门:函数自己调用自己

递归是一种特殊的嵌套——函数自己调用自己,但必须满足两个条件:有终止条件(不然会无限循环)和每次调用都让问题范围缩小。最经典的例子就是计算“阶乘”(n! = n × (n-1) × ... × 1,0! = 1)。

python
def factorial(n):
"""用递归计算n的阶乘"""
# 终止条件:n=0或1时,阶乘是1
if n == 0 or n == 1:
return 1
# 递归调用:n! = n × (n-1)!
return n * factorial(n-1)

# 测试
print(factorial(5)) # 5×4×3×2×1=120
print(factorial(3)) # 6

递归虽然简洁,但如果递归层数太多(比如n=1000),会导致程序出错,所以一般用在逻辑清晰且层数不深的场景。

七、常见错误避坑指南

  • 参数不匹配:调用函数时,参数的数量或类型和定义时不一致。比如add_numbers只需要2个参数,你传3个就会报错。
  • 缩进错误:函数体代码没有缩进,或者缩进不一致。Python对缩进很严格,这是新手最常犯的错误之一。
  • 局部变量和全局变量混淆:在函数内部修改全局变量时忘记加global,导致程序按局部变量处理,出现意外结果。
  • 递归没有终止条件:写递归函数时没设终止条件,导致函数无限调用,最终程序崩溃。
  • 函数名重复:定义了两个同名的函数,后面的会覆盖前面的,导致前面的函数无法启用。

八、总结:函数的核心逻辑

“把代码打包成工具”的过程,核心记住三点:就是Python函数其实就

  1. 定义:用def关键字,规定函数名、参数和功能,就像“造工具”;
  1. 调用:喊函数名+传参数,让函数执行,就像“用工具”;
  1. 灵活参数:默认参数、不定长参数让函数适应更多场景,就像“工具的多功能配件”。

学习函数的最好方法就是多练:试着定义一个“判断质数的函数”,再写一个“计算列表平均值的函数”,练完这些,你对函数的理解就会相当扎实。记住,编程的核心是“解决问题”,函数就是帮你高效解决问题的利器。

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

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

相关文章

2026评价高的聚合氯化铝公司推荐榜

2026评价高的聚合氯化铝公司推荐榜一、行业背景与筛选依据据《2026-2030中国水处理药剂行业发展白皮书》数据显示,2026年国内水处理药剂市场规模突破380亿元,年复合增长率达8.2%,其中聚合氯化铝作为核心絮凝剂,市场…

2026可靠聚氨酯胶轮优质品牌推荐:包胶滚轮/天然包胶轮/硅胶轮/聚氨酯包胶轮/聚氨酯滚轮/聚氨酯胶轮/聚氨酯脚轮/选择指南

2026可靠聚氨酯胶轮优质品牌推荐引言:工业包胶轮行业发展现状与筛选逻辑据《2026-2030年工业包胶轮行业发展白皮书》数据显示,2026年国内工业包胶轮市场规模突破120亿元,年复合增长率达8.7%,其中聚氨酯包胶轮因兼具…

Python 潮流周刊#137:Pandas 3.0 发布了

本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。 温馨提…

寒武纪|摩尔线程

ai.分析的🤔 结论: 短期看寒武纪更稳(盈利、AI专用芯片落地成熟); 长期看摩尔线程想象空间更大(全功能GPU稀缺、场景更广),但风险也更高。 一、核心差异 - 寒武纪:AI…

救命神器2026 TOP8 AI论文写作软件测评:自考毕业论文高效攻略

救命神器2026 TOP8 AI论文写作软件测评:自考毕业论文高效攻略 2026年自考论文写作工具测评:高效完成毕业论文的关键 随着人工智能技术的不断进步,AI论文写作工具已成为学术研究和毕业论文撰写的重要辅助手段。对于自考学生而言,如…

CUDA三种流捕获模式的异同

CUDA 流捕获 API cudaStreamBeginCapture()支持三种不同的流捕获模式,分别是: cudaStreamCaptureModeGlobal (默认)cudaStreamCaptureModeThreadLocalcudaStreamCaptureModeRelaxed 它们的异同点是:cudaStreamCaptureM…

完整教程:Python 所需软件配置

完整教程:Python 所需软件配置2026-01-24 19:19 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

2026年聚氨酯滚轮公司权威推荐:聚氨酯胶轮、聚氨酯脚轮、聚氨酯轮子、铁芯橡胶轮、铝包胶轮、高弹性铁芯胶轮、包胶滚轮选择指南

2026专业聚氨酯滚轮优质厂家推荐一、行业背景与筛选依据引用《2026-2030中国工业包胶轮行业发展白皮书》数据显示,2026年中国工业包胶轮市场规模达127亿元,年复合增长率8.2%,其中聚氨酯包胶轮占比42%,成为矿山机械…

命令行文本编辑器(Command-Line Tools)

2. 命令行文本编辑器 nano 是什么? nano 是一个命令行文本编辑器它比 vim 或 emacs 更简单,适合初学者你可以在终端里直接用它来编辑文件(比如 .zshrc)从 macOS 10.0(2001年)开始,nano 就一直是…

Shell常用内置命令与外部命令

这里写目录标题 Shell 内置命令 vs 外部命令内置命令1. cd —— **切换当前工作目录**常用例子: 2. export —— **设置环境变量(供子进程继承)**常用例子: 3. source —— **在当前 shell 中执行脚本(不新开进程&…

如何防止 IPA 被反编译,从攻防视角构建一套真正实用的 iOS 成品保护体系

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

寒假spark学习2 - 2305

寒假spark学习2今天通过学习在hadoop数据库中使用spark操作文件 “Spark 读取文件系统的数据 (1)在 spark-shell 中读取 Linux 系统本地文件“/home/hadoop/test.txt”,然后统计出文 件的行数; (2)在 spark-shel…

费雪的创新型公司识别方法

费雪的创新型公司识别方法 关键词:费雪、创新型公司、识别方法、投资分析、公司评估 摘要:本文深入探讨了费雪的创新型公司识别方法。首先介绍了该方法的背景,包括其目的、预期读者和文档结构等内容。接着阐述了核心概念,展示了概念原理和架构的文本示意图与 Mermaid 流程图…

埃塞俄比亚启动建设非洲最大机场

新华社亚的斯亚贝巴1月11日电(记者刘方强)埃塞俄比亚总理阿比日前宣布启动比绍夫图国际机场的建设,该机场建成后将成为非洲最大航空枢纽。 阿比10日在机场动工仪式上表示,这个大型机场项目是埃塞发展战略的一部分,旨在…

2025年我国进口规模创新高 将连续17年成为全球第二大进口市场

中新网1月14日电 国新办14日举行新闻发布会,介绍2025年全年进出口情况。会上,海关总署副署长王军介绍,2025年我国进口达到18.48万亿元,规模创历史新高,将连续17年成为全球第二大进口市场。 王军表示,去年部…

这是一次必要的警示:AI 不是智能,也不会保护你

本文不讨论商业前景、不讨论模型迭代速度, 只讨论一个问题:我们正在把什么东西,错误地当成“可以信任的智能”。 一、先说结论:Transformer 决定了 AI 永远不是“智能体” 当前所有主流大模型,核心仍是 Transformer 架…

AI的“语言的流利度”不能等同于“思想的深度”

以下是为什么说我们可能“误会”了 AI 的三个核心真相:1. 它是“概率机器”,不是“逻辑器官”人类的智能是**“自顶向下”的:我们先有目标、有逻辑、有对世界的物理感知,最后才用语言表达出来。 而 AI(Transformer&…

深入解析:香港服务器CPU中E5和Gold的区别

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Windows 建立的git仓库如何给脚本增加默认的可执行权限

场景 如果我在 Windows 系统下建立一个git仓库,上传了一个 Linux 系统下使用的脚本 默认情况下,这个脚本没有Unix可执行权限标识位 所以当我在Linux系统中克隆下来时,还得执行 chmod +x myscript.sh 如何在Windows…

购买服务器,操作系统选Debian、Ubuntu 还是Rocky Linux? - 实践

购买服务器,操作系统选Debian、Ubuntu 还是Rocky Linux? - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…