Python新手:在Python中返回多个整数/字符串结果
我有一个函数,它会输出几个结果,这些结果都是“原生”的,也就是整数和字符串。比如说,我有一个函数可以分析一个字符串,找出单词的数量和单词的平均长度。
在C/C++中,我会用@符号来传递两个参数给这个函数。但在Python中,我不太确定该怎么做,因为整数和字符串是按值传递的,而不是按引用传递(至少这是我通过尝试得出的结论),所以下面的代码是行不通的:
def analyze(string, number_of_words, average_length):
... do some analysis ...
number_of_words = ...
average_length = ...
如果我这样做,函数外面的值就不会改变。我现在的做法是使用一个字典,像这样:
def analyze(string, result):
... do some analysis ...
result['number_of_words'] = ...
result['average_length'] = ...
然后我这样调用这个函数:
s = "hello goodbye"
result = {}
analyze(s, result)
不过,这样做感觉不太对。那在Python中正确的做法是什么呢?请注意,我只是在讨论返回2到3个结果的情况,而不是几十个结果。此外,我对Python完全是个新手,所以我知道我可能遗漏了一些简单的东西……
谢谢
4 个回答
1
在Python中,你不能像在C/C++那样直接修改参数(通过引用或指针来修改)。这样做有几个原因,比如在Python中字符串是不可变的,也就是说一旦创建了字符串,就不能改变它。正确的做法是把修改后的参数放在一个元组里返回(就像SilentGhost建议的那样),然后把变量重新绑定到这些新值上。
3
如果你在函数里这样返回变量:
def analyze(s, num_words, avg_length):
# do something
return s, num_words, avg_length
那么你可以像这样调用它,来更新传入的参数:
s, num_words, avg_length = analyze(s, num_words, avg_length)
不过,对于你的示例函数,这样做会更好:
def analyze(s):
# do something
return num_words, avg_length
19
Python 有一个叫做 return
的语句,它可以让你做到以下几点:
def func(input):
# do calculation on input
return result
s = "hello goodbye"
res = func(s) # res now a result dictionary
不过你其实不一定要有 result
这个东西,你可以像下面这样返回几个值:
def func(input):
# do work
return length, something_else # one might be an integer another string, etc.
s = "hello goodbye"
length, something = func(s)