一、变量作用域
1、变量的作用域指的是变量的作用范围:在哪里可以用,哪里不可以用。
2、全局变量:在函数之外定义的变量,称之为全局变量,作用范围是整个文件。
3、局部变量:在函数内部定义的变量,称之为局部变量,作用范围函数内部,函数外部无法使用。
4、示例
a=1 #全局变量 def function2(str_1): num=0 print(f"全局变量{a}") for i in str_1: if i in "aeiouAEIOU": num+=1 #局部变量 return num answer=function2("hello") print(f"元音字母个数{answer}")二、global关键字
1、global关键字用于明确告诉Python解释器,在函数中要使用全局变量,使得可以在函数内部修改全局变量的值。
2、示例
a=1 #全局变量 def function2(str_1): num=0 global a #如果不适用global,无法在函数中修改全局变量 a+=1 print(f"修改后的全局变量{a}") for i in str_1: if i in "aeiouAEIOU": num+=1 #局部变量 return num answer=function2("hello") print(f"元音字母个数{answer}") print(a) #使用global后,全局变量发生改变;如果不适用global,全局变量就不会发生改变,函数外部无法访问函数内部的局部变量,a=1三、函数参数
3.1传参方式
1、位置参数:调用时根据函数定义是的位置来传递参数(调用函数时参数顺序与定义函数时参数顺序完全一致)
def function3(name,gender,age,grades): print(f"位置传参:姓名{name},性别{gender},年龄{age},成绩{grades}") return {"name":name,"gender":gender,"age":age,"grades":grades} #位置参数 answer1=function3("张三","男",18,234) print(answer1)2、关键字传参:调用函数时以函数定义时形参名称作为关键字。
def function3(name,gender,age,grades): print(f"关键字传参:姓名{name},性别{gender},年龄{age},成绩{grades}") return {"name":name,"gender":gender,"age":age,"grades":grades} #关键字传参 answer1=function3(grades=345,name="李四",gender="女",age=35) print(answer1)3、优缺点对比
| 优点 | 缺点 | 应用场景 | |
| 位置传参 | 简洁 | 可读性差、容易出错、维护难 | 参数少,不容易混淆 |
| 关键字传参 | 可读性强、维护简单 | 代码不简洁 | 参数多,容易混淆 |
3.2默认参数
1、默认参数也称缺省参数,用于在函数定义时,为参数提供默认值,调用函数时,可以不传递有默认值的参数。如果传递了参数,默认值就不再生效。
2、默认参数必须放在没有默认值的参数列表的后面,一个函数在定义时是可以设置多个默认参数的,
3、示例
使用默认值
def function3(name,gender,age,grades=234): print(f"关键字传参:姓名{name},性别{gender},年龄{age},成绩{grades}") return {"name":name,"gender":gender,"age":age,"grades":grades} #关键字传参 answer1=function3(name="李四",gender="女",age=35) print(answer1)传递了参数,默认值就不再生效
def function3(name,gender,age,grades=234): print(f"关键字传参:姓名{name},性别{gender},年龄{age},成绩{grades}") return {"name":name,"gender":gender,"age":age,"grades":grades} #关键字传参 answer1=function3(name="李四",gender="女",age=35,grades=456) print(answer1)3.3不定长参数
1、不定长参数,用于函数定义及调用时参数个数不确定(0个或多个)的场景。
2、不定长参数-位置传递(*args):传递的所有匹配的位置参数都会被args变量收集,这些参数会合并封装为一个元组,args是元组类型(并不会封装关键字参数)
def function3(*args): return max(args), min(args), round(sum(args)/len(args),2) max,min,avg=function3(34,54,23,5456,8,78,564,563,5,64,5) print(max,min,avg)3、不定长参数-关键字传递(**kwargs):参数是以”键=值“形式传递的关键字参数,这些”键=值“参数都会被kwargs接受,封装为字典类型。
def function3(*args,**kwargs): max_grades=max(args) min_grades=min(args) print(kwargs) if kwargs.get("round") is not None: avg_grades=round(sum(args)/len(args),kwargs.get("round")) if kwargs.get("print"): print(f"最大值{max_grades},最小值{min_grades},平均值{avg_grades}") return max_grades,min_grades,avg_grades print(function3(23,4,34,round=3,print=True))*args:适用于处理数量不确定的数据。
**kwargs:适用于处理数量不确定的选项(用来定制函数行为)
四、函数参数类型
1、普通参数类型:数字、布尔、字符串、列表、元组、集合、字典等。
2、特殊类型:函数
def add(a,b): return a+b def subtract(a,b): return a-b def multiply(a,b): return a*b def Divide(a,b): return a/b def function4(a,b,oper): return oper(a,b) print(function4(1,3,add)) print(function4(2,4,subtract)) print(function4(2,4,multiply)) print(function4(2,4,Divide))五、匿名函数
1、匿名函数指的是没有名称的函数(前面def所定义的函数为命名函数)。
2、匿名函数需要通过lambda表达式来声明函数,可以简化简单函数的编写。
3、语法结构
lambda 参数列表:函数体 lambda x,y:x-y4、匿名函数可以赋值给变量,可以通过变量调用匿名函数
add=lambda x,y:x+y print(add(1,2))5、匿名函数中可以返回结果,也可以不返回结果。返回结果时,不需要写return,表达式的允许结果就是返回结果。