函数的作用
函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。Python 提供了许多内建函数,比如 。你也可以自己创建函数,这被称为用户自定义函数。
本文详细讲解了 Python 中函数的基本概念、定义方法、调用方式及参数类型。内容包括必备参数、关键字参数、默认参数及不定长参数(*args, **kwargs)的使用场景与注意事项。同时阐述了函数的返回值机制、变量作用域(全局与局部)的区别及 global 关键字的应用,并补充了函数嵌套、命名规范及最佳实践。旨在帮助初学者系统理解函数在模块化编程中的核心作用。

函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。Python 提供了许多内建函数,比如 。你也可以自己创建函数,这被称为用户自定义函数。
print()使用函数的好处包括:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
: 起始,并且缩进。return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的 return 相当于返回 None。def 函数名 (参数):
"""函数文档字符串"""
# 代码块
result = 计算结果
return result
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
函数必须调用才会执行。
不同的需求,参数可有可无。在 Python 中,函数必须先定义后使用。
# 定义函数
def demo():
print("我是 demo 函数")
# 调用函数
demo()
Python 支持多种类型的参数,使得函数调用更加灵活。
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。如果数量不匹配,会出现语法错误或类型错误。
示例:完成两个数 1 和 2 的加法运算
# 定义函数
def add_numbers(a, b):
result = a + b
print(result)
# 调用函数时传入了真实的数据 10 和 20
add_numbers(10, 20)
上述 add_numbers 函数可以计算任何用户指定的两个数字的和,比硬编码数字更灵活。
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。这允许你忽略参数的顺序,只要参数名正确即可。
def describe_person(name, age):
print(f"我是{name},今年{age}岁")
name = "张三"
age = 18
# 按位置传递
describe_person(name, age)
# 按关键字传递,顺序可颠倒
describe_person(age=18, name="张三")
调用函数时,默认参数的值如果没有传入,则被认为是默认值。下例会打印默认的 age,如果 age 没有被传入。
def greet(name="张三", age=18):
print(f"大家好,我是{name},今年{age}岁了")
greet() # 输出:大家好,我是张三,今年 18 岁了
greet(name="李四", age=19) # 输出:大家好,我是李四,今年 19 岁了
注意:默认参数应尽量避免使用可变对象(如列表、字典),否则可能导致意外的副作用。
# 错误的做法:默认参数为可变对象
def append_item(item, list_param=[]):
list_param.append(item)
return list_param
# 第一次调用
print(append_item(1)) # [1]
# 第二次调用,list_param 不会重置
print(append_item(2)) # [1, 2],而非预期 [2]
# 正确的做法:使用 None 作为默认值
def append_item_safe(item, list_param=None):
if list_param is None:
list_param = []
list_param.append(item)
return list_param
Python 自定义函数中有两种不定长参数:
*args:接收任意数量的位置参数,以元组(tuple)形式导入。**kwargs:接收任意数量的关键字参数,以字典(dict)形式导入。def demo(*args):
print(args)
demo(1, 2, 3, 4, 5)
# 输出:(1, 2, 3, 4, 5)
def demo_with_kwargs(num, *args, **kwargs):
print(f"num: {num}")
print(f"args: {args}")
print(f"kwargs: {kwargs}")
demo_with_kwargs(11, 22, 33, a=18, b=19, c=20)
# 输出:
# num: 11
# args: (22, 33)
# kwargs: {'a': 18, 'b': 19, 'c': 20}
return 语句 [表达式] 退出函数。一旦遇到 return,函数立即结束,不再执行后续代码。
def get_first_number():
for i in range(1, 10):
return i # 循环只会执行一次,直接返回 1
print(get_first_number()) # 输出:1
如果需要遍历所有值,通常配合生成器(yield)使用,或者在循环外收集结果。
def get_all_numbers():
result = []
for i in range(1, 10):
result.append(i)
return result
print(get_all_numbers()) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
一个程序的所有变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。
Python 遵循 LEGB 规则查找变量:Local(局部)、Enclosing(嵌套)、Global(全局)、Built-in(内置)。
在函数外部定义的变量,可以在整个脚本范围内访问。
# 全局变量
global_num = 10
def demo():
# 读取全局变量
result = global_num + 20
print(result)
demo() # 输出:30
在函数内部定义的变量,仅在函数内部有效。
def demo_local():
local_var = 100
print(local_var)
demo_local()
# print(local_var) # 报错:NameError,因为 local_var 只在函数内存在
如果在函数内部想要修改全局变量,需要使用 global 关键字声明。
counter = 0
def increment():
global counter
counter += 1
increment()
print(counter) # 输出:1
所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数。此外,Python 还支持嵌套定义函数(闭包的基础)。
def outer():
def inner():
print("这是内部函数")
inner()
outer()
calculate_total_price。def calculate_area(radius):
"""计算圆的面积
Args:
radius (float): 半径长度
Returns:
float: 面积
"""
import math
return math.pi * radius ** 2
try-except 捕获,保证程序的健壮性。函数是 Python 编程的核心概念之一。通过合理定义和使用函数,开发者可以构建出结构清晰、易于维护和扩展的代码库。掌握参数传递机制、作用域规则以及返回值处理,是编写高质量 Python 程序的基础。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online