6

在 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 你猜对了,它不是专门用来打印的。我想要开始工作的是:

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

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

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

4

4 回答 4

9

您的问题是针对特定的print吗?

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

在 Python 3.0 中,没有关键字print; 有一个print函数(文档)。

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

from __future__ import print_function
a = print
a("Hello!")
于 2012-08-30T06:54:37.577 回答
7

这只是您遇到此问题的打印语句,因为它是一个语句(如 while/if/etc.)而不是一个函数。

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

于 2012-08-30T06:51:19.740 回答
3

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

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 的返回值。

于 2012-09-03T21:20:45.560 回答
2

这种行为正是 Python 3 发生的原因。在 PY3print中是一个函数,而不是关键字,是的,你可以在那里做。

于 2012-08-30T06:51:36.300 回答