声明和调用
- 什么是函数?
生活中~通过调用行为,执行一个过程
通过名称~调用执行一个函数
生活中:行为,包含了一系列操作过程的行为
代码中:封装了大量代码的代码块,代码块进行了命名 - 声明函数
def关键字:defined定义
def 函数名称(函数中代码执行需要的参数列表):
函数中执行的代码块
[return 返回值]
文档中:如果在操作语法说明中出现了方括号~表示这一部分内容是可选的
- 执行函数
通过该函数名称调用执行函数中的代码:
函数名称()
def test():
函数中的代码
test() 调用执行test函数,执行test函数中的代码
test2 = test 将函数test赋值给变量test2,并不会执行函数test
test2() 执行test2函数~ test2中存放的是test-> 执行test()函数
函数的参数
- 参数的意义:函数中的代码执行需要的数据
def test(name):
print("用户的名称是:", name)
test("tom") #执行test函数~需要一个数据name
-
参数的区分
-
形式参数:
函数声明时定义在函数后面括号中的参数
函数执行~在形式上需要这些数据
这些数据不是具体的~
def test(name):
print(name)
- 实际参数
调用执行函数时,在函数括号中传递的真实数据
具体的、存在的数据
test("tom")
- 函数参数的定义
- 位置参数
def test(a, b, c, d):
print(.....)
操作过程中,调用执行时~实际参数按照形式参数的前后顺序[位置]依次赋值
test(1,2,3,4)
- 默认值参数
def test(a, b, c, d=100):
print(.....)
操作过程中,函数声明中~某个形式参数可以直接赋值~该形式参数就是默认值参数;默认值参数可以在调用时不传递数据~使用默认数据进行运算。
test(1,2,3) d自动赋值默认100运算
test(1,2,3,4) d赋值4进行运算
注意:默认值参数一般放在最后面
- 可变参数
def test(a, *args): args: arguments 参数
print(.....)
操作过程中,可以通过符号*,声明某个可以接受多个数据的可变参数~ 可变参数可以接受0~n个数据。
test(1,2,3)
a赋值1,args赋值(2,3)
test(1,2,3,4)
a赋值1, args赋值(2,3,4)
可变参数可以将接受到的多个参数~自动封装成元组进行操作。自动封装过程~某些资料:自动封箱/自动装箱
注意:可变参数一般放在最后面
- 关键字参数
def test(a, **kwargs): kwargs : keyword arguments 关键字参数
print(.....)
操作过程中,可以通过符号**,声明某个可以接受多个key-value键值对数据,并且自动装箱成字典接受到函数中进行处理
test(1, name="jerry", age=12)
a赋值1,kwargs赋值{"name": "jerry", "age": 12}
注意:关键字参数一般放在最后面
- 万能参数
def test(*args, **kwargs):
pass
*args可以接受任意多个的单个数据
**kwargs可以接受任意多个的key-value键值对数据
按照函数调用规范,单个数据放在前面,key-value数据放在后面。所以上面的参数列表:万能参数,可以接受任意数据当成函数的参数进行处理。
- 强制关键字参数
def test(*, name, age):
pass
声明在符号*后面的所有参数,都是强制关键字参数~
理由?为什么要用它?
特点:一旦声明~函数中定义了的参数名称,必须在调用的时候使用它们作为key值
test(name="tom", age=100) right
test(x="jerry", y=10) error
理由:极大限度的提升代码的可读性
- pass关键字
占位符
待开发的缩进代码
def test():
# TODO 注释【功能描述、时间、作者】
pass
通过pass占位符,让声明但是还没有实现的函数~不报错。
不影响整体项目的进度。
TODO注释~一种特殊的注释,表示待开发功能
常规的IDE工具基本都集成了TODO注释的操作。