包装print()的自定义打印功能

时间:2014-10-09 19:11:54

标签: python printing

如何包装print()以便我可以将任意字符串添加到作为参数传递的内容的开头和结尾以进行打印?

def xprint(*args):
    print("XXX", *args, "XXX")
xprint("hi", "yo", 4)

不起作用。

基本上,我希望我的自定义函数xprint()print()一样工作,但是将'XXX'添加到每个输出的开头和结尾。

5 个答案:

答案 0 :(得分:13)

当没有关键字参数时,将适用于python 2和3

def xprint(*args):
    print( "XXX"+" ".join(map(str,args))+"XXX")

In [5]: xprint("hi", "yo", 4)
XXXhi yo 4XXX

对于python 3 print()函数(或者在python 2中使用来自print_function的{​​{1}})时,也可能存在关键字参数。要确保传递这些,请使用表格

__future__

答案 1 :(得分:0)

您可以遍历args并单独格式化

def xprint(*args):
    for i in args:
        print('XXX{}XXX'.format(i), end=' ')

>>> xprint('hi', 'yo', 4)
XXXhiXXX XXXyoXXX XXX4XXX 

如果您只想将整个表达式包装在XXX中,那么您可以

def xprint(*args):
    s = ' '.join(str(i) for i in args)
    print('XXX{}XXX'.format(s), end=' ')

>>> xprint('hi', 'yo', 4)
XXXhi yo 4XXX 

答案 2 :(得分:0)

这个怎么样:

def xprint(*args):
    args = ("XXX",)+args+("XXX",)
    print(*args)
xprint("hi", "yo", 4)

输出为XXX hi yo 4 XXX

答案 3 :(得分:0)

def func():
    multiples = range(1,10)
    n = 1
    while n>0:
        for i in multiples:
            if n%i!=0:
                n = n + 1
                continue
            elif n%10==0:
                print(n)
                return n

关键字参数是什么? 好吧,以防万一您想在标准分隔符上添加更多精美的装饰到文本上,您可以这样做:

def xprint(*args, **kwargs):
    #  put a generator on all elements in args that will
    #  use string.format to prepend / append XXX to all args
    args = ( 'XXX' '{}' 'XXX'.format(i)  for i in args) 
    
    # pass it on to print()
    print(*args, **kwargs)
  
>>> xprint("hi", "yo", 4)
XXXhiXXX XXXyoXXX XXX4XXX

通过传递>>> xprint("hi", "yo", 4, Sep="=- -=") XXXhiXXX=- -=XXXyoXXX=- -=XXX4XXX ,您将启用xprint保留该功能。 为什么我提这个?似乎大多数答案的作者都不知道或不在乎。 可选,您可以添加行

**kwargs

进入kwargs["file"]=sys.stderr ,使其输出文本到xprint而不是stderr。 在大多数情况下,我为此目的将stdout包装起来。

...还有一件值得注意的整洁的事情是 发电机理解。这些生成器是功能编程的东西。生成器没有立即将更改应用于数据/内存,而是只是“依赖”该数据的迭代器。 更精确地说,生成器表达式只需返回一个新的迭代器。该迭代器用于以后在print()中获取实际数据。仅当读取实际数据时,才会应用生成器。 这可能会大大减少内存中的数据复制量,从而可以节省大量内存。

将行更改为:

for .. in .. loop

注意:只是括号从()变为[]。 它将把整个事情变成一个 List comprehension 表达式。这样做确实会更“保守”。返回具有更改的新列表,并覆盖旧的args列表。

答案 4 :(得分:-2)

g.V().hasLabel('user').has('_env', 'dev')