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

Python新手:在Python中返回多个Int/String结果,python,parameters,reference,Python,Parameters,Reference,我有一个函数,它有几个输出,所有输出都是“本机的”,即整数和字符串。例如,假设我有一个函数,它分析一个字符串,并找到单词的数量和平均长度 在C/C++中,我将使用@向函数传递2个参数。在Python中,我不确定什么是正确的解决方案,因为整数和字符串不是通过引用传递的,而是通过值传递的(至少这是我从试错中了解到的),所以下面的代码不起作用: def analyze(string, number_of_words, average_length): ... do some analysis

我有一个函数,它有几个输出,所有输出都是“本机的”,即整数和字符串。例如,假设我有一个函数,它分析一个字符串,并找到单词的数量和平均长度

在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)
def analyze(s, num_words, avg_length):
    # do something
    return s, num_words, avg_length
然而,这感觉并不正确。正确的蟒蛇方法是什么?请注意,我指的只是函数返回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)

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)

如果您返回函数中的变量,如下所示:

s = "hello goodbye"
result = {}
analyze(s, result)
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

如果您返回函数中的变量,如下所示:

s = "hello goodbye"
result = {}
analyze(s, result)
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++的方式修改参数(通过引用或指针传递参数,并在原位进行修改)。正确的做法是在元组中返回修改后的参数(正如SilentGhost建议的那样),并将变量重新绑定到新值。

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

在这种情况下除外,因为在Python中,整数和字符串是不可变的。在这种情况下除外,因为在Python中,整数和字符串是不可变的。请参阅关于“按对象引用调用”请参阅关于“按对象引用调用”