欢迎光临散文网 会员登陆 & 注册

【python小技巧2】星号(*)和斜杠(/)的妙用

2023-01-02 23:35 作者:小倪同学0v0  | 我要投稿

先来自测一下:

答案:

如果你感到犹豫,请接着往下看吧。

一、星号的用途

  1. a * b 代表乘法,如 3 * 2 得到 6

  2. a ** b 代表乘方,如 3 ** 2 得到 9

    x ** y <==> pow(x, y)        x ** y % z <==> pow(x, y, z)

    细节:先算乘方后算乘法,且同为乘法从左向右,同为乘方从右向左所以开头的 c 的值是 512 而不是 128,更不是 65536

  3. 函数定义时:

    1. *args 这种写法,称为可变长位置参数。

      额外的位置参数将“吸入”这个args,args是一个元组

    2. **kwargs 这种写法,称为可变长关键字参数。

      额外的关键字参数将以键值对的形式“吸入”这个kwargs中,kwargs是一个字典

      注意:可变长关键字参数 和 可变长位置参数都至多存在一个

      以上两种参数,统称可变长参数

      *args 必须在 **kwargs 前面

    3. def f(a, *, b): pass这种写法

      将后面的所有参数设置为 keyword only argument,即只能用关键字传参。

      这里的 a 两种传参都可以,而 b 只能使用关键字传参。为什么?因为这个 * 虽然没有参数名字,但它将所有额外的位置参数都“吸入”这个 * 里,所以 b 只能用关键字传参

  4. 序列解包 / 拆包

    1. *args 将一个序列展开

    2. **kwargs 将一个字典以键值对形式展开(其实不止字典,任何 mapping 都可以,常见的还有 collections.defaultdict, collections.OrderedDict 以及 collections.Counter 等)

      e.g.

            不仅可以在函数调用时解包传参,也可用在赋值语句等。e.g.

            也可写在左值,用于拆包哦

            注意: 这样写出来的 b 是一个列表,不是元组

    5. 正则表达式

        匹配前面的子表达式 0 次或多次

二、斜杠的用途

  1. a / b 代表 truediv,emmm...将其译为真除吧(网上没找到更好的翻译),返回浮点数,如 11 / 2 得到 5.5

  2. a // b 代表floordiv,即整除,返回整数,如 11 // 2 得到 5

  3. 函数定义时,斜杠前面的参数成为 positional only argument,只能使用位置传参,不能使用关键字。e.g.

总结:

  1. * 用于乘法、乘方等;也用于序列解包拆包;函数定义时作可变长参数标志,将其后面的参数设置为仅关键字参数

  2. / 用于 2 种除法;函数定义时将其前面的参数设置为仅位置参数

END

参考资料:

https://docs.python.org/3.8/tutorial/controlflow.html

以上内容如有错误,欢迎指出!


【python小技巧2】星号(*)和斜杠(/)的妙用的评论 (共 条)

分享到微博请遵守国家法律