在函数中解包列表但在使用 MAP() 完成时不需要?

Unpacking of list in function but not needed when its done with MAP()?

def ups(*name):
    for n in name:
        a=n.upper()

    return a
lis=["lan","ona"]
m=list(map(ups,lis))
print(m)

在地图中我没有对列表进行解包,但是在没有 Map() 的函数调用的情况下也是如此,(例如)必须像 ups(*lis),这是为什么?

学习,谢谢

star()args 表示可变数量的 arguments.so 基本上你的功能可以采用可变数量的 arguments.On 另一手地图函数采用函数和列表作为参数和该函数在作为 argument.so 传递的列表的每个元素上调用 如果您不在您定义的函数中使用“”,那么它将在 lis(当您传递给 map 函数时)并对其进行迭代,return for 循环中每个字符串的唯一最后一个字母 uppercase.Because 将迭代传递的元素,但 return 仅最后一个像你一样的元素 returning only a.

除了

  • the docs 你会发现 map(function, iterable, ...) "Return[s] 一个将函数应用于 可迭代的每个项目,产生结果”。正如 ksourav 指出的 在他的回答中,您传递的项目是字符串,因此是可迭代的 他们自己 - 所以函数只是 returns 中的最后一个字母 大写,例如
s = 'lan'
for char in s:
    print(char.upper())
# L
# A
# N
  • (在本例中)* 所做的是将传递的参数 (=string) 转换为 1 元素元组 - 您现在遍历 tuple 而不是单个元素 字符串了。这就是为什么在这里,你的函数 returns 整个单词大写,如
t = ('lan',)
for element in t:
    print(element.upper())
# LAN
  • 顺便说一下,恕我直言,一种更易读的函数编写方式可能是
m = list(map(lambda x: x.upper(), lis))
# or even better
m = [s.upper() for s in lis]