=='
我在emacs编码python。 然而,不知何故,运行在emacs上的python解释器让我感到吃惊。
如果我写
print()
print(__name__)
print(__name__=='__main__')
if __name__ == '__main__':
print("indeed")
在emacs缓冲区中,并告诉emacs启动一个解释器并运行这个缓冲区的内容,我得到一个缓冲区,其中包含
Python 3.3.5 (default, Mar 18 2014, 02:00:02)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>>
__main__
True
>>>
( __main__
和True
都是打印语句的输出; python缓冲区总是显示>>>
并立即打印,我意识到这一点,这不是问题。)
按照预期,从命令行, python
和python -i
显示“确实”。
Emacs如何能够将__name__=='__main__'
评估为True
,而不执行里面的内容, if __name__ == '__main__':
__name__=='__main__'
if __name__ == '__main__':
那么如何重新配置它,使其不再这样做?
正如评论中提到的@Wooble,它可能是python.el
问题: Cc Cc
运行
python-shell-send-buffer
函数:
python-shell-send-buffer是`python.el'中交互式编译的Lisp函数。
(python-shell-send-buffer和可选的ARG)
将整个缓冲区发送给低级Python进程。 使用前缀ARG允许执行由"if __name__=='__main__':"
即打印“确实”,添加前缀Cu Cc Cc
。
问:我试图通过python.el进行挖掘,但我仍然不确定它是如何以及在何处执行此操作的。 你能解释一下,所以我可以修改默认行为吗?
要找出Cc Cc
在你的案例中做了什么,打开一个python文件并输入Mx describe-key RET
然后按Cc Cc
(实际上按下键)。 默认情况下,它在python.el
运行python-shell-send-buffer
函数。 您可以重新定义这些键以使用参数调用该函数,以便Cc Cc
行为与Cu Cc Cc
类似,可以运行"if __name__=='__main__':"
part:
;; Make C-c C-c behave like C-u C-c C-c in Python mode
(require 'python)
(define-key python-mode-map (kbd "C-c C-c")
(lambda () (interactive) (python-shell-send-buffer t)))
一旦你启动了python shell,你可以简单地覆盖这个变量:
__name__ = 'repl'
这可以防止任何if __name__=='__main__':
块在任何后续的Cc Cc
调用中运行。
上一篇: == '
下一篇: Merge two arraylists in a simple form of Polish Notation