您的位置:首页技术文章
文章详情页

python 星号(*)的多种用途

【字号: 日期:2022-07-10 15:15:55浏览:2作者:猪猪

结论

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

修饰实例变量时

作用: 讲被修饰的实例变量或者可迭代对象进行拆分

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=’t’) # [1, 2, 3]t 正常输出 print(*arr1, sep=’t’) # 1t2t3 每个数字中间以t分割 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=’t’) # {’a’: 1, ’b’: 2, ’c’: 3}t 正常输出 print(*dictionary, sep=’t’) # atbtct 每个字母中间以t分割 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: 2def 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: 1if __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进行使用。

具体实验代码可以通过Github获得。

以上就是python 星号(*)的多种用途的详细内容,更多关于python 星号(*)的资料请关注好吧啦网其它相关文章!

标签: Python 编程
相关文章: