Python 函数是一段可重复使用的代码块,用于完成特定任务或操作。定义函数的主要目的是为了避免重复的代码和提高代码的可读性和可维护性。Python 函数可以接收参数和返回结果。
定义函数
在 Python 中,定义函数的语法为:
def 函数名(参数列表):
"""函数文档字符串"""
函数体
return [返回值]
其中,关键字 def
表示定义函数,函数名是函数的唯一标识符,参数列表是函数的输入,函数体是函数执行的代码块,关键字 return
用于返回函数结果。函数名和参数列表是必须的,函数文档字符串和返回值是可选的。
例如,下面是一个求二次方程 $ax^2 + bx + c = 0$ 根的函数:
def solve_quadratic_equation(a, b, c):
"""求二次方程ax^2 + bx + c = 0的解"""
delta = b**2 - 4*a*c
if delta < 0:
return None # 无实数根
elif delta == 0:
return -b / (2*a) # 一个实数根
else:
x1 = (-b + math.sqrt(delta)) / (2*a)
x2 = (-b - math.sqrt(delta)) / (2*a)
return x1, x2 # 两个实数根
在上面的例子中,函数名是 solve_quadratic_equation
,参数列表是 (a, b, c)
,函数文档字符串是 """求二次方程ax^2 + bx + c = 0的解"""
,函数体是 delta = b**2 - 4*a*c
等一系列语句,并且使用了 return
返回函数结果。
调用函数
定义函数完成后,就可以通过调用函数来执行函数体中的代码。调用函数的语法为:
函数名(参数列表)
例如,下面是调用 solve_quadratic_equation
函数的例子:
>>> sol = solve_quadratic_equation(1, -3, 2)
>>> print(sol)
(2.0, 1.0)
在上面的例子中,我们调用 solve_quadratic_equation
函数,并传入三个参数 (1, -3, 2)
,该函数返回一个包含两个实数根的元组 (2.0, 1.0)
,然后将结果赋值给变量 sol
并打印输出。
参数传递
Python 中的参数传递主要有两种方式:值传递(传递不可变对象)和引用传递(传递可变对象)。
值传递
当传递的参数是不可变对象(如数值、字符串、元组等)时,传递的是值的副本,改变副本不会影响原来的值。例如:
def print_value(x):
x = x + 1
print(x)
a = 1
print_value(a) # 输出2
print(a) # 输出1
在上面的例子中,变量 a
值为 1
,我们调用 print_value
函数,并传入 a
,函数内部将值加一并打印输出,但是这个操作不会影响外部的变量 a
,所以输出结果是 2
和 1
。
引用传递
当传递的参数是可变对象(如列表、字典等)时,传递的是对象的引用,改变引用指向的对象会影响原来的对象值。例如:
def add_value(lst, x):
lst.append(x)
print(lst)
a = [1, 2, 3]
add_value(a, 4) # 输出[1, 2, 3, 4]
print(a) # 输出[1, 2, 3, 4]
在上面的例子中,变量 a
是一个列表,并且设置初值 [1, 2, 3]
,我们调用 add_value
函数,并传入 a
和 4
,函数内部将 4
插入到列表中,并打印输出 [1, 2, 3, 4]
,此时变量 a
的值也会被修改,所以后面的输出结果是 [1, 2, 3, 4]
。
默认参数
在定义函数时,可以为参数设置默认参数值,这样在调用函数时如果不传这个参数,则默认使用该值。例如:
def power(x, n=2):
"""计算x的n次幂"""
return x ** n
print(power(2)) # 输出4
print(power(2, 3)) # 输出8
在上面的例子中,函数 power
接收两个参数,第二个参数为默认参数,初值为 2
,如果不传递第二个参数,默认为 2
,然后计算 x
的 n
次幂。在第一个调用时,只传递了一个参数 2
,所以使用了默认值 2
;在第二个调用时,传递了两个参数 2
和 3
,所以直接使用传入的值 3
。
可变参数
在定义函数时,可以使用可变参数接收不定数量的参数值,这些参数被视为元组或列表。例如:
def sum(*args):
"""计算任意个整数的和"""
total = 0
for num in args:
total += num
return total
print(sum(1, 2, 3)) # 输出6
print(sum(4, 5, 6, 7)) # 输出22
在上面的例子中,函数 sum
使用了可变参数 *args
,可以接收不定的整数参数,然后计算它们的和。在第一个调用时,传入了三个整数 1
、2
和 3
;在第二个调用时,传入了四个整数 4
、5
、6
和 7
。
关键字参数
在定义函数时,可以使用关键字参数接收一些指定名称的参数,这些参数被视为字典。例如:
def print_user_info(name, age, **kw):
"""打印用户信息"""
print(f"姓名:{name},年龄:{age},其他信息:{kw}")
print_user_info("张三", 18, gender="男", email="123@qq.com")
# 输出 姓名:张三,年龄:18,其他信息:{'gender': '男', 'email': '123@qq.com'}
在上面的例子中,函数 print_user_info
使用了关键字参数 **kw
,可以接收任意数量的关键字参数,例如 gender="男"
和 email="123@qq.com"
。这些关键字参数被存储在字典中,并以关键字名称为键,关键字值为值传递给函数。
lambda函数
Python 中的 lambda 函数是一种匿名函数,可以简化代码并省略函数名称。lambda 函数的语法为:
lambda 参数列表: 表达式
例如:
f = lambda x, y: x + y
print(f(1, 2)) # 输出3
在上面的例子中,我们定义了一个 lambda 函数 f
,接收两个参数 x
和 y
,然后计算它们的和并返回结果。调用 f
函数时,传递了两个参数 1
和 2
,输出结果为 3
。
以上就是 Python 函数的语法形式的详细攻略,希望能帮助你理解和使用 Python 函数。