函数
函数不仅可以实现代码的复用,更能实现代码的一致性,当修改函数的代码,所有调用该函数的地方都统一修改。
函数的基本概念
- 函数是代码的封装,用于实现一个功能
- 函数可以反复调用、传递参数、返回计算结果
- Python 中函数分为如下几类:
- 内置函数
如str()、list()、len()等内置函数,可以拿来直接使用。 - 标准库函数
可以通过import 语句导入库,然后使用其中定义的函数。 - 第三方库函数
从Python 社区下载安装第三方库后,通过import 语句导入,然后使用这些第三方库的函数。 - 用户自定义函数
用户自己定义的函数,适应用户自身需求定义的函数。
函数的定义和调用
定义函数的语法如下:
def 函数名([参数列表]) :
‘’‘文档字符串’’’
函数体/若干语句
- 使用def 定义函数,后跟函数名(参数)
执行def 时,创建一个函数对象,函数名变量指向此对象。 - 参数列表
圆括号内定义函数形参,多个参数用逗号隔开;当无参数时保留圆括号。
形参–形式参数,定义函数时当做局部变量在函数内部使用,属于函数。不需要声明类型和指定返回值类型。
调用函数时使用的实参列表必须与形参列表一一对应。 - return 返回值
当函数体中包含return 语句,则结束函数执行并返回值,否则返回None 值。 - 调用函数之前,必须先定义函数,即def 创建函数对象
内置函数对象会自动创建。
标准库和第三方库函数,通过import 导入模块时,会自动执行模块中的def 语句。
自定义函数需按需求自己def创建函数。
形参和实参
def printMax(a, b):
'''实现两个数的比较,并返回较大的值'''
if a > b:
print(a, '较大值')
else:
print(b, '较大值')
printMax(10, 20)
printMax(30, 5)
形参用于定义,实参用于调用。实参与形参必须一一对应。
函数printMax(a,b)中a和b是形式参数,在定义函数时使用,形式参数命名需符合标识符命名规则(字母、数字、_)。
在调用函数时,传递的参数称为实际参数,printMax(10,20)中10和20就是实际参数。
文档字符串(函数注释)
为提高程序可读性,一般在函数体开始的部分附上函数定义说明,称为文档字符串/函数的注释。在三个单引号或三个双引号之间,可以加入多行文字进行说明。
help(函数名)可以展示函数注释
def printMax(a, b):
'''实现两个数的比较,并返回较大的值'''
if a > b:
print(a, '较大值')
else:
print(b, '较大值')
help(printMax)
'''
Help on function printMax in module __main__:
printMax(a, b)
实现两个数的比较,并返回较大的值
'''
return语句
return 语句的两个功能:
- 结束函数执行
- 返回指定值,便于后续调用
# 函数体中无return语句或者return语句未赋值时,函数返回值为None
def print_star(n):
print("*" * n)
return
print('python') # return,结束函数体,后续语句不执行
print(print_star(10)) # 运行函数后返回值为None
# 当需返回多个值时可以使用列表/元组/字典/集合将多个值存储后返回
def List(x,y,z):
return[x+y,y+z,z+x]
print(List(3,5,7)) # [8, 12, 10]
函数在内存中的底层原理
执行def 定义函数后,系统就创建了相应的函数对象。函数名指向函数对象id,从而实现对函数的调用。
def print_star(n):
print("*" * n)
print(print_star) # <function print_star at 0x0000000002BB8620>
print(id(print_star)) # 45844000
c = print_star
c(3) # ***
print(type(c)) # <class 'function'>
print(id(c)) # 45844000
# Python 中,圆括号意味着调用函数。没有圆括号的情况下,Python 会把函数当做普通对象。
I = int
print(type(I('356'))) # <class 'int'>
“c=print_star”则将print_star变量的值赋给了变量c,从而变量c和print_star都指向相同的函数对象,则c(3)与print_star(3)调用相同函数