本文主要是介绍Python 函数详解:从基础语法到高级使用技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起...
函数是 python 编程的核心组成部分,它通过封装特定功能实现代码复用,让程序结构更清晰、逻辑更严谨。本文基于实例代码,全面讲解 Python 函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧。
一、函数的基本概念与作用
函数本质是封装特定功能的代码块,如同一个 "黑匣子"—— 输入参数后,通过内部逻辑处理,最终输出结果。其核心价值在于:
- 代码复用:避免重复编写相同逻辑
- 模块化:将复杂问题拆解为多个独立功能
- 可维护性:单一功能的修改不影响其他部分
""" 函数作用: 封装一个特定的功能,相当一个黑匣子 代码功能复用 语法: def 函数名(形参列表): 函数体 [return 返回值] 调用: res=函数名(实参列表) 没有返回值,不需要接收,如果接收,返回的是None return作用:返回结果,跳出函数 """
二、函数的定义与调用
1. 无参函数
没有参数的函数,直接执行预设逻辑:
# 无参函数 def test(): print(123456) # 调用 test() # 输出:123456
适用于逻辑固定、无需外部输入的场景(如打印固定信息)。
2. 带参函数
需要接收外部参数的函数,灵活性更高。以下是计算aa
到bb
累加和的示例:
# 带参函数:计算aNVFdba到bb的总和 def add(aa, bb): sum = 0 for i in range(aa, bb + 1): sum += i print(sum) # 调用函数 a = int(input('请输入a:')) # 从用户输入获取参数 b = int(input('请输入b:')) add(a, b) # 实参a、b传递给形参aa、bb
- 形参:函数定义时的
aa
、bb
(形式参数,仅在函数内部有效) - 实参:函数调用时的
a
、b
(实际参数,将值传递给形参)
3. 带返回值的函数
通过return
关键字返回处理结果,调用者可接收并进一步处理:
# 计算n的阶乘(n!) def jiecheng(n): cheng = 1 for i in range(1, n + 1): cheng *= i return cheng # 返回计算结果 # 调用并接收返回值 res1 = jiecheng(5) # 5! = 120 res2 = jiecheng(10) # 10! = 3628800 print(res1, res2) # 输出:120 3628800
return
的双重作用:返回结果 + 立即结束函数(其后代码不再执行)- 若函数无
return
,调用后返回None
4. 函数嵌套调用
函数内部可以调用其他函数,实现复杂逻辑的拆解:
# 计算1! + 2! + ... + m!的总和 def add_cheng(m): sum = 0 for i in range(1, m + 1): sum += jiecheng(i) # 嵌套调用阶乘函数 print(sum) # 调用 add_cheng(5) # 1!+2!+3!+4!+5! = 153 add_cheng(10) # 总和为4037913
通过嵌套调用,将 "求阶乘" 和 "求和" 两个功能分离,代码更易理解和维护。
三、参数传递机制:值传递与引用传递
Python 中参数传递的方式取决于数据类型,分为两种:
1. 值传递(基本数据类型)
对于int
、float
、str
等不可变类型,传递的是值的副本,函数内部修改不影响外部变量:
def test(n): n = n + 1 # 内部修改参数 print(n) # 输出:11 a = 10 test(a) print(a) # 输出:10(外部变量未变)
2. 引用传递(复杂数据类型)
对于listandroid
、dict
、set
等可变类型,传递的是内存地址,函数内部修改会影响外部变量:
def test2(lst): lst[1] = 66 # 内部修改列表元素 print(lst) # 输出:[1, 66, 3] ls = [1, 2, 3] test2(ls) print(ls[1]) # 输出:66(外部列表被修改)
总结:不可变类型传递值,可变类型传递地址,这是 Python 参数传递的核心特性。
四、变量作用域:全局变量与局部变量
变量的作用域指其可访问的范围,分为:
1. 局部变量
在函数内部定义的变量,仅在函数内部有效:
def test3(): a = 10 # 局部变量(仅test3内可访问) print(a) # 输出:10 test3() # print(a) # 报错:NameError(外部无法访问)
2. 全局变量
在函数外部定义的变量,可在所有函数中访问(但修改需声明):
b = 11 # 全局变量 m = 18 # 全局变量 def test3(): b = 20 # 定义同名局部变量(覆盖全局变量) global m # 声明使用全局变量m m += 10 # 修改全局变量 print(a, b, m) # 输出:10 20 28(a是局部变量,b是局部变量,m是全局变量) test3() print(b, m) # 输出:11 28(全局b未变,全局m已修改
- 函数内部可直接使用全局变量,但修改全局变量需用
global
声明 - 若局部变量与全局变量同名,函数内部优先使用局部变量
五、函数类型标注(Type Hints)
Python 3.5 + 支持类型标注,通过注释指定参数和返回值的类型,增强代码可读性和可维护性:
""" 函数类型标注: 基本类型: int float str bool bytes 复杂类型: from typing import List,Tuple,Dict,Set,Union,Iterable,Sequence,Any,Callable """ from typing import List, Union, Callable, Iterable, Sequence # 标注参数类型 def test(a: int, b: float, c: str, d: bool): print(a, b, c, d) test(1, 2.5, 'hello', True) # 符合类型标注的调用 # 复杂类型标注:List[Union[int, float]]表示列表元素可为int或floatpython def test2( a: List[Union[int, float]], # 元素为int或float的列表 tt: Callable, # 可调用对象(如函数) c: Union[int, str], # 可为int或str d: Iterable, # 可迭代对象(如列表、range) e: Sequence # 序列对象(http://www.chinasem.cn如列表、元组) ): tt() # 调用传入的函数 print(a, c, d, e) def active(): print('函数作为参数') test2([1, 2.5, 3], active, 2, [], range(10)) # 符合类型标注的调用 # 标注返回值类型 def test3(a: int, b: float) -> Union[int, float]: return a + b print(test3(1, 2.5)) # 输出:3.5(符合返回值类型)
注意:类型标注仅为提示,Python 解释器不会强制检查(需借助第三方工具如mypy
验证)。
六、总结
函数是 Python 编程的基础工具,本文讲解的核心知识点包括:
- 函数的定义与调用:无参、带参、带返回值函数的使用
- 函数嵌套:通过调用其他函数实现复杂逻辑
- 参数传递:不可变类型值传递,可变类型引用传递
- 变量作用域:局部变量与全局变量的访问规则
- 类型标注:增强代码可读性的现代编程技巧
到此这篇关于Python 函数详解:从基础语法到高级使用技巧的文章就介绍到这了,更多相关Python 函数内容请搜索China编程(www.cppcns.cphpom)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于Python 函数详解:从基础语法到高级使用技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!