1、函数
1.1 定义:函数是可以重复执行的语句块,可以重复的调用
1.2 作用:
·用于封装语句块,提高代码的重用性
·定义用户级别的函数
1.3 def 语句
1.3.1 语法:
def 函数名(形参列表):
语句块(代码块)
函数名变量 = 函数名()
1.3.2 作用:
用语句块创建一个函数,并用函数名变量绑定这个函数
1.3.3 语法说明:
·函数名是变量,它用于绑定语句块
·函数有自己的名字空间,在函数外部不可以访问函数内部的变量,在函数内部可以访问函数外部的变量
(要让函数处理外部的数据需要用参数给函数传入一些数据)
·函数不需要传入参数时,形参列表可以为空
·语句部分不能为空,如果为空需要填充pass语句
2、函数调用
2.1 语法:
函数名(实际调用传递参数)
注: 实际调用传递参数 即实参
2.2 说明:
函数调用是一个表达式
如果函数内部没有return语句,则函数执行完毕后返回None对象
2.3 示例
1)示例1:
写一个函数 myadd,此函数中的参数列表里有两个参数x,y, 此函数的功能是打印x+y的和
def myadd(x,y):
print(x+y)
myadd(100, 200)
myadd("ABC", '123')
输出如下:
300
ABC123
2)示例2:
写一个函数 print_even, 传入一个参数n代表终止整数, 打印 2 4 6 8 … n之间的所有偶数
def print_even(n):
for i in range(1,n+1):
if i%2 ==0:
print(i,end = ' ')
print_even(15)
输出如下:
2 4 6 8 10 12 14
3、return 语句
3.1 语法:
return [表达式]
注: []代表可以省略其中的内容
3.2 作用:
用于函数中结束当前函数的执行,返回到调用该函数的地方,同时返回一个对象的引用关系
3.3 说明:
·return 语句后跟表达式可以省略,省略后相当于 return None
·如果函数内没有 return 语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条return None语句)
3.4 示例:
1)示例1:重写一个函数myadd2, 实现返回两个数的和:
def myadd2(a, b):
return a+b
# 因为用int将输入的字符串转为整型,所以输入必须是整数,否则报错
a = int(input("请输入第一个数: "))
b = int(input("请输入第二个数: "))
print("您输入的两个数之和是: ", myadd2(a, b))
运行结果如下:
请输入第一个数: 22
请输入第二个数: 33
您输入的两个数之和是: 55
2)示例2: 写一个函数mymax, 实现返回两个数的最大值:
def mymax(a, b):
return max(a,b)
print(mymax(100, 200))
print(mymax("ABCD", "ABC"))
输出如下:
200
ABCD
4、python 函数的参数传递
传递方式:
·位置传参
·序列传参
·关键字传参
·字典关键字传参
4.1 位置传参:实际参数(实参)的对应关系与形式参数(形参)的对应关系是按位置来依次对应的
4.1.1示意:
def mymin(a,b,c):
pass
mymin(1,2,3) #1,2,3=a,b,c
4.1.2说明:
实际参数和形式参数通过位置进行传递和匹配
实际参数的个数必须与形式参数的个数相同
4.1.3 示例:
def mymin(a, b, c):
print(a,b,c)
mymin(1, 2, 3) #输出: 1 2 3
4.2 序列传参:序列传参是指在函数调用过程中,用 * 将序列拆解后按照位置进行传参的传参方式
4.2.1 说明:
序列传参时,序列拆解的位置将于形参一一对应,
序列的位置信息对应相应的参数位置
4.2.3 示例
def myfun(a,b,c):
print(a,b,c)
s1 = [11,22,33]
myfun(*s1)
# 与如下函数效果相同:
def myfun(s):
for i in s:
print(i,end = ' ')
s = [11,22,33]
myfun(s)
输出如下:
11 22 33
4.3 关键字传参:
关键字传参是指传参时,按着形参的名称给形参赋值
实参和形参按照名称进行匹配
4.3.1 示意:
def myfun(a,b,c):
pass
myfun(b=22,c=33,a=11) # 将会按照名称进行匹配
4.3.2 说明:
实参和形参按着形参名进行匹配,可以不按照位置进行匹配
4.3.4 示例
def myfun(a, b, c):
print(a,b,c) # 输出 11 22 33
myfun(b=22,c=33,a=11)
4.4 字典关键字传参:字典关键字传参是指实参为字典,将字典用 ** 拆解后进行关键字传参的方式
4.4.1 说明:
字典的键和形参名一致
字典的键名必须为字符串(且为标识符的命名方式)
字典中的键要在形参中存在
4.4.2 示例
def my_dict(a,b,c,d):
print(a,b,c,d) # 输出:1 2 3 4
a = {"a":1,"b":2,"c":3,"d":4}
my_dict(**a)
5、函数的综合传参
5.1 函数的传参方式:
在能确定形参能唯一匹配到相应实参的情况下可以任意组合,但 函数的位置传参要先于关键字传参
5.2 说明:
5.2.1 位置传参和序列传参可以混合使用 且可以顺序颠倒
如;
myfun(100,*[200,300])
myfun(*[100,200],300)
myfun(*[100,],200,*[300])
5.2.2 函数的关键字传参和字典关键字传参可以混合使用,且可以顺序颠倒
如:
myfun(c=300,**{"b":200,'a'})
myfun(**{'b':200,'c':300},a=100)
5.2.3位置传参和关键字传参可以混合使用,但位置传参要先于关键字传参:
如:
myfun(100,c=200,b=20)
myfun(10,c=30,***{"b":20})
6、函数的缺省参数
6.1 语法:
def 函数名(形参名 = 默认实参1 , 形参名2 = 默认实参2,……):
语句块
6.2 示例:
def info(name='小明'):
print("我的名字是",name)
info()
info('王花花')
输出:
我的名字是小明
我的名字是王花花
6.3 说明:
·缺省参数必须自左至右依次存在,如果一个参数有缺省参数,择其右侧的所有参数都必须是缺省参数
·缺省参数 可以有0个或多个,甚至全部都可以为缺省参数
7、函数形参的定义方式 ##
·位置形参
·星号元组形参
·命名关键字形参
·双星字典形参
7.1 位置形参
def 函数名(形参名1,形参名2,……):
pass
7.2 星号元组形参
7.2.1 语法:
def函数名(*元组形参名):
语句块
7.2.2 作用:收集多余的位置形参
7.2.3 说明:元祖形参一般命名为 ‘args’
7.2.4 示例
1)示例1:
def fx(a,b,*args):
print("形参的个数是",len(args)+2)
fx(1,2.3)
fx(1,2,3,4,5,6,7,8,9,10)
输出为:
形参的个数是 2
形参的个数是 10
2)示例2
def mymax(a,*args):
if not args:
args = tuple(a)
else:
args = list(args)
args.append(a)
args = tuple(args)
max_ = 0
for i in range(len(args)):
if args[i]>=max_:
max_ = args[i]
return max_
print("最大值为:",mymax([6,8,3,5]))
print("最大值为:",mymax(100,200))
print("最大值为:",mymax(1,3,5,9,7))
输出为:
最大值为: 8
最大值为: 200
最大值为: 9
7.3 命名关键字形参
7.3.1 注意:
* 是位置形参和关键字形参的分割符
*args 与 * 互斥,形参中只能有一个
7.3.2 语法:
def 函数名(*,命名关键字形参):
语句块
或
def 函数名(*args,命名关键字形参):
语句块
7.3.3 作用:
强调所有关键字必须用关键字传参或者字典传参
7.3.4 示例
示例1:
def myfun(*,c,d):
print(c,d) # 3 4
myfun(c=3,d=4)
# myfun(3,4) # 出错TypeError
示例2:
def fun(a,b,*,c,d):
print(a,b,c,d)
# print(fun(1,2,3,4)) # 出错
print(fun(1,2,c=3,d=4)) # 1 2 3 4
示例3
def fun(a,*args,b):
print(args) # args : 2 3 4 5
fun(1,2,3,4,5,b=6)
7.4 双星号字典形参
7.4.1 语法:
def 函数名(**字典形参名)
语句块
7.4.2 作用:收集多余的关键字传参
7.4.3 说明:字典形参一般命名为kwargs
7.4.5 示例:
def fun(a,**kwargs):
print(kwargs)
fun(a = 1,b = 2,c = 3,d = 4)
输出:
{'b': 2, 'd': 4, 'c': 3}
7.8 函数的参数说明:
位置形参,缺省参数,型号元组形参,双星号字典形参等可以混合使用
7.8.1 函数参数自左至右的顺序为:
1)位置形参
2)型号元组形参
3)命名关键字形参
4)双星号字典形参
7.8.2 示例:
def fn(a, b, *args, c, **kwargs):
print('a = ',a)
print('b = ',b)
print('arge = ',args)
print('c = ',c)
print('kwargs = ',kwargs)
fn(100, 200, 300, 400, d="D", e='E',c = "C")
输出如下:
a = 100
b = 200
arge = (300, 400)
c = C
kwargs = {'d': 'D', 'e': 'E'}