Python 笔记(05)— 源码函数格式带有 * 和 / 的使用说明

1. max()

我们以内置函数 max 为例进行说明:

max(iterable, *[, default=obj, key=func]) -> value
max(iterable,*[, key, default])

[] 表示里面的形参是可选项,max 函数可被如下几种形式调用:

  • max(iterable)
  • max(iterable,*, key)
  • max(iterable,*,default)
  • max(iterable,*, key, default)

函数形参列表中符号 * 是在 Python 3.8 版本中添加的,它的意思是后面的形参只能为关键字参数(keyword argument),不能为位置参数(positional argument),也就是说,max 函数使用方法:

In [81]: a = [1,2,3,4,5,3,3,2,5]

In [82]: max(a,key=lambda x: a.count(x), default=1)
Out[82]: 3

In [83]: max([],key=lambda x: a.count(x), default=1)
Out[83]: 1

max 有一个 default 参数:

  • 当传入的列表为空时,若参数 default 被赋值,则返回 default
  • 否则,会抛空序列的异常( empty sequence);
In [4]: max([],default='0')
Out[4]: '0'

In [5]: max([])
ValueError: max() arg is an empty sequence

x 表示 a 中的每一个元素, default=1 表示如果输入为空列表时,默认的返回值。

我们可以定义函数 func ,参数 b 位于 * 后面,这样参数 b 就只能为关键字参数:

In [84]: def func(a, *, b):
    ...:     return a + b
    ...:     

In [85]: func(3, 4)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-85-78c794e2c03d> in <module>
----> 1 func(3, 4)

TypeError: func() takes 1 positional argument but 2 were given

In [86]: func(3, b=4)
Out[86]: 7

max 返回最大值:

In [99]: max(3,1,4,2,1)
Out[99]: 4

In [100]: max((),default=0)
Out[100]: 0

In [89]: di = {'a':3,'b1':1,'c':4}
In [90]: max(di)
Out[90]: 'c'

In [102]: a = [{'name':'xiaoming','age':18,'gender':'male'},{'name':'
     ...: xiaohong','age':20,'gender':'female'}]
In [104]: max(a,key=lambda x: x['age'])
Out[104]: {'name': 'xiaohong', 'age': 20, 'gender': 'female'}

2. sum()

sum 函数的函数说明如下:

sum(iterable, start=0, /)

其中, start 表示求和的起始点,默认为 0。看到形参列表中有一个 /,它表示 / 前的参数只能是位置参数,不能是关键字参数。

In [87]: a = [1,2,3,4,5]

In [88]: sum(a)
Out[88]: 15

In [89]: sum(a, 10)
Out[89]: 25

如果使用位置参数调用时就会报错:

In [90]: sum(a, start=10)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-90-08c03d232c88> in <module>
----> 1 sum(a, start=10)

TypeError: sum() takes no keyword arguments
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wohu007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值