为什么我的返回函数不能按我想要的方式工作? (Python 3中)
问题描述:
有人可以给我一些提示或想法,为什么这样的:为什么我的返回函数不能按我想要的方式工作? (Python 3中)
def fishstore(fish, price):
total = "Your", fish, "costs", price, "$"
return total
print (fishstore("sardines", 5))
表明这一点:
('Your', 'sardines', 'costs', 5, '$')
,而不是这样的:
Your sardines costs 5 $
答
你正在返回一个元组,这就是正在打印的内容。仅仅因为你用逗号分开返回多个项目并不意味着print()
会将这些项目看作单独的参数。否则,如何将元组打印为元组?
如果你想打印内容的元组作为独立参数的,使用*argument
调用语法:
print(*fishstore("sardines", 5))
的*argument
语法使得它明确要打开所有值转化为单独项目print()
来处理。
该功能并非全部有用,真的。这可能是使用string formatting把项目和价格一起合并成一个字符串打印更加有用:
def fishstore(fish, price):
total = "Your {} costs {}$".format(fish, price)
return total
此时print(fishstore("sardines", 5))
会工作得很好。
如果您正在使用Python 3.6(或更新版本),你可以使用f'....'
formated string literals语法太:
def fishstore(fish, price):
total = f"Your {fish} costs {price}$"
return total
答
你可以通过的concat替换编码total = "Your " + fish + "costs " + price +"$"
的字符串。我不太积极,为什么它会像这样列表输出它,但其余的代码看起来是正确的。你也可以做print ("Your %s cost %d $", fish, price)
。
在Python中,逗号不会连续。如果你想把它存储在一个列表中,你也可以像其他人一样使用.join()函数。
谢谢你的帮助!我还有一个问题:“参数调用语法”是什么意思?谢谢!我刚刚开始使用python 3,如果我问愚蠢的问题,我很抱歉。 –
@MacKenzieRichards:在名称后面添加'(...)'称为[* call *](https://docs.python.org/3/reference/expressions.html#calls)。该语法的一部分是指定不应将对象视为调用的单个参数,而应视为一系列单独的参数。 –
@MacKenzieRichards:所以'print(1,2,3)'也可以表示为'args = [1,2,3]'和print(* args)'。在print调用中使用'* args'告诉Python获取'args'中包含的所有元素,并将它们作为单独的参数使用。 –