Python应用之函数

1. Python函数基础

Python作为一门编程语言,提供了函数的支持,接下来我们将从函数的定义、调用和参数三个方面来介绍Python函数。

1.1 函数定义

在Python中,函数的定义使用def关键字,格式如下:

def function_name(parameters):

'''docstring'''

# function body

return [expression]

其中:

function_name为函数名;

parameters为函数参数,可以是位置参数、关键字参数、默认参数和可变参数;

docstring为函数的文档字符串,用于说明函数的作用、参数说明、返回值说明等;

function body为函数体,其中包含了函数的具体实现。

return关键字用于返回函数的执行结果。

例如,下面定义了一个名为add的函数,该函数接收两个位置参数ab,并返回它们的和:

def add(a, b):

'''计算两个数的和'''

c = a + b

return c

在函数定义中,docstring是可选的。一个好的docstring可以让读者更好地理解函数的作用。

1.2 函数调用

函数定义好之后,我们可以通过函数名来调用函数。函数调用格式如下:

function_name(arguments)

其中,arguments为函数参数,可以是位置参数或关键字参数。例如,我们可以通过以下方式调用add函数:

result = add(1, 2)

print(result)

执行结果为:

3

1.3 函数参数

Python函数的参数可以是位置参数、关键字参数、默认参数和可变参数。

1.3.1 位置参数

位置参数就是按照参数顺序依次传递的参数,例如上述例子中的ab

1.3.2 关键字参数

关键字参数是通过指定参数名来传递的参数,例如:

result = add(b=1, a=2)

print(result)

执行结果为:

3

可以看到,通过指定参数名,我们可以不按照参数定义的顺序来传递参数。

1.3.3 默认参数

默认参数是在函数定义时就已经赋值的参数,例如:

def power(base, exponent=2):

'''计算幂'''

return base ** exponent

result = power(2)

print(result)

result = power(2, 3)

print(result)

执行结果为:

4

8

可以看到,当我们不传递第二个参数时,默认值为2。

1.3.4 可变参数

可变参数可以接收任意数量的参数,例如:

def print_args(*args):

'''打印可变参数'''

for arg in args:

print(arg)

print_args(1, 2, 3)

执行结果为:

1

2

3

在函数定义时,我们使用一个星号(*)将参数前缀,这样就可以让参数接收任意数量的参数。

2. Python的lambda函数

除了上述介绍的常规函数,Python还支持一种特殊的函数——lambda函数。

lambda函数也称为匿名函数,它是一种简单的函数定义方式,可以在一行代码中定义函数。

lambda arguments: expression

其中,arguments为参数列表,可以有多个参数,参数之间用逗号分隔;expression为函数体,通常为一个简单的表达式。

例如,我们可以通过以下方式定义一个计算平方的匿名函数:

f = lambda x: x ** 2

result = f(2)

print(result)

执行结果为:

4

以上代码中,我们定义了一个lambda函数,并将其赋值给变量f,然后调用f并传入参数2。

lambda函数通常用于函数式编程中,特别是在需要传递函数作为参数的场合,对于一些简单的函数,使用lambda函数可以简化代码。

3. Python的高阶函数

Python中的函数可以作为参数传递给其他函数,或者作为返回值返回,这些函数称为高阶函数。

在Python中,常见的高阶函数有mapfilterreduce

3.1 map函数

map函数用于对列表或其他可迭代对象中的元素执行相同的操作,返回一个新的列表。

map函数的定义格式如下:

map(function, iterable, ...)

其中,function为函数,iterable为可迭代对象。例如,我们可以使用map函数将列表中的数值转换为字符串:

list1 = [1, 2, 3, 4, 5]

result = map(str, list1)

print(list(result))

执行结果为:

['1', '2', '3', '4', '5']

可以看到,map函数将list1中的每个元素都转换成了字符串并返回了一个新的列表。

3.2 filter函数

filter函数用于在可迭代对象中筛选元素,返回一个新的列表。

filter函数的定义格式如下:

filter(function, iterable)

其中,function为函数,iterable为可迭代对象。例如,我们可以使用filter函数筛选列表中大于3的元素:

list1 = [1, 2, 3, 4, 5]

result = filter(lambda x: x > 3, list1)

print(list(result))

执行结果为:

[4, 5]

可以看到,filter函数筛选出list1中的大于3的元素并返回了一个新的列表。

3.3 reduce函数

reduce函数用于对可迭代对象中的元素执行连续的操作,返回一个单一的值。

reduce函数的定义格式如下:

reduce(function, iterable[, initializer])

其中,function为函数,iterable为可迭代对象。initializer为可选的初始值,如果指定了初始值,则reduce函数从初始值开始执行操作。例如,我们可以使用reduce函数计算1到5的累加和:

from functools import reduce

list1 = [1, 2, 3, 4, 5]

result = reduce(lambda x, y: x + y, list1)

print(result)

执行结果为:

15

可以看到,reduce函数将list1中的元素累加起来并返回了一个单一的值。

4. Python中的递归函数

递归函数是指调用自身的函数。在Python中,递归函数需要注意控制递归深度,避免出现无限递归的情况。

例如,下面是一个计算阶乘的递归函数:

def factorial(n):

'''计算n的阶乘'''

if n == 0:

return 1

else:

return n * factorial(n - 1)

result = factorial(5)

print(result)

执行结果为:

120

可以看到,factorial函数调用自身来计算阶乘,但需要注意控制递归深度。

5. Python中的装饰器函数

装饰器函数是指用于修饰其他函数的函数。在Python中,装饰器函数可以在不修改被修饰函数的代码的情况下,增加被修饰函数的功能。

例如,下面是一个计算函数运行时间的装饰器函数:

import time

def time_it(func):

def wrapper(*args, **kwargs):

start = time.time()

result = func(*args, **kwargs)

end = time.time()

print('{} costs {} s'.format(func.__name__, end - start))

return result

return wrapper

@time_it

def func():

time.sleep(1)

return 'hello world'

result = func()

print(result)

执行结果为:

func costs 1.002760887145996 s

hello world

可以看到,我们使用time_it装饰器函数修饰了func函数,从而在func执行完毕后打印出了其运行时间。

在定义装饰器函数时,我们不能直接修改原函数的定义,而是通过返回一个新的函数来实现功能增强。

6. Python中的生成器函数

生成器函数是指可以使用yield语句来生成一系列值的函数。生成器函数可以在需要时生成值,节省空间和时间。

例如,下面是一个简单的生成斐波那契数列的生成器函数:

def fibonacci(n):

'''生成斐波那契数列'''

a, b = 0, 1

for i in range(n):

yield b

a, b = b, a + b

for i in fibonacci(10):

print(i)

执行结果为:

1

1

2

3

5

8

13

21

34

55

可以看到,fibonacci函数使用yield语句生成斐波那契数列中的每个值,并在需要时生成这些值。

7. 总结

Python函数是编写Python程序的重要组成部分,掌握Python函数的使用可以提高代码的复用性和可维护性。文章介绍了Python函数的定义、调用和参数、Python的lambda函数、高阶函数、递归函数、装饰器函数和生成器函数。希望本文能对大家了解Python函数有所帮助。

后端开发标签