提问人:Petar Pehchevski 提问时间:9/5/2023 更新时间:9/5/2023 访问量:69
在 Python 中的函数之间传递变量/字符串的最佳方法是什么?
What's the best way to pass variables/strings around between functions in Python?
问:
我有很多函数都包含需要在它们之间通信的元素,但我在如何格式化它以获得最高效率方面陷入了两难境地。下面我有几个我尝试过的方法的例子(代码只是一个例子)
fruits = "banana", "apple", "orange"
vegetable = "cucumber", "pepper", "onion"
first_name = "John"
第一种方法:在这里,我已经为函数提供了所有变量,它在 1 个函数下执行 3 个任务。它可以完成工作,但也许我想对任务进行细分,这样如果代码更大,导航就不会变得太难。
def preferences(first_name, last_name, what_he_likes, what_he_hates):
full_name = first_name + " " + last_name
for item in what_he_likes:
print(full_name + " likes " + item)
for item in what_he_hates:
print(full_name + " hates " + item)
preferences(first_name, "Lambert", fruits, vegetable)
第二种方法:在这里,我有 3 个独立的函数,每个函数都有自己的用途。我喜欢它,因为它更清晰,但我每次都必须传递名称。现在这里很好,但你可以想象,对于更大的代码,也许我需要将 3-4 个变量传递给每个函数。
def add_last_name(first_name, last_name):
full_name = first_name + " " + last_name
return full_name
def likes(name, what_he_likes):
for item in what_he_likes:
print(name + " likes " + item)
def hates(name, what_he_hates):
for item in what_he_hates:
print(name + " hates " + item)
full_name = add_last_name(first_name, "Lambert")
likes(full_name, fruits)
hates(full_name, vegetable)
第三种方法:在这个例子中,它都在一个函数下,但也许如果我知道名称总是相同的,我可以直接输入字符串,而不必传递变量。但是当我这样做时,我总是担心直接输入字符串是一种破坏性的工作方式,因为如果我需要更改它,我必须挖掘代码才能这样做。
def preferences_direct_name(what_he_likes, what_he_hates):
for item in what_he_likes:
print("John Lambert" + " likes " + item)
for item in what_he_hates:
print("John Lambert" + " hates " + item)
preferences_direct_name(fruits, vegetable)
我想我想知道你们更喜欢如何构建你的代码。我有时发现自己只需要返回 1 个变量才能在不同的函数中使用一次,我想知道我是否应该直接在该函数中传递字符串,这样我就不必通过返回所有这些变量并将它们作为参数传递来不断弄乱行。 另一方面,如果我有 1 个封装所有代码的大函数,我就不必这样做,但代码会很长,清晰度很差。 我尽力解释,任何意见都值得赞赏。
答:
我认为这完全取决于你想做什么。对我来说,我认为第一种方法是最干净的方法,如果你认为代码太长或咔嚓咔嚓,只需在代码的每个部分添加注释即可。
评论
我认为这可能会对你有所帮助
def preferences(first_name, last_name, what_he_likes, what_he_hates):
full_name = f"{first_name} {last_name}"
for item in what_he_likes + what_he_hates:
category = "likes" if item in what_he_likes else "hates"
print(f"{full_name} {category} {item}")
#sample
first_name = "John"
preferences(first_name, "Lambert", ["fruits", "movies"], ["vegetables", "rain"])
评论
在函数之间传递变量的最佳方式的决定受到许多元素、可读性、可维护性和项目的特殊要求的影响。
您描述的每种方法都有特定的应用,最合适的方法可能会根据情况(您的团队编码风格、项目要求等)而变化。
评论