为了账号安全,请及时绑定邮箱和手机立即绑定

python中变量前的单星号和双星号有什么区别?

python中变量前的单星号和双星号有什么区别?

慕桂英546537 2022-11-01 15:06:25
data = pd.read_csv("customers.csv")print("Wholesale customers dataset has {} samples with {} features each."      .format(*data.shape))在此之后,我得到了数据的维数。但我想知道 Python 中变量之前的星号有什么用处。
查看完整描述

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"


查看完整回答
反对 回复 2022-11-01
?
月关宝盒

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

* 将列表解包为参数, ** 将字典解包为关键字参数

*,如果您也想引用它,则**相当于其他一些语言。...


查看完整回答
反对 回复 2022-11-01
?
慕丝7291255

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


查看完整回答
反对 回复 2022-11-01
?
叮当猫咪

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#


查看完整回答
反对 回复 2022-11-01
  • 4 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信