• Python: 你所不知道的星号 * 用法


    以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s/FHyosiG_tegF5NRUEs7UdA


    本文大概 1152 个字,阅读需花 6 分钟
    内容不多,但也花了一些精力
    如有余力,欢迎点赞收藏分享,谢谢!
    

    铃铃铃…… 上课了
    
    老师在黑板写着这么一个标题 《Python: 你所不知道的星号 * 用法》
    
    同学A:
        呃,星号不就是用来做乘法的嘛,这个还有必要专门列出来吗?
    
    同学B:
        老师这会又在卖关子了?
    
    同学C忍不住嗦地一声站起来喊:
        难道写代码还得强行找理由秀一波星星吗?
    
    老师:
        这位同学,你太优秀了,先坐下。
        平常对于星号的应用场景用得少是不需要了解太多用法的。
        不过,学编程的过程少不了要去阅读优秀的源代码库,
        也就时常会对星号 * 的贸然出现和用途感到困惑,
        所以今天就让你们好好了解一下会有哪些用法,
        不要求全记住,略懂一二即可,略懂。。。
    

    这里尝试总结一波python里的星号* 用法,如有写得不到位,欢迎评论区交流!看下文...

    数值乘法

    最常见的用法,星号用在两个数之间实现两个数的乘法计算

    e.g.

    mul = 1 * 2
    print(mul)
    

    Output:

    2
    

    成员倍增器

    如果星号前面的操作数是序列,比如列表、元组、字符串等,后操作数是n,那么是对序列的成员倍增,列表的成员数量会变成原来的n倍。

    e.g.

    list = ['hello'] * 2
    print(list)
    

    Output:

    ['hello', 'hello']
    

    幂运算

    两个星号 ** 表示对星号前面的操作数执行后面操作数的幂运算,简单点说就是求多少次方的计算。

    e.g.

    print(10 ** 3)
    

    Output:

    1000
    

    提取操作符

    有时候在打印数据时,需要对原始数据进行输出,并且在数据之间插入一些分隔符。一般想到的是用循环处理,但是看起来语句有些啰里啰唆的。

    e.g.

    print(' '.join(['sunday', 'monday', 'tuesday', 'wednesday']))
    print(' '.join('helloworld!'))
    

    Output:

    sunday monday tuesday wednesday
    h e l l o w o r l d !
    

    在这里要介绍的是更方便的方法,那就是用星号对迭代类型数据做提取处理。

    1. 单星号 * 操作

    调用函数时,在输入参数前添加星号 * 可以对参数执行提取操作,比如对列表、元组、字符串等迭代类型的输入参数做提取之后,迭代类型的数据元素会被逐个取出。

    e.g.

    print(*'list')
    

    Output:

    l i s t
    

    e.g.

    print(*['hello', 'world', '!'])
    

    Output:

    hello world !
    

    在字典类型数据前添加单个星号 *,仅对字典数据键部分执行提取,然后以位置参数的形式输入函数。

    def foobar(param1=None, param4=None):
        return "{}{}".format(param4, param1)
    
    values = {"param1": "foo", "param2": "bar"}
    
    print(foobar(*values))
    

    Output:

    param2param1
    

    2. 双星号 ** 操作

    在字典类型数据前添加两个星号 **,对字典数据执行提取,然后以关键字参数的形式输入函数。

    def foobar(param1=None, param4=None):
        return "{}{}".format(param4, param1)
    
    values = {"param1": "foo", "param4": "bar"}
    
    print(foobar(**values))
    

    Output:

    barfoo
    

    函数参数修饰符

    1. 添加星号 * 在函数的参数前时,表示该参数是不定数量的位置参数。

    很多时候向函数输入的位置参数是不定数目的,这样子就可以借助星号修饰符来表述了。在函数内该参数存储的数据被构造成元组类型,也就是说传入的不定参数被包含在元组内。

    e.g.

    def add(*args):
        return sum(args)
    
    print(add(1, 2, 3, 4, 5))
    

    Output:

    15
    
    1. 添加两个星号 ** 在函数的参数前时,表示该参数是不定数量的关键字参数。

    向函数输入的不定数目的参数除了可以是位置参数之外,也可以是关键字参数。这个时候就不能用单个星号做修饰符了,而是双星号 **,比如 **kwargs。

    在函数内该不定数目参数存储的数据属于字典类型,也就是说传入的不定参数被包含在字典内。

    e.g.

    def food_type(**kwargs):
        for item in kwargs:
            print(f"{kwargs[item]} belongs to {item}")
    
    food_type(fruit = 'apple', meat = 'animal', vegetable = 'potato')
    

    Output:

    apple belongs to fruit
    animal belongs to meat
    potato belongs to vegetable
    

    好了,简简单单介绍完毕,你看懂了吗?如果没有就留个言吧,我改总可以了吧?

  • 相关阅读:
    C语言之自定义类型------结构体
    什么是图神经网络
    【HTML/CSS学习】margin和padding的区别
    YOLOv8 快速入门
    使用 TiUP 部署运维 TiDB 线上集群
    tail -f 与 tailf 的区别
    Android | 再探 RecyclerView 之名词解析
    机器视觉-相机选型-20220819-持续修改
    Ubuntu 23.04存在一个32位程序支持错误
    【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二)
  • 原文地址:https://www.cnblogs.com/englyf/p/16931223.html