函数
函数是组合好的,可以重复使用的,用来实现单一或相关联功能的代码片段
作用
能提高应用的模块性和代码的重复利用率
函数的创建
第一函数的规则
1.函数代码块一def关键字开头,后接函数标识符名称和圆括号‘()’
2.所有传入的参数和自变量都必须在圆括号中,可以在圆括号中定义参数
3.函数的第一行语句可以选择性使用文档字符串,用于存放函数说明
4.return【表达式】结束函数,选择性返回一个调用方,不带表达式的return相当于返回None
语法
def 函数名(参数列表)
函数体
函数的调用
函数的参数
参数分类:位置参数、序列参数、关键字参数、默认参数、字典关键字参数、综合传参
形参:(形式参数)
在def定义函数是函数名后面的括号里的变量成为形式参数
实参:
在函数调用时提供变量或称为实际参数
1. 位置传参
定义:
实际参数(实参)的对应关系与形式参数(形参)的对应关系是按位置来一次对应的
示例:
def Student(name,age,sex):
print(‘姓名’,name)
print(‘年龄’,age)
print(‘性别’,sex)
Student(‘小明’,15,’男’)
说明:
序列传参是,序列拆解的位置将与形参一一对应
序列的位置信息对应相应的形参位置
2. 序列传参
序列传参是指在函数调用周期中,用*将序列拆解后按位置进行传递的传参方式
3. 默认传参
调用函数时,如果没有传递参数,就会使用默认参数
使用默认参数,就是在定义函数时,给参数一个默认值,如果没有给调用的函数的参数赋值,调用的函数就会使用默认的这个默认值
注意:
当对默认参数传值时,函数执行时调用的是我们传入的值
默认参数一定要放在非默认参数的后面
4. 关键字参数
示例:
def Student(name,age,sex):
print(‘姓名’,name)
print(‘年龄’,age)
print(‘成绩’,score)
Student(‘小明’,age=15,score=20)
5. 字典关键字传参
定义:
是指实参为字典,将字典用‘**’拆解后再进行关键字传参的传参方式
说明:
字典的键名和形参名必须一致
字典的键名必须为字符串(标识符)
字典的键名要在形参中存在
示例:
def Student(name,age,sex):
print(‘姓名’,name)
print(‘年龄’,age)
print(‘成绩’,score)
# Student(‘小明’,age=15,score=20)
D = {‘name’:’小明’,’age’:15,’score’:20}
Stuident(**D)
6. 函数的综合传参
定义:
函数的传参方式在能确定形参能唯一匹配到相应实参的情况下可以任意组合
说明:
位置传参(序列传参)要在关键字传参(字典关键字传参)的左侧
def Myfun1(a,b,c)
print(a,b,c)
Myfun1(100,*[200,300])
Myfun1(*(100,200),300)
Myfun1(100,c=300,b=200)
Myfun1(100,**(‘c’:300,’b’:200))
函数分类
1. 有参函数与无参函数
示例:
总结:函数内可变的内容可以用参数替代,不可变内容不能用参数替代
2. 有返回值的函数与没有返回值的函数
练习:
写一个函数minmax(a,b,c)有三个参数,返回这三个参数中的最小值和最大值
要求,形成元组,最小值在前,最大值在后
1 def minmax(a,b,c): 2 x=min(a,b,c) 3 y=max(a,b,c) 4 return x,y 5 dl=minmax(50,20,15) 6 print(dl)
1. 星号元组形式
语法:
def 函数名(*元组形参名)
语句块
或
def 函数名(*args,命名关键字形参)
作用:
强制所有的参数都必须
2. 命名关键字形参
语法:
def函数名(*,命名关键字形参),
语句块
或 def 函数名(*args, 命名关键字形参):
作用:
强制所有的参数都必须用关键字传参或字典关键字传参
3. 双星号字典形成
语法:
Def 函数名(**字典形参名)
语句块
作用:
收集多余的关键字传参
说明:
字典形参名通常命名为‘kwargs’
函数的参数说明
位置形参,默认参数,星号元组形参,双星号字典形参可以混合使用,函数形参自左至右的顺序为:
位置形参
星号元组形参
命名关键字形参
双星号字典形参
函数的不定长参数:
星号元组形参,双星号字典形参
说明:
可以接受任意的位置传参和关键字传参
练习:
写一个函数,mymax类似与内置函数max
详见:
>>>help(max)
仿造max写一个mymax函数,功能与Max完全相同
1 def mymax(a,*args): 2 if len(args)==0: #实参个数等于1 3 zhemax=a[0] 4 for x in a: 5 if x>zhemax: 6 zhemax=x 7 return zhemax 8 else: 9 zhemax=a 10 for x in args: 11 if x>zhemax: 12 zhemax=x 13 return zhemax 14 print(mymax([6,8,35,5])) 15 print(mymax(100,200))
变量作用域
作用域:变量的命名空间
最基础的两种变量作用域:局部变量和全局变量
1. 局部变量
定义:
1. 定义在函数内部的变量被称为局部变量(函数的形参也是局部变量)
2. 局部变量只能在函数内部使用
3. 局部变量在函数调用时才能创建,在函数调用之后就会自动销毁
2. 全局变量
定义:
定义在函数外部,模块内部的变量称为全局变量
全局变量所有函数都可以直接访问(单函数不能对其进行赋值)
3. globals()/locals()函数:
globals()
返回当前全局作用域内变量的字典
locals()
返回当前局部作用域内变量的字典
4. 函数变量
函数名是变量,它在def语句创建函数时绑定个函数
一个函数还可以作为另一个函数的实参进行传递
函数还可以作为另一个函数的返回值
5. python的作用域
作用域也叫名字空间,是访问变量是查找变量名的范围空间
L E G B
L 局部作用域(函数内)
E 外部嵌套函数作用域
G 函数定义所有模块(文件作用域)
B Python内建模块的作用域
6. global语句
1.global语句
作用
1、告诉解释执行器globa1语句声明个或多个变量,这些变量的作用域为模块级的作用域,也称作全局变量。
2、全局声明(globa1)将赋值语句操作的变量映射到模块文件内部的作用域
语法
global 变量1,变量2 ,... ...
说明
1. 全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为创建局部变量)
2. 全局变量在函数内部不经过声明就可以直接访问(变量已经存在并关联一个对象)
3. 不能先声明局部变量,再用global声明为全局变量, 此做法不符合规定
4. globa1变量列表里的变量名不能出现在此作用域的形参列表里异常操作
异常操作
1. 错误的定义和特征
什么是错误:错误是指由于逻辑或语法等导致一个程序无法正常执行的问题
错误的特征:有些错误无法预知
2. 异常的定义
异常是程序错误是表示的一种状态
当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并回去为正常状态
语句
1.try:
1.try-execpt语句
try:
可能触发异常的语句
execpt 错误类型1 [as 变量1]
异常处理语句1
except 错误类型2 [as 变量2]:
异常处理语句2
except(错误类型3, 错误类型4, ... ...)[as 变量 3]
异常处理语句3
except :
异常处理语句(其他)
else:
未发生异常的语句
finally:
最终语句
作用
尝试捕获异常,将程序由异常状态转为正常状态并正常执行
示例:
try – except语句说明:
1. as子句是用于绑定错误对象的变量,可以省略
2. except子句可以有一个或多个,但至少要有一个
3. else子句最多只能有一个,也可以省略不写
4. finally子句最多只能有一个,也可以省略不写
5. else子句的语句将在try语句没有发生异常时被执行
6. finally子句的语句在任何情况下都会被执行