zoukankan      html  css  js  c++  java
  • Python3星号 * 的打开方式

    python中,* 号 除了用来做数量乘法,还有其他的用处。

    结论

    • 概括的来说,就是对修饰的变量进行拆分, 对修饰的形式参数进行参数聚集。
    • 单*号,将被修饰的变量按元素方式拆分, 对修饰的形式参数进行参数聚集。
    • 双**号,将被修饰的变量按键值对进行拆分, 对修饰的形式参数进行参数聚集。

    修饰实例变量时

    • 作用: 讲被修饰的实例变量或者可迭代对象进行拆分
    def func3(a, b, c):
        print("param a is {}, param b is {}, param c is {}".format(a, b, c))
    
    
    if __name__ == '__main__':
        arr1 = [1, 2, 3]
        print(arr1, sep='	')   # [1, 2, 3]	 正常输出
        print(*arr1, sep='	')  # 1	2	3 每个数字中间以	分割
    
        arr2 = [[1, 2, 3], [3, 4, 5], [5, 6, 7]]
        print(list(zip(*arr2)))      # [(1, 3, 5), (2, 4, 6), (3, 5, 7)] 二维数组的行转列
    
        dictionary = {'a': 1, 'b': 2, 'c': 3}
        print(dictionary, sep='	')  # {'a': 1, 'b': 2, 'c': 3}	 正常输出
        print(*dictionary, sep='	') # a	b	c	 每个字母中间以	分割
    
    
        print(func3(**dictionary))   # param a is 1, param b is 2, param c is 3

    比较使用和不使用*号后产生的结果就可以发现,单*号将可迭代对象进行了拆分,按单个元素方式依次将数据传进方法。
    配合其他方法使用可以优雅的完成矩阵的行转列操作。

    双**号的使用,是将变量对象拆分成键值对的形式,所以只有dict类型可以使用。
    注意上面的func3,他需要三个形参,但是我们只传入**dict_obj, 就完成了功能。

    可迭代对象有:list, dict, tuple, generator, iterator

    出现在方法的形式参数位置

    • 作用: 放在参数列表的末尾, 作为不定长的参数列表的形参接受对象。 (可以类比Java的可变参数列表)
    def func1(*args):
        print("type", type(args))  # type <class 'tuple'>
        print("all arguments: ", args)  # all arguments:  (1, 2, 3)
        print("second argument: ", args[1])  # second argument:  2
    
    
    def func2(**kw):
        print("type", type(kw))  # type <class 'dict'>
        print("all arguments: ", kw)  # all arguments:  {'a': 1, 'b': 2, 'c': 3}
        print("second argument: ", kw['a'])  # second argument:  1
    
    
    if __name__ == '__main__':
        a, b, c = 1, 2, 3
    
        func1(a, b, c)
        func2(a=a, b=b, c=c)

    尽管函数func1的形参只有一个,但被传递三个参数,程序还是可以正常运行。
    因为*args将三个参数以tuple形式存储,作为一个整体传递给方法func1。

    同理,func2的**kw形参将传入的三个参数压成一个dict进行使用。

    转载于:https://www.cnblogs.com/sight-tech/p/13024882.html

    test
  • 相关阅读:
    静态字段==全局变量
    异常处理原则
    结合冒泡排序学习委托和事件系列一
    Linq详解
    linq的延迟执行和立即执行
    统计一个目录下所有.cs文件的行数
    Multicast委托和Observer模式——委托系列二
    usb设备插入电脑,电脑显示MTP带有黄色感叹号,(Windows已找到设备的去驱动程序,但在尝试安装他们时遇到错误),解决办法
    博客地址变更
    Flex在线阅读 FlexBook FlexPaper
  • 原文地址:https://www.cnblogs.com/liangcr/p/15169562.html
Copyright © 2011-2022 走看看