函数定义与参数

函数

函数的定义与调用

'''
1.函数遵循先定义后调用的原则
2.函数在定义阶段只检测语法不执行代码
3.函数体代码只有在调用时才会执行函数体代码,调用的方法时函数名加括号,如果有参数就在括号内传递参数
4.函数名相当于变量名指向的是内存中函数体代码所在的位置
'''
#定义函数
def func():
    print("i am iron man")
#调用函数
func()
>>> i am iron man


函数的分类

内置函数与自定义函数

#内置函数是在python解释器中提前定义好的可以直接调用
eg: len() count()
#自定义函数,即程序员自己定义的函数,自定义函数又分为有参函数和无参函数。

有参函数无参函数与空函数

# 无参函数在函数定义阶段括号内没有参数,调用函数也不需要在括号内写参数
def func():
    print('hello world')
func()
>>>hello world

# 有参函数在定义函数阶段括号内有参数
def func(name):
    print(name)
func('jason')
>>>jason

# 空函数即在定义阶段,函数体代码为pass或者...占位
def func():
    pass
'''
空函数能够在项目初期,罗列出项目的大致功能,让程序整体框架更加清晰,空函数大量的使用在项目前期的功能框架搭建
'''

函数的返回值

#函数的返回值其实就是调用函数之后的返回的结果
eg:
    s = 'hello world'
    print(len(s))  #len的返回值是参数的长度
    >>>11
# 如何操作函数的返回值
1.当函数体代码没有return关键字的之后返回值是None
def func(name):
    print(name)
print(func('jason'))
>>>jason  #大印的结果
>>>None  #返回值的结果
2.当函数体代码写了return但后面没有跟任何值的时候,返回值也是None
def func(name):
    print(name)
    return 
print(func('jason'))
>>>jason
>>>None
3.当函数体代码写了return并且跟了数据那么些什么就返回什么
def func(name):
    print(name)
    return 'hello world'
print(func('jason'))
>>>jason
>>>hello world
4.return后面可以跟多个值用逗号间隔开,会自动组成元组并返回
def func(name):
    print(name)
    return 1,2,'hello'
print(func('jason'))
>>>jason
>>>(1, 2, 'hello')
5.函数体代码遇到return后会立刻结束函数的运行

函数的参数

参数的分类

'''
函数的参数分为两大类:
	1.函数定义阶段括号内写的参数
		被称之为‘形式参数’ 简称为形参
	2.函数在调用阶段括号内写的参数
		被称之为‘实际参数’ 简称为实参
'''

'''
形参与实参的关系:
	形参类似变量名而实参类似变量的值  在调用函数是传入实参,会与形参临时绑定 函数运行结束后接触绑定
'''
def func(name,age):  #  name与age是形式参数
    print(name,age)
func('jason',12)  #  jason与12是实参
'''
实参jason 临时绑定给 name  实参12临时绑定给形参age
	函数体代码运行期间 可以通过形参直接使用到实参
	函数体代码执行完,解除绑定
	解除绑定后 形参name age 处于没有绑定之转台 等待下一次函数调用传入实参进行绑定
'''

位置参数

# 位置形参
在函数定义阶段括号内从左向右依次填写变量名
def func(name,age):  
	print(name,age)
# 位置实参
在函数调用阶段括号内从左向右一次传入真是数据
func('jason',12)  
# 位置参数的特征
1.位置形参与位置实参再绑定的时候是按照从左往右的顺序依次绑定
2.位置形参与位置实参的个数要一致多传少传或者不传都不可以

关键字参数

出现在实参中,指名道姓的给形参传至,不需要遵循位置,但是位置参数必须在关键字参数前面
def func(a, b, c):
    print(a,b,c)
func(b=112,a=123,c=789)  #当实参都是关键字参数使,位置可以随意调换
>>>123 112 789
func(112,c=789,b=456)
func(c=123,456,478)  # 报错
func(789,a=456,b=456)  # 报错
'''
位置实参数必须在关键字实参的前面,一个形参只能绑定一个实参
'''

默认参数

出现在形参中  
在函数定义阶段就已经给行参进行赋值
如果后续不传值则默认使用该值
传入新的值就使用
默认参数必须定义在位置参数后面
默认参数的出现打破了形参与实参之间个数一致的情况
def register(name, age, gender='男'):
	print(f'姓名:{name}年龄:{age}性别:{gender}')
register('jason',28)  # 不传参就使用默认的
register('tom',17,'女')  # 传参就是用传递过来的实参

可变长参数

# 需求:需要定义一个函数,无论串多少参数都不会报错
def func(*args):
    print(a)
func()  
>>>()

func(1,2,3,3,4)
>>>(1,2,3,3,4)
'''
*在形参中可以接受多余的位置参数 并组成元组赋值给*后面的变量名
'''
def func(a,b,*args):
	print(a,b,args)
func(1,2) 
>>>1 2 ()

func(1)  # 报错,因为有两个形参,所有只是要传两个实参
func(1,2,2,2,2,2)
>>>1 2 (2,2,2,2)

'''
**在形参中可以接收多余的关键字参数 并且组织成字典的形式赋值给**后面的变量名
'''
def func(a,b,**kwargs):
	print(a,b,kwargs)
func(a=1,b=2)
>>>1 2 {}
func(a=1,b=2,c=3,d=5)
>>>1 2 {'c':3,'d':5}

可变长形参

# 我们可以使用*和**的组合,定义一个任意类型任意数量的参数都可以接受并正常执行的函数
def func(*args,**kwargs):
    print(args,kwargs)
func()
>>>() {}

func(1,2,a=3,b=4,5) # 报错
func(1,2,a=3,b=4)
>>>(1, 2) {'a': 3, 'b': 4}
'''
*和**并不是关键,后面的变量名可以随便写,但是推荐使用arg和kwargs
'''

补充说明

*和**不单单可以在形参中使用,还可以在实参中使用
def func(*args, **kwargs):
    print(args, kwargs)
# *在实参中,可以将列表或者元组打散成位置参数一一传入
func(*[1,2,3])  等价于 func(1,2,3)
func(*(1,2,3))  等价于 func(1,2,3)
# **在实参中可以将字典打散成关键字参数一一传入
func(**{'name':'jason','age':18,'pwd':123})  
>>>() {'name': 'jason', 'age': 18, 'pwd': 123}

func({'name':'jason','age':18,'pwd':123})   
>>>({'name': 'jason', 'age': 18, 'pwd': 123},) {}
posted @   名字只需六字  阅读(290)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示