如何在没有“”的函数中返回列表

时间:2014-02-18 19:22:00

标签: python list python-2.x

我有一个列表a = ['type1','type2','type3'],我有一个功能。在函数中我想返回列表,但没有' '。这可能吗?当我回来时,我得到了" "

1 个答案:

答案 0 :(得分:4)

Python在容器中显示值,例如列表为值表示;对于字符串,这意味着您将显示带有引号的文字字符串值。

表示字符串值包含实际引号。

您当然可以在终端上打印一些只显示字符串值的内容,用逗号连接并用方括号括起来:

print '[{0}]'.format(', '.join(yourlist))

但这不会改变列表对象,也不应该改变。

至于您的代码,这里的错误是您正在模块中修改全局列表。导入模块后,make_table(tresort_liste, sla_liste, wb)行会改变table_listelbmer

>>> import yourmodule
[['b\xc3\xb8k', 155.73786516665265], ['eik', 200.23439807141054], ['rogn', 149.1107219680717], ['poppel', 152.3522594021602], ['furu', 876.0254915624212], ['gran', 350.4101966249685], ['douglasgran', 778.6893258332633]]
>>> yourmodule.table_liste
[['b\xc3\xb8k', 155.73786516665265], ['eik', 200.23439807141054], ['rogn', 149.1107219680717], ['poppel', 152.3522594021602], ['furu', 876.0254915624212], ['gran', 350.4101966249685], ['douglasgran', 778.6893258332633]]
>>> yourmodule.lbmer
[155.73786516665265, 200.23439807141054, 149.1107219680717, 152.3522594021602, 876.0254915624212, 350.4101966249685, 778.6893258332633]

然后,您的测试再次运行make_table函数 ,并将测试参数附加到这些全局列表中。因此,该方法返回的数据超出预期,并且测试失败:

>>> names = ['abc', 'def', 'ghi']
>>> sla = [1, 2, 4]
>>> lbm = [15.3, 7.65, 3.825]
>>> zip(*yourmodule.make_table(names, sla, 50000))
[('b\xc3\xb8k', 'eik', 'rogn', 'poppel', 'furu', 'gran', 'douglasgran', 'abc', 'def', 'ghi'), (155.73786516665265, 200.23439807141054, 149.1107219680717, 152.3522594021602, 876.0254915624212, 350.4101966249685, 778.6893258332633, 155.73786516665265, 200.23439807141054, 149.1107219680717)]

故事的道德:不要使用全局变量。

您的代码可以简化为:

import math

def compute_lbm(sla, wb):
    return (0.3 + math.sqrt(0.0045 * wb)) / sla

def make_table(tresorter, slaer, wb):
    return [[sort, compute_lbm(sla, wb)] for sort, sla in zip(tresorter, slaer)]

if __name__ == '__main__':
    sla_liste = [0.045, 0.035, 0.047, 0.046, 0.008, 0.020, 0.009]
    tresort_liste = ["bøk", "eik", "rogn", "poppel", "furu", "gran", "douglasgran"]
    wb = 10000

    print make_table(tresort_liste, sla_liste, wb)

顺便说一下,不会使用全局变量。当用作模块时,最后print make_table()调用将不会执行,只有当您直接将此文件作为主脚本运行时才会执行。

您使用assertAlmostEqual()缺少placesdelta参数,您需要指定输出需要匹配的距离。

你追逐的报价绝对不是问题。