Python函数

Python函数

函数

为什么用函数?
a.减少代码量 b.保持一致性 c.易于维护

函数的形式:

def test(参数):
函数体
return 返回值

函数的定义:

def:表示函数的关键字;
函数名:以后以后可以根据函数名调用函数,test可以作为函数名;
函数体:做一系列的运算;
参数:给函数提供数据;
返回值:当函数执行完毕后,可以给调用者返回数据,多个返回元祖形式,单个为原形式。

代码:

def test(x):   #x表示形参
    y=2*x+3
    return y
print(test)  #内存地址
print(test(3)) #赋值,打印结果
结果:
<function test at 0x0000000001CED1E0>
9

注意:
避免关键字形参的存在
参数的定义:

实参(实际参数):无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。
形参(形式参数):函数被调用时用于接收实参值的变量。【调用时才占用内存,调用结束会释放内存】

def test(x):       # x代表形参
    y = 2*x+1
    return y
p = test(5)     #5代表实参,给x进行赋值
print(p)
结果:11

位置参数:位置需一一对应【参数缺、多都不可以 且一个形参只能赋一个值】
关键字参数:位置无需固定【参数缺、多都不可以】

def test(x,y,z):
    print('x=%d,y=%d,z=%d'%(x,y,z))
test(1,2,3)# 位置参数
test(y=1,x=3,z=4)# 关键字参数
结果:
x=1,y=2,z=3
x=3,y=1,z=4

默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值
(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

def test(x=1):       # x代表形参,并赋予初始值
    y = 2*x+1
    return y
p = test(5)     #5代表实参,给x重新进行赋值
print(p)
结果:11

参数组(*args列表,**kwargs字典) 非固定长度参数

*args是以元祖的形式表达【除了关键字参数和**字典,其他都可以传】

def test(x, *args):
    # print(x)
    print(args)
    return x

# 只传入x的值,*args默认为空,元组形式
test(1) 
# 传入x的值后,位置关系对应后,2 3 4 5对应*args以元组形式表达  
test(1, 2, 3, 4, 5)   
# 传入x的值后,有一个字典,整体传入
test(1, {"name": "alex"}) 
# 传入x的值后,有一个列表,整体传入 
test(1, ["x", "y", "z"]) 
# 传入x的值后,列表前面加了个*,则表示遍历,逐一出现表达
test(1,*["x","y","z"])  
# 同上,注意表现形式
test(1,*("x","y","z"))  
test({'jerry':123})
test(*({'jerry':123}))
结果:
()              
(2, 3, 4, 5)
({'name': 'alex'},)
(['x', 'y', 'z'],)
('x', 'y', 'z')
('x', 'y', 'z')
()
()

kwargs只能接收关键字参数,如果接收字典的话,在字典前面加上**

*args,**kwargs同时存在,扩展性

def test(x,*args,**kwargs):
    print(x)
    print(args,args[-1])
    print(kwargs,kwargs.get('y'))
#报错,x传了多个值
# test(1,1,2,1,1,11,1,x=1,y=2,z=3)  
#1传给x,中间位置参数给*args,关键字参数给**kwargs
test(1, 1, 2, 1, 1, 11, 1, y=2, z=3)
#1传给x,*[1,2,3]传给*args遍历传,**{'y':1}传给**kwargs
test(1,*[1,2,3],**{'y':1})
结果:
1
(1, 2, 1, 1, 11, 1) 1
{'y': 2, 'z': 3} 2
1
(1, 2, 3) 3
{'y': 1} 1

注意:
优先级别:位置一一对应,如:普通参数,默认参数,*参数,**参数

形参
1)普通参数必须一一对应,必须传;

2)默认参数可传可不传,实参的级别大于形参的级别,位置可以不对应;

3)一个形参只能给他传一次,不能被赋予多个值;

4)args除了关键字参数和**字典,其他都可以传;

5)kwargs 只能接收关键字参数,如果接收字典的话,在字典前面加上**

6)*args与**kwargs不可以对调【注意优先级】

实参
1)普通参数必须一一对应,必须传;
2)默认参数可传可不传,实参的级别大于形参的级别;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值