Day12-函数进阶
1.返回值
-
1.如何确定返回值
执行函数体的时候遇到return,return后面的值就是函数的返回值。(需要将哪个数据从函数内部传递到函数外部,就将哪个数据放在return的后面)
-
2.怎么获取函数返回值
获取函数表达式的值,就是获取函数的返回值(每一个函数调用的表达式都有结果,结果就是这个函数的返回值
函数返回的值能做的事情,调用表达式都可以做
函数调用表达式—调用函数的语句
-
3.什么时候需要函数返回值
如果实现函数的功能产生了新的数据,就将新的数据作为返回值返回(而不是在函数内部打印这个数据)
2.return的作用
-
1.确定函数的返回值
-
2.提起结束函数—在执行函数体的时候,什么时候遇到return,函数什么时候结束
def func3(): print('========') print('+++++++++') for x in range(3): if x == 1: return 100 print(x) print('hello world!')
3.变量的作用域
-
1.变量的作用域
根据变量作用域的不同,可以将变量分为全局变量和局部变量两种
-
2.全局变量和局部变量
-
全局变量
Python中没有定义再函数中、类中的变量就是全局变量
全局变量的作用域:从定义开始,到程序结束
全局变量默认情况下保存在全局栈区间(全局栈区间结束后才会自动释放)
-
局部变量
定义在函数中变量时局部变量(形参是属于定义再函数中的变量)
局部变量的作用域:从定义开始,到函数结束
ps:每次调用函数的时候,系统都会在自动为这一个函数创建一个临时的栈区间,这个函数中产生的所有数据,默认情况下都是保存在临时栈区间中的。当函数调用结束的时候,这个临时栈区间会自动释放(里面的数据都会被销毁)
-
-
3.global的用法
-
用法1:如果想要在函数中修改一个全局变量的值,就可以在函数中变量使用前用global对变量进行说明
-
用法2:在函数中定义全局变量,也可以使用global
def func3(): # 在函数里面修改全局变量的值,不会修改成功,而是定义一个新的局部变量 m = 299 print('函数里面的m:', m) global n n = 299 print('函数里面的n:', n) global t t = 300
-
4.参数
-
1.位置参数和关键字参数
- 位置参数:以’数据1,数据2,数据3…'的形式存在,让实参对应的数据和形参对应的变量位置上一 一对应
- 关键字参数:以’参数名1=数据1,参数名2=数据2,参数名3=数据3,…'的形式存在。
注意:多个关键字参数可以随意交换位置,它不会影响形参和实参的对应关系 - 3.混用:调用函数的时候位置参数和关键字参数可以一起使用,但是位置参数必须在关键字参数的前面
-
2.参数默认值
-
定义函数的时候,可以以’变量名=值’的形式,给形参赋默认值。已经有默认值的参数,在调用函数的时候可以不用传参。
-
定义函数的时候,可以有的参数有默认,有的参数没有默认值,但是没有默认值的参数必须在有默认值的参数的前面
-
-
3,参数类型说明
没有默认值的参数–形参名:类型名
有默认值的参数:默认值的类型就是对应的参数类型
def func6(str1: str, str2='') -> int: pass
-
4,不定长参数
-
带*的不定长参数:
# 案例1:定义一个函数计算多个数的和 # sum2(19, 27, 78, 89, 2, 67) def sum2(*num): # print('num:', num) s = 0 for x in num: s += x return s # 如果一个定长参数放在一个不定长参数的后面,那么这个定长参数必须用关键字参数传参! def func2(*x, y): pass # !!!!单独的*后面的参数必须使用关键字参数传参 def func3(a, *, b): pass
-
带**的不定长参数
# 案例2:定义一个函数收集一个学生的信息(姓名、年龄、电话和各科成绩) def create_student(name, age, tel, **score): print(score)
-