另一种考虑*运算符/ splat的方式?

时间:2019-05-17 17:40:47

标签: python

我找不到任何能解释该运算符的方式来解释该运算符,所以我只是想确保自己理解正确,并为像我这样的非编程向导提供帮助。

考虑我们可以写

Name Block Rotation 0 name1 Block 1 ERJD 1 name2 Block 1 PEDI 2 name3 Block 1 MAM 3 name4 Block 1 PEDI 4 name2 Block 2 ERJD 5 name3 Block 2 PEDI 6 name4 Block 2 MAM 7 name2 Block 3 VAC 8 name2 Block 4 ABD

df.loc[df['Name'].eq('name2') & df['Block'].eq(['Block 3','Block 4']), 'Rotation'] = 'VAC'

做同样的事情。在这种情况下,似乎tree.delete(*tree.get_children())已被编程为接受任意长度的参数来完成与for循环相同的操作。这很受欢迎吗?这是犹太洁食吗?

for i in tree.get_children(): tree.delete(i) 是我对第一部分要回答的解决方案

tree.delete

edit:循环和def func(*numbers): return list(map(lambda x: x + 1, numbers)) old = [1,2,3] new = [] for i in old: new.append(i + 1) print(func(*old) == new) 在这里是等效的,但是有理由为什么我们可能更喜欢一个吗?

2 个答案:

答案 0 :(得分:2)

f(*old)等效于调用f(1,2,3)。由于f不能接受多个参数,因此会引发错误。

您可以看到这与列表版本在功能上有所不同。如果您想将列表重写为更简单/更漂亮的内容,则可以使用列表理解功能

new = [ f(i) for i in old ]

还有map

new = list(map(f,old))

答案 1 :(得分:0)

  

for循环和func在这里是等效的,但是有理由为什么我们可能更喜欢一个吗?

您是否想知道性能上的差异?您仍然需要遍历所有元素。在该方法的内部或外部,循环是相同的,因此,总的来说,我会说一种解决方案而不是另一种在性能方面没有真正的优势。

首选项应取决于其他因素。例如,您是否预见到需要在程序中大量循环删除这些three.children?如果是这样,最好让函数在它们上循环而不是写很多次:

for i in tree.get_children():
    tree.delete(i)

在您的代码中。