为什么要使用函数
- 可以把重复代码写成一个通用模板
- 可以把冗余的代码独立开
把工具事先准备好,下次使用的时候直接拿就行了,函数就是工具
函数格式
def 函数名():
代码块 #此代码块用于实现某一个具体的功能
函数定义格式:
函数名可以与变量名同等看待,也需要和变量名命名规范一样:
- 具有某种意义
- 函数名是用来接收函数返回值
- 函数名命名也是使用字母数字下划线,开头不能为数字和下划线
函数调用格式
使用方法:在想要使用函数时,打出 函数名() 就可以使用这个函数
函数的用分为两个阶段:定义函数与调用函数
在定义函数阶段不会运行其中的代码,只识别语法
在调用函数阶段才会执行函数体代码
定义函数的三种方式
一 无参函数
通俗理解就是在定义函数的时候,函数名的括号里没有东西
def self_max():
x,y = 10,20
if x > y:
print(x)
else;
print(y)
self_max()
二 有参函数
有参函数在def后的函数名括号那里有几个参数,在调用的时候就必须要传入几个参数
def self_max(x,y):
if x > y:
print(x)
else;
print(y)
self_max(100,200)
三 空函数
空函数是指代码块先放着不写,用pass代替,回来再来写他
def self_max()
pass
self_max()
函数的返回值
变量名用来接收变量值,函数名类比于变量名,函数名是用来接收函数返回值的
使用return来接收返回值
- return默认返回None
- return可以返回任意数据类型的数据
- 当return返回多个值的时候,会以元组的形式把多个值包在一起
- return会终止函数
函数参数的应用
定义阶段:定义阶段函数名后括号里的x,y(或者其他)被称为形参,形参具有描述意义类似于变量名,不为具体的数据类型
调用阶段:调用阶段的函数名后括号里的x,y(或者其他)被称为实参,实参必须是具体的数据类型
默认形参:在函数定义阶段,提前赋值给形参,当以实参传值的时候,实参传的值会覆盖原值
关键字实参:在函数调用阶段,找到与形参的对应关系,并赋值给对应的形参,形参名为什么则关键字实参名也必须是什么
默认形参和关键字实参的用法
默认形参:值不需要改变,并且经常使用,默认形参必须跟在位置形参后面
关键字实参:当你的参数非常多的时候,使用关键字实参,关键字实参必须在位置实参后
可变长参数
示例:
def self_max(a,b,c,,e,f,g,h,k,x=1,y=2,z=4):
print(a,b,c,,e,f,g,h,k,x,y,z)
a = [1,2,3,4,5,6,7,8,9] #*会把这个列表内的元素一个一个取出来,然后一个一个传给函数
b = {'x':10,'y':30} #**会把这个字典打散成键值对的形式作为实参传给参数
self_max(*a,**b) #可变长实参
# self_max(1,2,3,4,5,6,7,8,9) #*a的作用
# self_max(x=10,y=30) #**b的作用
可变长形参
def self_max(*args,**kwargs):
print(args) #*args接收了所有的位置实参,然后以元组的方式保存下来,只接受位置参数不接受关键字实参
print(kwargs) #**kwargs接收了所有的关键字实参,然后以字典的形式保存下来
*后必须得写args,**后必须得写kwargs,这是约定俗成的一种规范