【问题标题】:What is an easy way to implement fprintf in python?在 python 中实现 fprintf 的简单方法是什么?
【发布时间】:2017-10-28 16:18:34
【问题描述】:

在python中,下面将让我们写信给stdout

import sys
sys.stdout.write("blah %d" % 5)

但是,我希望灵活选择打印到哪个流。我想将流作为参数传递给函数,就像在任何C 派生语言中调用fprintf 时一样。在上面源代码的 sn-p 中,stdout 被硬编码到 write-statement 中。但是,我们希望灵活地决定写入哪个流。我们可能想要stderr,或者其他一些流而不是stdout

【问题讨论】:

  • def something(stream): stream.write('blah %d' % 5); something(sys.stderr) 可以正常工作;你能澄清一下你到底想达到什么目标吗?
  • 如果sys.stderrsys.stdout 都可以从任何地方访问,为什么还需要传递?

标签: python python-3.x dictionary file-io ascii


【解决方案1】:

你说

我想将流作为参数传递给函数

但这并没有给您任何额外的灵活性。如果您有一个 some_stream 变量引用您要写入的流,那么您已经可以这样做了

some_stream.write("blah %d" % 5)

所以你不会通过将流作为函数参数来获得任何东西。也就是说,print 函数采用 file 参数指定要写入的流:

print("blah %d" % 5, end='', file=some_stream)

【讨论】:

    【解决方案2】:

    以下会做:

    import sys
    def fprintf(stream, format_spec, *args):
        stream.write(format_spec % args)
    

    这是一个调用示例:

    fprintf(sys.stdout, "bagel %d donut %f", 6, 3.1459)
    

    控制台输出:

    bagel 6 donut 3.145900
    

    【讨论】:

      【解决方案3】:

      通常,print (Python) 是 printf (C) 及其派生词(fprintfprintln...)的替代品。这是上面的 sn-p 在 Python 中的样子:

      import sys
      
      print("blah %d" % 5, file=sys.stdout)
      

      或者:

      print("blah %d" % 5)
      

      【讨论】:

      • 实际上,print 有一些令人讨厌的功能:它会打印一个尾随 \n,并在参数之间打印空格(后者在这里不重要,但前者很重要)。
      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 2023-03-20
      • 2018-02-09
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      相关资源
      最近更新 更多