函数进阶课堂笔记
-
函数的参数
-
位置参数与关键字参数
-
根据实参提供方式不同,将实参分为位置实参和关键字实参
位置实参:调用函数时,让实参和形参在位置上一一对应
关键字参数:调用函数的时候以’形参名 = 值’的形式确定形参对应的实参
位置参数与关键字参数混用:位置参数必须在关键字参数之前,且保证每个参数都有一个赋值
-
-
参数默认值
- 在定义函数时,直接对形参进行赋值,有默认值的函数,在调用的时候可以不用传参
- 如果形参没有默认值,有默认值的参数放在没有默认值参数之后
-
参数类型说明
-
无默认值参数类型说明——格式: 参数: 类型名
例如:def func(x:str, y)
-
有默认值参数,默认值类型就是参数对应类型
-
-
不定长参数(*形参或者**形参)
-
带*的不定长参数:在某个形参前面加星号,那么这个形参就是不定长参数,就可以接受任意多个实参。
-
带*的参数本身就是一个元组,对应的实参就是元组中的元素
注意:带*的不定长参数对应的实参必须位置参数传参
例如:def func(*x):
print(x)
func(1,2,3,4)
-
定长参数在不定长参数前,定长和不定长都使用位置参数传参
-
当定长参数在不定长参数后时,不定长参数必须是关键字参数传参
例如:def func(*, a,b,c)
pass
func(a = 1, b = 2, c = 3)
-
带**的不定长参数:可以接受任意多个实参
- 带**的参数本质就是一个字典,对应的关键字参数就是字典的键对值
- **的不定长参数对应的实参必须使用对应的参数传参
-
定长参数必须放在**不定长参数前,定长参数既可以使用位置参数,也可以使用关键字参数
-
带*的不定长参数,和带**的不定长参数可以一起使用,一个星号的不定长参数必须放在两个星号的不定长参数之前
-
定长参数在带*的不定长参数后,星号后面的定长参数必须是用关键字参数传参
总结:
1)*参数——本质是元组(必须是位置参数,个数不限)
2)**参数——本质是字典(必须是关键字参数,个数不限)
3)*参数必须在**参数之前
-
-
-
函数返回值
-
返回值
返回值的作用就是将函数内部的数据传递到函数外部
-
怎么确定函数返回值——怎样将函数内部的数据传递到函数外包部
在函数体中用return关键字来返回返回值(一个函数只有一个返回值,有多个返回值时,以元组类型返回)
-
什么时候需要返回值:如果函数的功能产生了新的数据,将新的数据返回
-
怎样获取函数返回值
- 获取函数调用的表达式的值,就是获取函数返回值
- 函数调用表达式——调用函数的语句
- 函数调用表达式的值,就是函数的返回值
-
如果函数体中没有return或者return后面没有值,则返回值为None
-
python函数只有一个返回值,多个函数以元组形式返回
-
-
变量作用域
-
变量作用域
已经定义过的变量能作用的范围,分为全局变量和局部变量
-
全局变量
定义:没有定义在函数或者类里边的变量就是全局变量
作用域:从定义开始到程序结束的任何位置都能使用
-
局部变量
定义:之定义在函数里边的变量
作用域:从开始到函数结束(只作用在函数中)(形参也是局部变量)
-
函数调用过程就是压栈过程
调用函数的时候,系统会自动在栈区间为这个函数创建一个临时栈区,用来保存函数中产生的数据(局部变量)
当函数调用结束后,这个临时栈区间会自动释放(释放之前会将返回值传递到临时栈区间外部)
-
gloabl
-
可以在函数内部定义全局变量
-
使用范围:在函数中修改一个全局变量的值或者子啊函数定义的一个全局变量
形式:gloabl 变量名
使用变量
-
例:def fun(c=3): global m m = 30 # 在函数中修改全局变量的值,需要先用gloabl进行说明 print(m)
-