1.什么是函数
函数是一段被预定义,并可以被反复执行的 语句块
预定义:提前被声明好
反复执行:可以被反复使用
语句块:多条语句被封装到一起
2.作用
1.用于封装语句块,提高代码的重用性
2.定义用户级别的功能
3.语法
def 函数名(形参列表):
语句块
说明:1.函数的名字就是功能的名称2.函数名的命名规则与变量名相同(标识符)3.函数名是一个变量(不要轻易对其赋值)4.函数有自己的名字空间,在函数外部是不可以访问函数内部的变量的,在函数的内部是可以访问函数外部的变量,但不能修改此变量5.函数如果不需要传参的话,形参列表处可以为空6.语句块不能为空,如果为空的则填充pass占位
View Code
4.函数的调用
函数名(实参列表)
实参:实际参数
5.带参的方法
1.声明
def show_name(name):
#name : 是该方法中需要的一个参数,需要在调用时传递进来辅助函数做运算。所以在声明时不会知道该参数的值是多少,只有在调用时才会确定
print("您的姓名是:",name)
2.调用
show_name("张三丰")
6.函数的返回值 - return 语句
1.什么是返回值
函数结束调用后,要返回给函数调用者的一个值
2.语法
return [表达式]
注:[] 可以省略不写
3.说明
1.return 语句 或 后面的表达式都可以省略,省略后相当于是return None
2.任何函数调用后,都可以接收返回值
如果函数有返回值:则得到对应的返回值
如果函数没有返回值:则得到的就是None
3.返回值如果返回一个序列的话,可以在函数调用处用多个值接收,也可以用一个值接收
7.函数的参数传递
1.传递方式
1.位置传参
序列传参
2.关键字传参
字典传参
2.位置传参
实际参数(实参)的对应关系与形式参数(形参)的对应关系是按照位置来依次对应的
def sum(a,b,c):
pass
sum(1,2,3)
说明:
1.形参和实参是通过位置进行传递和匹配的
2.实参的个数必须与形参的个数相同
3.序列传参 - 位置传参
序列传参是指在函数调用过程中,用 * 将序列拆解后按位置进行传递的传参方式
语法:
1.以序列作为实参的值传递给函数
序列:列表,元组,字符串
2.在序列前用 * 表示是序列传参
def show(a,b,c):
pass
show(*["AAA","BBB","CCC"])
4.关键字传参
关键字传参是指传参时,按照形参的名称给形参赋值
形参和实参是按照名称进行匹配的
5.字典关键字传参 - 关键字传参
字典关键字传参是指实参为字典,将字典用 ** 拆解后再进行关键字传的一种方式
说明:1.字典的键名和形参名必须一致2.字典的键名必须为字符串3.字典的键名在形参中必须存在
View Code
6.函数的综合传参
函数的传参方式在能确定形参能唯一匹配到相应的实参的情况下任意组合
说明:
位置传参(序列传参) 在要 关键字传参(字典关键字传参) 的左侧
示例:defshow(a,b,c):pass
#有以下调用方式
show(100,200,300)
show(100,*[200,300])
show(*(100,200),300)
show(*[100],200,*(300,))
show(100,c=200,b=300) #正确
show(300,a=200,b=100) #错误
show(c=200,b=300,100) #错误
show(100,**{'c':300,'b':200}) #正确
View Code
8.函数的缺省参数
声明函数的时候,可以为形参指定默认值,在调用函数的时候,有默认值的参数可以不传参
语法:
def 函数名(形参名1=默认值1,形参名2=默认值2,...):
pass
注意:
缺省参数必须自右至左依次存在,如果一个参数有缺省值得话,那么其右侧的所有参数都必须由缺省值
def fun1(a,b=10,c):
pass
以上声明是错误的
def fun1(a,c,b=10):
pass
以上声明时正确的
8.函数形参的定义方式
1. 位置形参
2. 星号元组形参
3. 命名关键字形参
4. 双星号字典形参
1.位置形参
语法:
def 函数名(形参名1,形参名2,...):
语句块
2.星号元组形参
1.作用
收集多余的位置传参
2.语法
def 函数名(*元组形参名):
语句块
3.命名关键字形参
1.作用
强制所有的参数都必须使用关键字或字典关键字传参
2.语法
def 函数名(*,命名关键字形参):
语句块
或
def 函数名(*args,命名关键字形参):
语句块
4.双星号字典传参
1.作用
收集多余的关键字参数到一个字典中
2.语法
def 函数名(**字典形参名):
pass
注意:字典形参名通常都会被命名为 kwargs
5.函数的参数说明
位置参数,缺省参数,星号元组形参,双星号字典形参 可以混合使用
函数的形参从左至右的顺序如下:
位置形参
星号元组形参
命名关键字形参
双星号字典传参
示例:
def func(a,b,*args,c,**kwargs):
pass
func(100,200,300,400,c="China",d="D",j="Japan")
a = 100
b = 200
args = (300,400)
c = "China"
kwargs = {
'd' : 'D',
'j' : 'Japan',
}
6.函数的不定长参数
1.作用
可以接收任意的位置传参和关键字传参
2.语法
由 星号元组形参 和 双星号字典形参 共同组成
def func(*args,**kwargs):
pass
func(100,200,300)
func(name='zsf',age=35,gender='男')
func(100,200,name='zwj',age=35)
1.局部变量 - local variable
1.定义在函数内部的变量就是局部变量
2.函数的形参也是局部变量
3.局部变量只能在函数内部使用
4.局部变量在函数调用时才会被创建,调用之后会自动销毁
2.全局变量 - global variable
1.定义在函数外部,模块(xx.py)内部的变量就是全局变量
2.所有的函数都可以访问全局变量,但函数内不能直接赋值
3.globals() / locals() 函数
globals() 返回当前全局变量所组成的字典
locals() 返回当前局部变量所组成的字典
1.函数名是变量,它在def语句创建函数时绑定一个函数
2.一个函数可以作为另一个函数的实参进行传递
defmyinput(fn):
L= [1,3,5,7,9]returnfn(L)print(myinput(max)) --> max([1,3,5,7,9])print(myinput(min)) --> min([1,3,5,7,9])print(myinput(sum)) --> sum([1,3,5,7,9])
View Code
函数的嵌套定义时指一个函数里面用def语句来创建其他的函数的情况
1.什么是作用域
作用域也叫名字空间-namespace,是访问变量时查找变量名的访问空间
2.Python四个作用域
作用域 英文解释 英文缩写
1.局部作用域(函数内) Local(function) L
2.外部嵌套函数作用域 Enclosing function locals E
3.函数定义所在模块作用域 Global(module) G
4.Python内建模块的作用域 Builtin(Python) B
变量的查找规则:
访问变量时:
首先去局部作用域中查询(搜索本地变量)
其次在外部嵌套函数作用域内查找(包裹此函数的外部函数内)
之后在函数定义所在模块作用域查找(全局变量)
最后在Python内建模块作用域中查找(内建变量)
即:L ---> E ---> G ---> B
默认情况下,使用变量时从当前所在的作用域中查找
3.global 语句
作用:
1.告诉解释器,global语句声明的一个或多个变量的作用域为模块级作用域,也就是全局变量
2.全局声明(global)将赋值语句操作的变量映射到模块文件内部的作用域