【问题标题】:Call a function in repl without brackets在不带括号的 repl 中调用函数
【发布时间】:2021-09-17 15:42:36
【问题描述】:

想知道是否有一种方法可以仅使用函数名称在 repl 中调用 python 中的函数。

$ python -i interace.py
>>> load 834.png
>>> sharpen
>>> save

而不是

$ python -i interface.py
>>> load('834.png')
>>> sharpen()
>>> save()

原因是,我有一个文件instructions.txt,其格式如上。我只想做$ python -i interface.py < instructions.txt。 而在我没有指令文件的时候,我可以手动输入指令。

【问题讨论】:

  • python -i 旨在运行交互式 Python 会话。您不是在寻找交互式 Python 会话。您应该编写自己的输入处理。
  • 同意@user2357112supportsMonica。您的指令格式看起来很容易解析,您可以使用 for line in sys.stdin: 读取输入

标签: python read-eval-print-loop


【解决方案1】:

常规的 Python 解释器无法做到这一点。 Function calls must include parentheses.

现在,您的指令看起来很像 shell 语法,所以也许您可以编写自己的简单解析器。尝试查看shlex 开始。


顺便说一句,如果有帮助的话,IPython 包含一个 %autocall 设置,几乎可以满足您的需求。

In [4]: print 'hello'                                                                                 
  File "<ipython-input-4-5a1ef41e7057>", line 1
    print 'hello'
                ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('hello')?


In [5]: %autocall                                                                                      
Automatic calling is: Smart

In [6]: print 'hello'                                                                                 
------> print('hello')
hello

In [7]: print 834.png                                                                                 
------> print(834.png)
  File "<ipython-input-7-3d64d8523fdd>", line 1
    print(834.png)
                ^
SyntaxError: invalid syntax

【讨论】:

    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多