nay*_*oti -1 python haskell sublimetext
我是新手,请不要对我苛刻.
我正在尝试用Python设置Sublime Text(下一学期).在此之前我在SublimeText中使用了Haskell,在Sublime中我可以用"ctrl + b"运行我的skript.
当我尝试使用名为"test.py"的文件执行相同操作时.
def add(a,b):
return a+b
main = print(add(2,3))
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
/home/nayooti/Desktop/test.py:1:1:
**Parse error: naked expression at top level**
[Finished in 0.2s with exit code 1]
[shell_cmd: runhaskell "/home/nayooti/Desktop/test.py"]
[dir: /home/nayooti/Desktop]
[path: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games]
Run Code Online (Sandbox Code Playgroud)
"顶层的裸体表达" - 部分看起来很熟悉,因为它非常具有Haskell特性.实际上,当我在Web上搜索这个消息的时候,它只会带给我与Haskell相关的东西.显然,Sublime或者编译器认为,我正在尝试运行Haskell脚本,即使我将文件命名为〜.py.
对于这些,不熟悉Haskell和Python的人:通常可以运行脚本:Python:main = print(method(x,y))Haskell:main = print(function xy)
我使用的是Ubuntu 12.04.我在这做错了什么?非常感谢帮助.TX.
转到Tools -> Build System并确保Python已选中.另外,这不是你在Python中编写main的方式,它应该更像
def add(a, b):
return a + b
def main():
print(add(2, 3))
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
当你写作
main = print(add(2, 3))
Run Code Online (Sandbox Code Playgroud)
并加载您的脚本,该行将被执行,因为它是一个赋值,如果我这样做,则大致相同
a = 1
Run Code Online (Sandbox Code Playgroud)
要么
a = print(add(2, 3))
Run Code Online (Sandbox Code Playgroud)
mainPython中的名称没什么特别之处.你仍然看到你的输出因为print有副作用,而不是定义main你只是执行一个脚本.如果你尝试的话会有所不同
add.py:
def add(a, b):
return a + b
main = print(add(2, 3))
Run Code Online (Sandbox Code Playgroud)
subtract.py:
from add import add
def subtract(a, b):
return add(a, -b)
Run Code Online (Sandbox Code Playgroud)
如果你跑了python subtract.py,你仍会看到5打印到屏幕上,即使没有main定义subtract.py.显然,这不是期望的行为,如果您没有将其作为主脚本运行,则不应执行您的main函数add.py.当你直接运行Python脚本时python scriptname.py,有一个变量集全局到该文件调用__name__,它被赋予字符串"__main__".如果您导入它,则将__name__其设置为其合格的模块名称,例如"scriptname".这使您能够在执行文件时定义不同的行为,而不是由另一个脚本导入文件.