文章目录
- 一、函数定义
- 1、定义
- 2、函数调用
- 3、参数传递
- 4、传递参数的形式
- 4.1、位置参数
- 4.2、关键字参数
- 4.3、默认参数
- 4.4、可变参数
- 5、返回值
前言:
Python作为一种高级编程语言,以其简洁、易读和强大的功能而广受欢迎。函数作为编程中的核心概念之一,在Python中扮演着至关重要的角色。函数允许你将一段代码封装起来,赋予其名称,并通过参数和返回值来实现代码的复用和模块化。
一、函数定义
1、定义
在Python中,函数通过
def
关键字来定义。其基本语法如下:
def 函数名(参数列表):
"""函数文档字符串(docstring),用于描述函数的功能和用法"""
函数体
return 返回值
- 函数名: 遵循Python的命名规则,应具有描述性,便于理解函数的功能。
- 参数列表: 用于接收传递给函数的值,可以包含多个参数,参数之间用逗号分隔。
- 函数体: 包含执行具体任务的代码块,必须缩进。
-
返回值: 使用
return
语句返回结果,可以返回多个值(以元组形式)。如果不显式返回,则默认返回None
。
2、函数调用
定义函数后,通过函数名加上括号(必要时包含参数)来调用函数。例如:
def greet(name):
"""打印问候语"""
print(f"Hello, {name}!")
greet("Alice") # 调用函数,输出:Hello, Alice!
3、参数传递
Python的参数传递有两种形式,传不可变对象和传可变对象
- 不可变类型: 类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
- 可变类型: 类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
python 中一切都是对象,严格意义不能说值传递还是引用传递,应该说传不可变对象和传可变对象。
示例一:传不可变对象
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print b # 结果是 2
示例二:传可变对象
def changeme( mylist ):
"修改传入的列表"
mylist.append([1,2,3,4])
print "函数内取值: ", mylist
return
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print "函数外取值: ", mylist
输出结果
函数内取值: [10, 20, 30, [1, 2, 3, 4]]
函数外取值: [10, 20, 30, [1, 2, 3, 4]]
4、传递参数的形式
Python函数的参数传递分为位置参数、关键字参数、默认参数、可变参数(
*args
和**kwargs
) 等几种形式。
4.1、位置参数
按照定义顺序传递参数。
def add(a, b):
return a + b
result = add(3, 5) # result 为 8
4.2、关键字参数
关键字参数允许在函数调用时,按照参数名来传递值,而不是仅仅依赖参数的顺序。这样做的好处是,即使函数参数很多,或者参数顺序容易混淆,也能准确地传递每个参数的值。语法上,关键字参数在函数调用时,通过参数名=值的形式传递。例如:
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
# 使用关键字参数调用函数
greet(name="Alice", greeting="Hi") # 输出: Hi, Alice!
即使改变参数的顺序,只要参数名正确,函数仍然能够正确执行:
greet(greeting="Hi", name="Alice") # 输出: Hi, Alice!
使用过程要注意的问题:
-
参数名必须匹配: 关键字参数中的参数名必须与函数定义中的参数名完全匹配,否则Python会抛出
TypeError
异常。 -
不能重复传递: 同一个参数名不能在函数调用时重复传递,否则会引发
TypeError
。 - 位置参数与关键字参数混用: 在函数调用时,可以混合使用位置参数和关键字参数,但位置参数必须在关键字参数之前。
4.3、默认参数
默认参数是指在定义函数时,为某些参数指定默认值,使得在函数调用时,如果没有提供这些参数的值,则会使用默认值。默认参数的基本语法是在函数定义时为参数赋值,例如:
def greet(name, message="Hello"):
print(f"{message}, {name}!")
使用过程要注意的问题:
- 必选参数在前,默认参数在后: 在函数定义时,必选参数必须放在默认参数之前。如果默认参数放在必选参数之前,Python解释器会报错。
4.4、可变参数
-
*args
: 用于传递任意数量的位置参数,以元组形式接收。 -
**kwargs
: 用于传递任意数量的关键字参数,以字典形式接收。
def print_args(*args):
for arg in args:
print(arg)
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_args(1, 2, 3) # 输出: 1 2 3
print_kwargs(a=1, b=2, c=3) # 输出: a: 1 b: 2 c: 3
5、返回值
函数可以通过
return
语句返回一个或多个值(从Python 3.6开始支持返回多个值,实际上是返回一个元组)。Python函数可以返回任何类型的数据,包括整数、浮点数、字符串、列表、元组、字典、集合、对象、甚至是另一个函数(即闭包)。如果函数没有显式地返回任何值,那么它默认返回None
。
def divide(a, b):
if b == 0:
return "Error: Division by zero"
return a / b
result = divide(10, 2) # result 为 5.0