1、函数目的
函数是一段具有特定功能的代码块,可以接收输入(参数),处理数据,并产生输出(返回值)。函数的主要目的是减少代码重复,提高代码的可读性和可维护性。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
2、函数定义
- 函数代码块以 def 关键词开头,后接函数名和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于声明参数。
- 函数的第一行语句可以选择性地使用文档字符串"" ""—用于存放函数说明。
- 函数内容以冒号 : 起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
def function_name(parameters):
# 函数体
def hello():
print("hello world!")
3、函数声明
在某些编程语言中,函数声明是在函数定义之前提供函数的签名,以便编译器识别。Python不需要显式声明函数,因为 def
关键字同时完成了声明和定义。
4、函数调用
函数调用是使用已定义的函数的过程。通过提供必要的参数,执行函数体内的代码。
def wake_up(num):
for i in range(num):
print("醒醒啦")
wake_up(2)
<<<
醒醒啦
醒醒啦
5、函数形参
形参(形式参数)是在函数定义中用于接收外部传入值的变量。它们定义了函数调用时需要的参数格式。
6、函数实参
实参(实际参数)是在函数调用时传递给函数的具体值或变量。
7、函数返回值
函数可以使用 return
语句返回一个值给调用者。如果没有 return
语句,函数默认返回 None
。
8、函数的参数类型
- 必需参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样
- 关键字参数:使用关键字参数允许函数调用时参数的顺序与声明时不一致
- 默认参数:调用函数时,如果没有传递参数,则会使用默认参数
- 不定长参数:星号 * 的参数会以元组(tuple)的形式导入 两个星号 ** 的参数会以字典的形式导入 处理比当初声明时更多的参数
def example(a, *args, info="哈哈", b, **kwargs):
"""
:param a:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样
:param args:不定长参数 函数能处理比当初声明时更多的参数 在关键字参数之前声明
:param info:调用函数时,如果没有传递参数,则会使用默认参数
:param b: 使用关键字参数允许函数调用时参数的顺序与声明时不一致
:param kwargs:不定长参数 两个星号 ** 的参数会以字典的形式导入
:return:
"""
print(a, end="\t")
print(args, end="\t")
print(info, end="\t")
print(b, end="\t")
print(kwargs)
example(12, "嘻嘻", "嘿嘿", info="no哈哈", e1="keke", b=12, e2="snooker")
example(12, "嘻嘻", "嘿嘿", e1="keke", b=12, e2="snooker")
<<<
12 ('嘻嘻', '嘿嘿') no哈哈 12 {'e1': 'keke', 'e2': 'snooker'}
12 ('嘻嘻', '嘿嘿') 哈哈 12 {'e1': 'keke', 'e2': 'snooker'}
9、匿名函数
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,内联函数的目的是调用小函数时不占用栈内存从而减少函数调用的开销,提高代码的执行速度。
add = lambda x, y: x + y
result = add(5, 3)
结语
函数是编程中的基本构建块,它们使得代码更加模块化和可重用。理解函数的基本概念和用法对于编写清晰、有效的代码至关重要。无论是定义复杂的函数来处理数据,还是使用简单的匿名函数来执行快速计算,函数都是编程语言中不可或缺的一部分。