当前位置: > python教程 > python高级教程 >

Python关于星号的使用方式总结-二
栏目分类:python高级教程   发布日期:2019年03月01日 18:31:55   浏览次数:

        在 Python 中有许多当地可以看到*和**。在某些景象下,无论是对于新手程序员,还是从其他许多没有完全相同操作符的编程言语搬迁过来的人来说,这两个操作符都可能有点神秘。现在我想介绍一下这些操作符的运用方法。星号用于将可迭代对象拆分并分别作为函数参数。
当调用函数时,*运算符可用于将一个迭代项解压缩到函数调用中的参数中:
 
>>> fruits = ['lemon', 'pear', 'watermelon', 'tomato']
>>> print(fruits[0], fruits[1], fruits[2], fruits[3])
lemon pear watermelon tomato
>>> print(*fruits)
lemon pear watermelon tomato
 
print(*fruits)代码即将fruits列表中的所有项作为独立的参数传递给print函数调用,甚至不需求咱们知道列表中有多少个参数。
*运算符在这儿远不止是语法糖罢了。要想用一个特定的迭代器将所有项作为独立的参数传输,若不运用*是不可能做到的,除非列表的长度是固定的。
下面是另一个例子:
def transpose_list(list_of_lists):
    return [
        list(row)
        for row in zip(*list_of_lists)
    ]
这儿咱们承受一个二维列表并回来一个“转置”的二维列表。
 
>>> transpose_list([[1, 4, 7], [2, 5, 8], [3, 6, 9]])
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 
**操作符完成了相似的操作,只不过运用了关键字参数。**运算符答应咱们获取键-值对字典,并在函数调用中将其解压为关键字参数。
 
>>> date_info = {'year': "2020", 'month': "01", 'day': "01"}
>>> filename = "{year}-{month}-{day}.txt".format(**date_info)
>>> filename '2020-01-01.txt' `
 
根据我的经验,运用**将关键字参数解压缩到函数调用中并不常见。我最常看到它的地方是在实现承继时:对uper()的调用通常包括*和**。
如 Python 3.5 那样,在函数调用中,*和**都可以被屡次运用。
有时,屡次运用*会很方便:
>>> fruits = ['lemon', 'pear', 'watermelon', 'tomato']
>>> numbers = [2, 1, 3, 4, 7]
>>> print(*numbers, *fruits)
2 1 3 4 7 lemon pear watermelon tomato 
屡次运用**也可以到达相似的作用:
 
>>> date_info = {'year': "2020", 'month': "01", 'day': "01"}
>>> track_info = {'artist': "Beethoven", 'title': 'Symphony No 5'}
>>> filename = "{year}-{month}-{day}-{artist}-{title}.txt".format(
...     **date_info,
...     **track_info,
... )
>>> filename
'2020-01-01-Beethoven-Symphony No 5.txt'
 
不过,在屡次运用**时需求特别小心。Python 中的函数不能屡次指定相同的关键字参数,因此在每个字典中与**一同运用的键有必要能够相互区分,否则会引发异常。
 

相关热词:

热门关键词
python字符串
     
python教程 python爬虫 python人工智能 Python+大数据 python问答