首页 文章

格式化多个python变量

提问于
浏览
1

我早在python的学习阶段,我花了大约一小时左右的时间试图找到一种更有效的方法来格式化多个整数变量以拥有数千个分隔符 . 这个方法有效,但我不能动摇这种感觉,如果你做了4次同样的事情,可能有更好的方法去做 .

if check > 999:
 check = "{:,}".format(check)
if number > 999:
 number = "{:,}".format(number)
if nmod > 999:
 nmod = "{:,}".format(nmod)
if ndiv > 999:
 ndiv = "{:,}".format(ndiv)

提前致谢! -Rali

2 回答

  • 0

    您还可以将变量存储在list中,然后将map()存储为lambda .

    change = lambda s: [s, '{:,}'.format(s)][s > 999]
    

    lambda将像一个函数(你可以使用函数 def 定义它),但lambdas更短 . 它可以传递一个(位置)参数,如果 s > 999 为假(即 0 )或 '{:,}'.format(s)s > 999 为真)(即1),则返回 s . 您基本上是访问列表,无论是否为 s > 999 都将其编入索引 .

    lambda / function的优点在于你可以将重复代码保存在一个地方 .

    然后你可以像这样使用 map()

    vars = [check, number, nmod, ndiv]
    vars[:] = map(change, vars)     # modifies the list in-place
    
    newList = [*map(change, vars)]  # creates a new list
    

    map()change lambda(或函数)应用于每个变量,并返回带有结果的生成器 .

    check, number, nmod, ndiv = 2000, 3000, 400
    
    # lambda
    change = lambda s: [s, '{:,}'.format(s)][s > 999]
    
    # list
    vars = [check, number, nmod, ndiv]
    
    # before
    print(vars)
    
    # map in-place
    vars[:] = map(change, vars)
    
    # after
    print(vars)
    

    输出:

    [1000, 2000, 3000, 4000]
    ['1,000', '2,000', '3,000', '4,000']
    
  • 0

    基本上你想要做的是对一组元素执行相同的操作 . 这将需要您了解列表/元组以及函数的使用/定义 .
    解决此问题的最简单方法之一是实现一个函数,通过使用(* args)为您传递给它的任何数量的参数 .

    def format_check( *args):
        res = []
        for arg in args:
            res.append( '{:,}'.format(arg))
    
        return res
    
    a = 123123
    b = 153452
    c = 567567
    d = 1233
    e = 12
    
    a,b,c,d,e = format_check( a,b,c,d,e)
    
    print( a,b,c,d,e, sep='\n')
    

    哪个会输出

    123,123
    153,452
    567,567
    1,233
    12
    

    更精细,但更紧凑的方式是:

    a,b,c,d,e = map( lambda x: '{:,}'.format(x), (a,b,c,d,e))
    

    为此,您需要了解map的使用,它将函数应用于可迭代对象的所有元素和lambda,它允许您定义快速oneline无名函数 .

    lambda x: '{:,}'.format(x)
    

    有点等同于

    def some_function( x):
        return '{:,}'.format(x)
    

相关问题