繁体   English   中英

字符串未从函数返回,但返回了列表

[英]string not returned from function, but list is returned

我使用一个函数来聚合字符串;
此函数通过两种不同的方法执行此串联:
1)通过字符串连接:CUM_STR = CUM_STR + str(IDX)
2)通过列表追加:CUM_LST.append(IDX)

从此函数返回时,
方法1始终为CUM1_TXT提供空字符串
方法2正确聚合CUM_LST列表中的字符串


这是此情况的示例:

CUM1_TXT = ''
CUM1_LIST = []

def modif(IDX,CUM_STR,CUM_LST):
    CUM_STR = CUM_STR + str(IDX)
    CUM_LST.append(IDX)
    print CUM_STR
    print CUM_LST
    return CUM_STR,CUM_LST

for INDEX in range(10):
    modif(INDEX,CUM1_TXT,CUM1_LIST)
    print CUM1_TXT,CUM1_LIST

顺便说一句,在return语句上编写CUM_STR和CUM_LST的事实不会改变结果

任何帮助表示赞赏

让我们采用您的方法:

def modif(IDX,CUM_STR,CUM_LST):
    CUM_STR = CUM_STR + str(IDX)
    CUM_LST.append(IDX)
    print CUM_STR
    print CUM_LST
    return CUM_STR,CUM_LST

CUM_STR是一个str对象。 它是不可变的 ,因此modif不能更改调用者的值。

CUM_LST是一个list对象。 这是可变的 在方法中附加会影响调用方的值(虽然修改参数不是很好,但调用方可能不会期望它)

最重要的是,您正在返回值,但没有在调用方中分配它们:函数返回时,返回值会丢失。 执行参数return不会更改参数。

如果允许的话,我会这样重写:

def modif(IDX,CUM_STR,CUM_LST):
    return CUM_STR + str(IDX),CUM_LST+[IDX]

而且您必须这样称呼它:

CUM1_TXT,CUM1_LIST = modif(INDEX,CUM1_TXT,CUM1_LIST)

您将舍弃modif函数的返回值,用以下行替换对modif的调用:

CUM1_TXT,_ = modif(INDEX,CUM1_TXT,CUM1_LIST)

请注意,“ _”是Python常用的调用变量的惯用方法

C

暂无
暂无

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

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