4 回答
TA贡献1827条经验 获得超9个赞
单个星号将采用元组(或通常任何迭代器,如列表)并将其扩展为一系列参数,如下所示:
def multiply_two_numbers(x, y):
return x * y
my_tuple = (3, 4)
multiply_two_numbers(my_tuple) # gives an error
multiply_two_numbers(*my_tuple) # gives 3 * 4 = 12
双星号做了类似的事情,但用字典代替,用关键字参数代替位置参数:
def say_my_name(first_name="", last_name=""):
print(first_name + " " + last_name)
some_guy = {"first_name": "Homer", "last_name": "Simpson"}
say_my_name(**some_guy) # will print "Homer Simpson"
TA贡献1772条经验 获得超5个赞
Python 有一种非常有趣的处理函数参数的方式(我个人非常喜欢)。
如果我们定义一个新函数
def myFunc(*args, **kwargs):
print(args, kwargs)
我可以用
myFunc(1, 2, 3, 4, a = 'a', b = 'b')
并获得输出
([1, 2, 3, 4], {'a': 'a', 'b': 'b'})
为了具体回答你的问题,我也可以这样调用函数
myFunc(*[1, 2, 3, 4], **{'a': 'a', 'b': 'b'})
并获得完全相同的输出
我还可以使用星号传递位置参数
def add(x, y):
return x + y
并调用它
nums = [1, 2]
print(add(*nums))
标准输出:3
如您所见,1 和 2 分布在函数参数中。
TDLR
* 将列表解包为参数, ** 将字典解包为关键字参数
*,如果您也想引用它,则**相当于其他一些语言。...
TA贡献1859条经验 获得超6个赞
人们已经为你在争论中提供了保障,而星号通常在其他情况下不起作用(见本文末尾)。
但是还有另一种使用星星的方法,那就是变量解包。
>>> a, b, c = [1,2,3]
>>> print(a,b,c)
1 2 3
到目前为止,一切都很好。但是如果你现在只想分配a呢?您可以捕获带星号的变量中剩余的内容。
a, *rest = [1,2,3]
>>> print (a, "and the rest", rest)
1 and the rest [2, 3]
一个不起作用的例子:
>>> li = [1,2,3]
>>> var = *li
File "<stdin>", line 1
SyntaxError: can't use starred expression here
TA贡献1776条经验 获得超12个赞
the_list = [1, 3, 4]
相比
print(the_list) # prints the list as is; 1 parameter
[1, 3, 4]
随着使用*
print(*the_list) # performs print(1, 3, 4); 3 parameters
1 3 4
the_dict = {"sep": "---", "end": " #END#"}
相比
print(5, 6, the_dict) # after 5 and 6 prints the_dict as is
5 6 {'sep': '---', 'end': ' #END#'}
随着使用*
print(5, 6, *the_dict) # after 5 and 6 prints individual keys of the_dict
5 6 sep end
并使用**
print(5, 6, **the_dict) # performs print(5, 6, sep="---", end=" #END#")
5---6 #END#
*
最后,和的组合使用**
:
print(77, *the_list, **the_dict) # performs print(77, 1, 3, 4, sep="---", end=" #END#")
77---1---3---4 #END#
添加回答
举报