繁体   English   中英

Python新手:在Python中返回多个Int / String结果

[英]Python Newbie: Returning Multiple Int/String Results in Python

我有一个具有多个输出的函数,所有输出均为“本机”,即整数和字符串。 例如,假设我有一个分析字符串的函数,可以找到单词的数量和单词的平均长度。

在C / C ++中,我将使用@将2个参数传递给函数。 在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)

但是,那感觉不对。 什么是实现此目标的正确Pythonian方法? 请注意,我仅指函数返回2-3个结果而不是几十个结果的情况。 另外,我是Python的新手,所以我知道这里可能缺少一些琐碎的事情...

谢谢

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)

如果像这样在函数中返回变量:

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

在python中,您不会以C / C ++方式修改参数(通过引用或通过指针传递参数并在原位进行修改),这有一些原因,例如在python中字符串对象是不可变的。 正确的做法是将修改后的参数返回到一个元组中(如SilentGhost建议),然后将变量重新绑定到新值。

如果需要在两个方向上都使用方法参数,则可以将参数封装到类中,然后将对象传递给方法,并让方法使用其属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM