【问题标题】:Set command alias for print in python?在python中为打印设置命令别名?
【发布时间】:2012-08-24 20:28:50
【问题描述】:

在 bash 中,你可以给命令一个别名,如下所示:

alias e=echoset 
alias e="echo blah"

我想知道如何在 Python 中做同样的事情。我知道你可以给类别名,但是当我尝试给命令(例如 print 语句)一个别名时,我得到一个错误:

>>> p = print
  File "<stdin>", line 1
    p = print
            ^
SyntaxError: invalid syntax

我可以这样做:

p = "print"
exec(p)

但这与别名并不完全一样,我无法为命令提供任何输入。

更新: @atzz您猜对了,它不是特定于打印的。我要开始工作的是:

这应该是设置命令,但是当我输入这个命令时它只会发出哔哔声:
&gt;&gt;&gt; beep = Popen(['play', '-q', '/home/Username/Mich/Sound Effects/Beeps/beep-17-short.ogg'])

然后当我在提示中输入 beep 时,它会显示:
>>> beep <subprocess.Popen object at 0x9967b8c>

但除此之外我还有这个问题,至少现在我知道你不能给语句起别名。

【问题讨论】:

    标签: python aliases


    【解决方案1】:

    您的问题是针对print 的吗?

    在 Python 3.0 之前的版本中,print 是语言语法中的关键字。由于它不是一流的语言对象,因此不能将其分配给变量。

    在 Python 3.0 中,没有关键字print;有一个 print 函数代替 (documentation)。

    通过适当的 future 语句,您可以在 Python 2.6+ 中使用 print 函数:

    from __future__ import print_function
    a = print
    a("Hello!")
    

    【讨论】:

    • @gnibbler - 感谢您的更正。我“知道”它出现在 2.7 中,所以我什至错过了我链接到的文档中的相反信息:)
    【解决方案2】:

    只有 print 语句你会遇到这个问题,因为它是一个语句(比如 while/if/etc.)而不是一个函数。

    如果您想“重命名”(例如)len,它会工作得很好。

    【讨论】:

      【解决方案3】:

      要回答您的新问题,如果您想这样做并稍后执行哔声:

      beep = Popen(['play', '-q', '/home/Username/Mich/Sound Effects/Beeps/beep-17-short.ogg'])
      

      改成:

      beep = lambda: Popen(['play', '-q', '/home/Username/Mich/Sound Effects/Beeps/beep-17-short.ogg'])
      

      或者只是一个函数:-)

      def beep(): Popen(['play', '-q', '/home/Username/Mich/Sound Effects/Beeps/beep-17-short.ogg'])
      

      否则 'beep' 将只保存 Popen 的返回值。

      【讨论】:

      • 谢谢,这就是我要找的。​​span>
      【解决方案4】:

      这种行为正是 Python 3 出现的原因。在 PY3 中,print 是一个函数,而不是关键字,是的,你可以在那里实现。

      【讨论】:

      • 我认为这不是 Py3 发生的原因,但其余的都是正确的 :-)
      • 确实 :-) 这也是原因之一。
      猜你喜欢
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2020-09-15
      • 1970-01-01
      相关资源
      最近更新 更多