-
函数的定义与调用
-
函数的分类
-
函数的返回值
-
函数的参数
函数的定义与调用
1.函数一定要遵循先定义后调用的原则,通俗的说就是定义函数一定要比调用函数的代码先执行
2.函数在定义阶段只检测语法不执行代码
3.函数体代码只有在调用的时候才会执行
调用函数的方法:函数名加括号 #如果有参数则传递参数
4.函数名其实相当于是变量名指向的是内存中函数体代码所在的位置
baby_one() # 运行直接报错,未定义直接调用函数
#定义函数
def baby_one()
print('hey,hoeny')
#调用函数
baby_one()
函数的分类
1.内置函数
python解释器提前定义好可以直接调用的函数
2.自定义函数(程序员自己定义编写的函数)
无参函数
在函数定义阶段括号里没有参数
def index()
print('巫妖王')
index() # 调用无参函数:括号内也不需要写参数
有参函数
在函数定义阶段括号里有参数(类似变量名)
def index(a)
print('不会被封')
index(a) # 调用函数时括号内也必须传参数(类似变量)
空函数
在定义阶段函数体代码使用pass或...占位
def index()
pass
空函数并非无作用 前期能够通过空函数快速罗列程序的大致功能
让程序成体框架清晰 空函数大量的使用于项目前期的功能框架搭建
函数的返回值
#函数的返回值其实就是调用函数之后返回的结果
ee = 'lllllfff'
res = len(ee) #将len函数的返回值赋值给变量res
print(ee)
#如何获取函数的返回值
变量名 = 函数调用
#如何操作返回值
1.当函数体代码没有return关键词的时候 返回值是None
2.当函数体代码写了return但是么有任何值的时候 返回值也是None
3.当函数体代码写了return且跟了数据 那么写了什么就返回什么
如果写的是值那么直接返回值(任意数据类型)
如果写的是变量名那么返回变量名指向的值
4.return后面还可以跟多个值 逗号隔开 会自动组成元组返回
5.函数体代码遇到return会立刻结束函数运行
函数体代码里写return相当于循环体代码里写break
遇到了就立刻结束函数和循环的执行
函数的参数
一.函数的参数分为两大类
1.函数在定义阶段括号内写的参数
称之为'形式参数' 简称:形参
2.函数在调用阶段括号内写的参数
称之为'实际参数' 简称:实参
二.形参和实参的关系
形参类似于变量名 实参类似于变量的值
在调用函数的时候传入实参 会与形参临时绑定
函数运行结束后自动解除绑定
def abb(x,y) # x和y就是abb函数的形参
print(x,y)
abb(22,33) # 22和33就是abb函数的实参
解除绑定后 形参x,y处于没有绑定值的状态 等待下一次函数调用传入实参进行绑定
位置参数
位置形参
在函数定义阶段括号内从左往右依次填写的变量名
位置实参
在函数调用阶段括号内从左往右依次传入的真实数据
位置参数的特征
1.位置形参与位置实参在绑定关系的时候就是按照从左往右的顺序依次绑定
2.位置形参与位置实参的个数一致 多一个不行少一个也不行
关键词参数
出现在实参中
指名道姓的给形参传值 不需要遵循位置
def index(q,w):
print(q,w)
index(q=1,w=2) # 指名道姓的说形参q接收数据1 w接收数据2
index(w=3,q) # 报错 关键词参数必须在位置参数的后面
index(4,q) # 报错 形参只能指向一个实参
index(6,w) # 可以 相当于位置参数
可变长参数
"""需求:定义一个函数 无论传多少位置实参都可以正常执行"""
def func(*a)
print(a)
func() # ()
func(1,2) # (1,2)
func(1,2,3,4,5,6,7) #(1,2,3,4,5,6,7)
"""
*号在形参中
可以接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
"""
def index(a,b,*ag)
print(a,b,ag)
index(44) # 会报错 因为形参ab的存在 意味着index至少要给两个参数
index(1,2) # 1 2 ()
index(1,2,3,4,5,6) # 1 2 (3,4,5,6)
"""
**号在形参中
用于接收多余的关键字参数 并且组成字典的形式赋值给**后面的变量名
"""
def index(a,b,**k)
prnit(a,b,k)
index(a=1,b=2) # 1 2 {}
index(a=1,b=2,c=3,name='xx',age = 18) # 1 2 {'c':3,'name':'xx','age':18}
"""定义一个函数 无论传入多少关键字都可以正常执行"""
def index(**k)
print(k)
index() # {}
index(a=1,b=2,c=3,d=4,e=5) #{'a':1,'b':2,'c':3,'d':4,'e':5}
在定义函数的时候 如果不确定这个函数将来需要多少实参 那么可以采用以下方法
def func(*a,**k)
print(a,k)
func() # () {}
func(1,2,3,name=xx,age=10) #(1,2,3) {'name':'xx','age':10}
*和**在形参中的使用 后面的变量名并不是关键 但针对这两个特殊符号后面的变量名 推荐写法如下
def index(*args, **kwargs)
pass
*和**不仅仅可以在形参中使用 还可以在实参中使用
def index(*args, **kwargs)
print(args,kwargs)
*号在实参中可以将列表或元组打散成为位置参数一一传入
def index(*[11,22,33]) 等价于 index(11,22,33)
def index(*(11,22,33)) 等价于 index(11,22,33)
**号在实参中可以将字典打散成关键字一一传入
def index(**{'age':18})等价于 index(age = 18)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇