Python Function
简介
- Python函数是一段用来完成特定任务的可重复调用的代码块。它们接受输入参数、执行某些操作并返回结果。函数可以帮助我们组织代码,避免出现重复的代码,并使代码更易于阅读和维护。
- 在Python中,定义一个函数需要使用
def
关键字,后面跟着函数名、参数列表和一个冒号。函数体内的代码必须缩进。 -
以下是一个简单的Python函数示例:
1 2 3 4
def greet(name): print("Hello, " + name + "!") greet("John")
- 该代码定义了一个名为
greet
的函数,该函数接受一个参数name
,将其与字符串"Hello, "
和"!"
连接起来并打印出来。最后一行代码调用这个函数并传递一个名为John
的参数。 - 当你运行这段代码时,它会输出:
Hello, John!
- 除了上面这种简单的函数,Python还支持很多不同类型的函数,包括没有参数的函数、返回值的函数、匿名函数和高阶函数等。
定义函数
在 Python 中,可以使用 def
关键字定义函数。函数定义语法如下:
1
2
3
4
def function_name(parameters):
"""函数文档字符串"""
# 函数体代码
return [expression] # 可选的返回值
其中,function_name
是函数名,parameters
是可选的参数列表,用括号包含,多个参数之间用逗号分隔;函数体代码是函数要执行的操作,可以包含任意数量的语句;return
语句可选,用于指定函数的返回值。
例如,下面是一个简单的函数,将两个数相加并返回结果:
1
2
3
4
5
6
def add_numbers(a, b):
"""
将两个数字相加并返回结果
"""
result = a + b
return result
在这个例子中,add_numbers
是函数名,它接受两个参数 a
和 b
。函数体代码将它们相加,并将结果存储在变量 result
中。最后,通过 return
语句将结果返回给调用方。
函数定义详解
- 函数名
- 参数列表
- 函数体。
函数名
Python 中的函数名必须遵循标识符命名规则,即由字母、数字和下划线组成,不能以数字开头。建议给函数选用有意义的名字,便于代码的阅读和理解。
参数列表
函数可以接受零个或多个参数,这些参数传递给函数后,可以在函数内部使用。在 Python 中,参数列表放在括号中,多个参数之间用逗号隔开。例如:
1
2
def my_func(arg1, arg2, arg3):
# 函数体代码
上面的函数定义接受三个参数 arg1
、arg2
和 arg3
。
在 Python 中,参数可以有默认值,这样调用函数时就可以省略对应的参数。例如:
1
2
def my_func(arg1, arg2=0, arg3='default'):
# 函数体代码
在上面的例子中,arg2
有一个默认值为 0
,arg3
有一个默认值为 'default'
。因此,在调用 my_func
时,可以省略这两个参数。如果不指定 arg2
,则它将被设置为 0
。如果不指定 arg3
,则它将被设置为 'default'
。
函数体
函数体是包含在函数定义中的代码块。函数体通常包含一些操作,用于处理输入参数并生成输出结果。在 Python 中,函数体由缩进的语句组成,这些语句会在函数被调用时执行。
1
2
3
4
5
def my_func(arg1, arg2):
# 函数体代码
print(f"arg1={arg1}, arg2={arg2}")
result = arg1 + arg2
return result
在上面的例子中,my_func
接受两个参数 arg1
和 arg2
。函数体包含两行代码,第一行使用 print
函数打印参数的值,第二行将 arg1
和 arg2
相加,并将结果返回给调用方。
模块
-
Python 标准库中有很多内置的模块可供使用,例如:
os
:提供了访问操作系统功能的接口,如文件操作、进程管理等。sys
:提供了与 Python 解释器及其环境交互的功能,如获取命令行参数、退出程序等。math
:提供了数学运算的函数,如三角函数、指数函数等。datetime
:提供了日期和时间相关的函数操作,如获取当前时间、计算时间差等。
-
除了标准库外,我们还可以使用第三方库或自己编写的模块来扩展 Python 的功能。导入模块可以使用
import
语句,例如:1 2
import math print(math.sqrt(25)) # 输出 5.0
-
也可以使用
from ... import
语句导入模块中的指定函数或变量,例如:1 2 3
from datetime import date today = date.today() print(today) # 输出格式为 YYYY-MM-DD 的今天的日期
-
如果想要导入整个模块的所有成员,可以使用
from ... import *
语句,例如:1 2
from math import * print(sqrt(25)) # 输出 5.0
需要注意的是,当导入模块时,Python 会在指定的路径中查找模块文件。如果模块不存在或不能被找到,则会引发
ModuleNotFoundError
异常。
包
在 Python 中,包是一个目录,其中包含了一组模块和子包。包的主要作用是将相关的模块组织在一起,使得程序设计更加模块化和易于管理。
-
Python 的标准库中有很多包可供使用,例如:
os
:提供了访问操作系统功能的接口,如文件操作、进程管理等。sys
:提供了与 Python 解释器及其环境交互的功能,如获取命令行参数、退出程序等。math
:提供了数学运算的函数,如三角函数、指数函数等。datetime
:提供了日期和时间相关的函数操作,如获取当前时间、计算时间差等。
-
除了标准库外,我们也可以自己编写包来组织自己的代码。在 Python 中,一个目录要想成为一个包,需要满足以下条件:
-
包目录下必须包含一个名为
__init__.py
的文件,该文件可以为空或者包含一些初始化代码; -
包目录下可以包含若干个模块(.py 文件),这些模块可以相互导入。
- 举例来说,假设我们编写了一个名为
mypackage
的包,其目录结构如下所示:
1 2 3 4 5 6 7
mypackage/ __init__.py module1.py module2.py submodule/ __init__.py submodule1.py
-
-
其中,
mypackage
是一个包,包含了module1.py
、module2.py
和submodule
子包。submodule
子包中有一个名为submodule1.py
的模块。如果要使用该包中的模块,可以使用
import
语句,例如:1 2 3 4 5 6 7 8
import mypackage.module1 mypackage.module1.foo() from mypackage.module2 import bar bar() from mypackage.submodule.submodule1 import baz baz()
需要注意的是,当导入包或模块时,Python 会在指定的路径中查找包或模块所在的目录,并将其添加到
sys.path
中。如果包或模块不存在或不能被找到,则会引发ModuleNotFoundError
异常。