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 <subprocess.Popen object at 0x9967b8c>

しかし、それ以外の場合、私が抱えているこの問題は、少なくとも今では、ステートメントにエイリアスを指定できないことを知っています。

4

4 に答える 4

9

あなたの質問は特定のものprintですか?

3.0より前のPythonでは、printは言語文法のキーワードです。ファーストクラスの言語オブジェクトではないため、変数に割り当てることはできません。

Python 3.0には、キーワードはありませんprintprint代わりに関数があります(ドキュメント

適切なfutureステートメントを使用すると、Python2.6以降でprint関数を使用できます。

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

これは、関数ではなくステートメント(while / if / etc。など)であるため、この問題が発生するのはprintステートメントのみです。

(たとえば)lenを「名前変更」したい場合は、問題なく機能します。

于 2012-08-30T06:51:19.740 に答える
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'])

それ以外の場合、「ビープ音」はPopenの戻り値を保持します。

于 2012-09-03T21:20:45.560 に答える
2

この振る舞いがまさにPython3が行われた理由です。PY3printでは、キーワードではなく関数であり、はい、そこで実行できます。

于 2012-08-30T06:51:36.300 に答える