函数是编程语言对代码封装的典型语法类型,python函数的种类丰富,功能强大。本章节主要讲解函数的构造,函数的参数传递和几种复杂函数的使用以及原理。
一、Python函数介绍
Python 中的函数是一段封装的代码,用于执行特定任务。它可以接收参数,并且可以返回一个值。函数可以被多次调用,有助于减少代码冗余和提高代码的可读性。
Python 中的函数使用 def 关键字进行定义。函数的定义格式如下:
def function_name(arg1, arg2, ...):
# function body
return result
- function_name 是函数的名称,通常使用有意义的名称。
- arg1, arg2, ... 是函数的参数,可以有多个。
- return result 语句表示函数的返回值,函数可以有多个返回值。如果没有返回值,可以不写 return 语句。
在 Python 中,函数可以在代码中任意地点被调用,在调用函数时,可以向函数传递参数。
def add(a, b):
return a + b
result = add(1, 2)
print(result) # 3
除了上面提到的标准函数,Python 还有一些特殊类型的函数,如匿名函数(lambda 函数)、装饰器函数等。
二、9种函数类型详解
在 Python 中,函数有以下几种类型:
1.标准函数:它是一个完整的函数,使用 def 关键字定义,用于执行特定任务。
def add(a, b):
return a + b
result = add(1, 2)
print(result) # 3
2.python偏函数
Python 中的 functools.partial 函数允许你创建一个新的偏函数,该函数是原始函数的一个变体,固定了部分参数。这对于需要多次使用相同参数的函数特别有用。
import functools
def add(a, b, c):
return a + b + c
add_10 = functools.partial(add, 10)
result = add_10(20, 30)
print(result) # 60
在上面的示例中,我们使用 functools.partial 函数创建了一个新函数 add_10,该函数固定了参数 a 的值为 10。因此,当我们调用 add_10(20, 30) 时,实际上是调用了 add(10, 20, 30)。
3.python高阶函数举例
高阶函数是指接受函数作为参数或返回函数作为结果的函数。Python 中内置的高阶函数有 map,filter 和 reduce。
def square(x):
return x * x
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(square, numbers))
print(squared_numbers) # [1, 4, 9, 16, 25]
在上面的示例中,我们定义了一个 square 函数,然后使用 map 函数将该函数作用于 numbers 列表中的每一项,得到了一个新的列表 squared_numbers。
def is_even(x):
return x % 2 == 0
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(is_even, numbers))
print(even_numbers) # [2, 4]
在上面的示例中,我们定义了一个 is_even 函数,然后使用 filter 函数筛选出了列表 numbers 中所有的偶数。
from functools import reduce
def add(a, b):
return a + b
numbers = [1, 2, 3, 4, 5]
sum_of_numbers = reduce(add, numbers)
print(sum_of_numbers) # 15
在上面的示例中,我们定义了一个 add 函数,然后使用 reduce 函数计算出了列表 numbers 中所有数字的和。
4.python返回函数
返回函数是指在一个函数内部定义并返回另一个函数的函数。这是一种非常有用的技术,可以用于创建闭包和实现高阶函数。
def make_adder(x):
def adder(y):
return x + y
return adder
add5 = make_adder(5)
print(add5(3)) # 8
add10 = make_adder(10)
print(add10(3)) # 13
在上面的示例中,我们定义了一个 make_adder 函数,该函数接受一个数字 x 并返回一个内部函数 adder。返回的内部函数接受一个数字 y 并返回 x + y 的值。我们可以通过多次调用 make_adder 来创建多个不同的加法函数,例如 add5 和 add10。
5.匿名函数(lambda 函数):它是一个简单的函数,用于执行简单的计算任务,不需要使用 def 关键字定义。
add = lambda a, b: a + b
result = add(1, 2)
print(result) # 3
6.python闭包函数
闭包是一种特殊的函数,它能够记住它的创建环境,并在其他地方引用。这样,在闭包内部,你可以访问外部函数的变量,即使外部函数已经结束执行了。
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
counter1 = make_counter()
print(counter1()) # 1
print(counter1()) # 2
counter2 = make_counter()
print(counter2()) # 1
print(counter2()) # 2
在上面的示例中,我们定义了一个 make_counter 函数,该函数创建了一个内部函数 counter。返回的内部函数是一个闭包,因为它可以访问外部函数的变量 count。我们可以创建多个计数器函数,例如 counter1 和 counter2,每个函数都有自己的 count 变量,因此它们是独立的。
7. 递归函数
递归函数是一种特殊的函数,它可以递归调用自身来完成任务。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # 120
在上面的示例中,我们定义了一个递归函数 factorial,该函数计算了给定数字 n 的阶乘。如果 n 等于 0,则函数返回 1。否则,函数调用自身,并在每次递归调用中减少 n 的值,直到 n 等于 0。在每次递归调用中,我们乘以当前的 n 值,以累积总结果。
8.装饰器函数:它是一个特殊类型的函数,用于修饰其他函数,以添加额外的功能。
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before function call")
result = func(*args, **kwargs)
print("After function call")
return result
return wrapper
@my_decorator
def add(a, b):
return a + b
result = add(1, 2)
print(result)
# Before function call
# After function call
# 3
9. 函数生成器
函数生成器是一种特殊的生成器,可以使用 yield 语句生成序列。
def fibonacci(n):
a, b = 0, 1
for i in range(n):
yield a
a, b = b, a + b
for num in fibonacci(10):
print(num)
# Output: 0 1 1 2 3 5 8 13 21 34
在上面的示例中,我们定义了一个函数生成器 fibonacci,该生成器生成斐波那契数列的前 n 个数。每次生成器执行一次 yield 语句,它将生成一个值并将执行权返回给调用者。在本例中,我们通过循环调用生成器,并打印出生成的数字。
更多详细教程参考: