首页 文章

通过Python函数运行多个输入

提问于
浏览
0

我正在通过函数运行多个浮点数以生成科学记数法 . 但是,并非所有浮动都始终放入(它是随机的)因此会产生错误 .

输入:

a0,hvt,at,lambd = signify(a0,hvt,at,lambd)

功能:

def signify(*args):
    rst = []

    for arg in args:
        if arg >= 100.0 or arg <= 0.01:
            arg = '{:.2e}'.format(arg)
            rst.append(arg)
    return rst

换句话说,'rst'并不总是由四个元素组成(感谢指出Singh) .

有人愿意指出我正确的方向吗?

1 回答

  • 1

    我不认为你完全理解错误是什么 . 你能发布错误信息吗?

    我怀疑你试图分配 a0,hvt,at,lambd = signify(a0,hvt,at,lambd) 是真正的罪魁祸首,如果"rst"从函数返回没有4个元素怎么办?左侧的语法强制将右侧的列表精确地解压缩为4个元素,并在不匹配时引发 ValueError: too many values to unpack (expected 4) .

    尝试 result = signify(a0,hvt,at,lambd) 并检查输出 .

    更新:

    如果你只想修改4个术语中的一些但允许其余部分按原样传递,你只需要一个其他部分 . 以下是您如何看待整个过程 .

    def signify(*args):
        rst = []
        print(args)
        for arg in args:
            if arg >= 100.0 or arg <= 0.01:
                arg = '{:.2e}'.format(arg) #returns a string
                rst.append(arg)
            else:
                rst.append(arg) #take note that this else statement is the same as the last statement of if block
                #also note that args going through else block are not "strings" unlike the if block, which gives a string during ".format()"
        return rst
    

    我们可以改进这一点 .

    def signify(*args):
        rst = []
        print(args)
        for arg in args:
            if arg >= 100.0 or arg <= 0.01:
                arg = '{:.2e}'.format(arg)
            rst.append(arg) #note that you may want to typecast to string to maintain uniformity.
            #rst.append(str(arg))
        return rst
    

    但是,这基本上与在所有args上应用函数相同 . 我们可以创建一个强调这种“一步到位”方法的功能 .

    def signify_single(single_arg):
        if single_arg >= 100 or single_arg <= 0.01:
            return '{:.2e}'.format(single_arg)
        return single_arg #or str(single_arg)
    a,b,c,d = (signify_single(x) for x in (101,202,303,40))
    

    但这让我们意识到这只是一个if-else声明 . 他们不一定是丑陋的 . (PS . 最后一行是list comprehension.

    a,b,c,d = ('{:.2e}'.format(x)
              if (x >= 100 or x <= 0.01)
              else x #or str (x)
              for x in (101,202,303,40))
    

    条件可以稍微调整一下,以便让我们更清晰地理解 . 请注意,如果您愿意,也可以将它们写在一行中 .

    a,b,c,d = (x if (0.01 < x < 100) else '{:.2e}'.format(x) for x in (101,202,303,40))
    

    您可以使用任何看起来最干净的样式,或者探索并找到更好的东西 . 只需将它应用于您的案例 .

    a0,hvt,at,lambd = (x if (0.01 < x < 100) else '{:.2e}'.format(x) for x in (a0,hvt,at,lambd))
    

相关问题