python3从头开始学-函数 08

python 定义一个函数语法如下:

def 函数名(参数列表)
	函数体
	[return[表达式] ]

函数参数有以下几种
1.必须参数
2.关键字参数
3.默认参数
4.不定长参数

1.必须参数
>>> def func(a):
    print(a)

    
>>> func()
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    func()
TypeError: func() missing 1 required positional argument: 'a'
>>> func(8)#调用的时候必须有参数
8 
2.关键字参数

关键字参数允许函数调用时参数的顺序与声明时不一致

>>> def func2(a,b):
    print(a,b)

    
>>> func2(a=8,b=9)
8 9
>>> func2(b=9,a=8)
8 9
3.默认参数

当函数调用的时候,不传入参数,就是使用默认参数,传入参数就使用传入的参数

>>> def func3(name,age=20):
    print(name,age)

    
>>> func3(name="无名")
无名 20
>>> func3(name="无名",age=18)
无名 18
>>> 
4.不定长参数

这个不定长参数好多面试上面问问道,或者面试题目上有,这个是重点,*args,调用函数传入的参数,在函数里面会以元组的形式来用,**kwargs 这个传入参数,会已字典形式,这样的函数可以传入参数,也可不传,不传的话默认两个(),{}空的

>>> def func4(*args,**kwargs):
    print(args,kwargs)

    
>>> func4(12,34)
(12, 34) {}
func4(12,34,a=1,b=2) #可以这样
>>> func4(12,34,a=1,b=2)
(12, 34) {'a': 1, 'b': 2}
>>> func4(a=1,b=2,12,34)# 这样调用报位置参数错误
SyntaxError: positional argument follows keyword argument

5.所有参数一起总结

当有必须参数,关键字参数,*args,kwargs的时候
调用的时候,必须是必须参数在最前面,然后就是关键字参数,*参数,最后才是
参数。此时定义的默认参数是不生效的

>>> def func5(a,b,age=18,*args,**kwargs):
    print(a,b,age,args,kwargs)
>>> func5(1,2,20,5,6,7,8,c=5)
1 2 20 (5, 6, 7, 8) {'c': 5}
>>> func5(1,2,5,6,7,8,c=5,d=6)
1 2 5 (6, 7, 8) {'c': 5, 'd': 6}
>>> func5(1,2,20,5,6,7,8,b=5)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    func5(1,2,20,5,6,7,8,b=5)
TypeError: func5() got multiple values for argument 'b'
6.return

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式

7.强制参数位置

Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。

在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)

8.匿名函数

python 使用 lambda 来创建匿名函数。

1.所谓匿名,即不再使用 def 语句这样标准的形式定义一个函数。

2.lambda 只是一个表达式,函数体比 def 简单很多。

3.lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

4.lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

5.虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值