Python 函数
1. Python 中的函数
函数是 Python 程序中最基础的组建之一。通过函数,我们可以封装一些可复用的代码,并且让程序更加模块化。Python 中的函数具备一些非常强大的功能,比如闭包、递归等。在 Python 中,函数是第一类对象,可以作为参数传递、作为返回值、存储到容器中等等。
1.1 函数的定义和调用
在 Python 中定义一个函数非常简单,使用关键字 def
即可:
def function_name(arg1, arg2, ...):
# 函数体
return result
例如:
def add(a, b):
return a + b
函数可以包含 0 个或多个参数,在参数列表中,多个参数之间使用逗号隔开。Python 中的函数可以返回任何类型的值或者不返回任何值:
def say_hello(name):
print(f'Hello, {name}!')
def do_nothing():
pass
要调用一个函数,使用函数名和对应的参数:
result = add(1, 2)
say_hello('world')
do_nothing()
1.2 函数的参数
Python 中的参数有两种类型:位置参数和关键字参数。
位置参数是最常见的参数形式,函数会按照参数列表中的顺序,把调用时提供的值依次赋值给参数:
def add(a, b):
return a + b
result = add(1, 2) # 结果为 3
关键字参数是另外一种调用函数的方式,它允许我们在调用函数时指定参数的名称。关键字参数和位置参数可以混合使用:
def add(a, b):
return a + b
result = add(b=2, a=1) # 结果为 3
在定义函数时,可以给参数提供默认值:
def add(a, b=0):
return a + b
result1 = add(1) # 结果为 1
result2 = add(1, 2) # 结果为 3
默认参数应该放在参数列表的最后面。如果有多个默认参数,可以使用关键字参数来指定参数的名称。
1.3 函数的返回值
在 Python 中,函数可以返回任何类型的值或者不返回值。使用关键字 return
可以将函数的执行结果返回给函数调用方:
def add(a, b):
return a + b
result = add(1, 2)
print(result) # 结果为 3
函数可以返回多个值,Python 会将这些值打包成一个元组返回:
def swap(a, b):
return b, a
result = swap(1, 2)
print(result) # 结果为 (2, 1)
1.4 Lambda 函数
Python 中的 Lambda 函数是一种语法糖,用来创建匿名函数。Lambda 函数可以作为参数传递、作为返回值、存储到容器中等等。Lambda 函数通常用来定义简短的匿名函数。
# 用 Lambda 函数对列表进行排序
a = [(1, 'a'), (2, 'c'), (0, 'b')]
a.sort(key=lambda x: x[0])
print(a) # 结果为 [(0, 'b'), (1, 'a'), (2, 'c')]
1.5 函数装饰器
Python 中的装饰器是一种可以修改其他函数行为的函数。装饰器可以在不改变原函数代码的情况下,添加一些额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并且返回一个新的函数。
def my_decorator(function):
def wrapper(*args, **kwargs):
print('before function call')
result = function(*args, **kwargs)
print('after function call')
return result
return wrapper
@my_decorator
def my_function():
return 'Hello, world!'
result = my_function()
print(result) # 执行结果为:
# before function call
# after function call
# Hello, world!
注意:装饰器的作用是在不改变原函数代码的前提下,添加新的函数功能。因此,装饰器本身不能修改原函数的行为。
2. 常用内置函数
Python 中有很多常用内置函数可以帮助我们完成各种任务。下面介绍几个常用的内置函数。
2.1 abs()
abs()
函数返回一个数的绝对值:
result = abs(-1)
print(result) # 结果为 1
2.2 max() 和 min()
max()
和 min()
函数分别返回一个可迭代对象中的最大值和最小值:
result1 = max([1, 2, 3])
result2 = min([1, 2, 3])
print(result1, result2) # 结果为 3 1
2.3 sorted()
sorted()
函数用来对可迭代对象进行排序:
result = sorted([1, 3, 2])
print(result) # 结果为 [1, 2, 3]
2.4 map()
map()
函数用来对可迭代对象中的每个元素应用一个函数:
result = map(lambda x: x * 2, [1, 2, 3])
print(list(result)) # 结果为 [2, 4, 6]
2.5 reduce()
reduce()
函数对可迭代对象中的元素逐个应用一个函数,并返回最终的结果:
from functools import reduce
result = reduce(lambda x, y: x * y, [1, 2, 3])
print(result) # 结果为 6
3. Python 模块和包
Python 模块和包是组织 Python 代码的一种方式。模块可以看成是一个 Python 文件,包则是一个文件夹,其中包含多个 Python 文件。每个模块和包都有一个名称,我们可以通过这个名称来引用其中的变量、函数、类等。
3.1 模块的导入
在 Python 中,我们可以使用 import
语句导入已经存在的模块:
import math
result = math.sqrt(2)
print(result) # 结果为 1.4142135623730951
Python 中还有一种更灵活的模块导入方式,使用 from ... import ...
语句,可以直接导入模块中的特定变量、函数、类等:
from math import sqrt
result = sqrt(2)
print(result) # 结果为 1.4142135623730951
3.2 包的导入
Python 中的包可以包含多个模块,我们可以使用 import
和 from ... import ...
语句导入包和包中的模块:
import mypackage.mymodule
result = mypackage.mymodule.myfunction()
print(result)
from mypackage import mymodule
result = mymodule.myfunction()
print(result)
我们也可以使用 from ... import *
的方式导入包中的所有模块:
from mypackage import *
result = mymodule.myfunction()
print(result)
4. 总结
Python 中的函数是一种强大而灵活的编程工具,可以帮助我们封装代码、抽象问题、提高程序的可读性和可维护性。同时,Python 中的常用内置函数、Lambda 函数、函数装饰器等概念也是我们需要熟练掌握的内容。最后,Python 模块和包是一种非常重要的程序组织方式,掌握其使用方法可以帮助我们更好地管理大型项目和代码库。