函数的定义
- 函数的功能:包裹一部分代码, 实现某一个功能 达成某一个目的
特点: 可以反复调用,提高代码的复用性,提高开发效率,便于维护管理
函数的基本格式
函数的定义:
def 函数名():
code1
code2
函数的调用
函数名()
# 定义函数
def func():
print("我是一个函数"):
# 调用函数
func()
# 函数的命名
'''
函数命名
字母数字下划线,首字母不能为数字
严格区分大小写,且不能使用关键字
函数命名有意义,且不能使用中文哦
'''
# 驼峰命名法:
'''
大驼峰命名法:
每个单词的首字符大写(类:面向对象)
mycar -> MyCar
小驼峰命名法:
除了第一个单词的首字符小写外,剩下的每个单词首字符大写
mycar -> myCar
常用:
mycar ->my_car
'''
函数的参数
'''
参数:
(1)形参:形式参数,在函数的定义处
(2)实参:实际参数,在函数的调用处
形参:普通参数(位置),默认参数,普通收集参数,命名关键字参数,关键字收集参数
func(a,b = 0,*args,c,**kwargs)
实参:普通参数,关键字参数
遵循原则:
形参和实参要一一对应
'''
普通形参
def func(a,b):
print(a,b)
func(1,2) # a,b为接受普通实参
默认形参
def func(a,b =4):
print(a,b)
#func(1) #1,4
func(2,3) # 2,3
# 不传入参数则使用默认参数,传入则替代原有的默认形参
关键字参数(必须要有和它相对应的关键字实参)
# 关键字参数是指对具体的某个参数赋值,具体的顺序可以打乱
def func(a,c = 1):
print(a,c)
# 赋值给关键字实参 3
func(1,c = 3) # 打印 1 3
普通实参 + 关键字实参
def func(hang, a, b, lie=10):
i = 0
while i < hang:
j = 0
while j < lie:
print("*", end="")
j += 1
print()
i += 1
print(hang,a,b,lie)
# 函数的调用处
"""关键字实参必须跟在普通实参的身后,顺序是一定的"""
func(1,3,4,lie = 31)
区分 默认形参和 关键字参数
def func(a,b= 0,top= "good good study"):
print(a,b,top)
func(1,2,top="haha")
# func(1,2,lower="haha") # error
'''默认形参和关键字实参在写法上一模一样
一个是在函数的定义处
一个在函数的调用处
默认形参传入的时候只是根据顺序传入数据,关键字实参的名必须和关键字形参的名相同
关键字实参如果不能和关键字形参的名对应,则报错
'''
命名关键字参数
'''
定义命名关键字参数的两种方式
(1) def func(a,b,*,c) # c是命名关键字参数
(2) def func(a,b,*args,c,**kwargs)
在函数调用时,必须使用命名关键字参数来进行赋值
'''
# 定义方式一
def func(a, b, *, d, c): # 这里的*并不是*args
print(a, b)
print(d)
print(c,)
func(1, 2 ,d=3, c=10)
# 方式二
def func(*args,a,**kwargs):
print(args,a,kwargs)
func(1,2,a = 111,b = 33)
关于 *和 **的使用
- 和**在函数的定义处,是用来收集数据,打包
- 在函数的调用出,用来做打散操作,解包
# *的使用
def func(a,b,*args):
print(a,b,args)
li = [1,2,3] # 这里的li可以为所有容器类型
func(*li) # *在调用处把列表中的元素拿出来,拼装成键=值的参数形式,赋值给func进行调用
# **的使用
def func(a,b,c = 1,**kwargs):
print(a,b,c,kwargs)
li = {"c":3,"d":4}
func(1,3,**li) # **把字典里面的所有元素拿出来,拼装成键=值的参数形式,赋值给func进行调用
func(1,3,c=3,d=4)
收集参数
普通收集参数:专门收集多的没人要的普通实参
def func():
code
*args => arguments(参数)
在args这个参数的前面加上一个*表达普通收集参数,形成一个元组
关键字收集参数:专门收集没人要的关键字实参
def func(**kwargs):
code1...
**kwargs => keyword arguments
在kwargs参数的前面加上2个**表达关键字收集参数,形成一个字典