读懂代码很难的,比写代码还难,但也是最节约时间最好的学习方式之一。今天我们通过读代码来了解一下python中的 * 或者 *。通过读代码,帮助我们学习python中的 功用。这里我一共列了8个demo,都不是很那,相信大家应该都能根据运行结果推导出星号的功能。
numbers = [2, 1, 3, 4, 7]
more_numbers = [*numbers, 11, 18]
more_numbers
运行结果
[2, 1, 3, 4, 7, 11, 18]
我在学习这块知识的时候,由于没有比较专业化的命名方式说明每一种用法的名字,所以我就将代码列在下面,供大家学习。
demo1
当我们调用一个函数时, * 操作能将 可迭代对象传入 一个调用的函数中去,如下
fruits = ['lemon', 'pear', 'watermelon', 'tomato']
print(fruits[0], fruits[1], fruits[2], fruits[3])
print(*fruits)
运行结果
lemon pear watermelon tomato
lemon pear watermelon tomato
demo2
我们再来看一个例子-实现矩阵转置
def transpose_list(list_of_lists):
return [list(row)
for row in zip(*list_of_lists)]
matrix = [[1, 4, 7],
[2, 5, 8],
[3, 6, 9]]
transpose_list(matrix)
运行结果
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
demo3
*操作与 类似,但是传入的是关键词参数。
date_info = {'year': "2020", 'month': "01", 'day': "01"}
filename = "{year}-{month}-{day}.txt".format(**date_info)
filename
运行结果
'2020-01-01.txt'
demo4
当我们定义函数时 , * 操作可以将函数设置成任意个数的参数。例如
from random import randint
def roll(*dice):
#randint(1, die) 在1到die中随机生成一个整数
#最后再加总
return sum(randint(1, die) for die in dice)
print(roll(20))
print(roll(6))
print(roll(6, 6, 6))
运行结果
1
2
12
demo5
def tag(tag_name, **attributes):
attribute_list = [
f'{name}="{value}"'
for name, value in attributes.items()
]
return f""
print(tag('a', href="http://treyhunner.com"))
print(tag('img', width="40", src="face.jpg"))
运行结果
dmeo6
fruits = ['lemon', 'pear', 'watermelon', 'tomato']
first, second, *remaining = fruits
remaining
运行结果
['watermelon', 'tomato']
demo7
date_info = {'year': "2020", 'month': "01", 'day': "01"}
track_info = {'artist': "Beethoven", 'title': 'Symphony No 5'}
all_info = {**date_info, **track_info}
all_info
运行结果
{'year': '2020',
'month': '01',
'day': '01',
'artist': 'Beethoven',
'title': 'Symphony No 5'}
demo8
def go(**kwargs):
#kwargs在函数内是一个字典
for k, v in kwargs.items():
print(k,v)
go(a=1, b=2, c=3)
运行结果
**
a 1
b 2
c 3
**