2016-11-30 77 views
-1

在Ruby中,您可以編寫一個類/模塊,使其可以(a)加載到交互式Ruby終端中,而無需實際執行代碼,或者(b)一個shell腳本。

例如,給定文件foo.rb

class Foo 
    def bar 
    puts 'Foo bar' 
    end 
end 

if __FILE__ == $PROGRAM_NAME 
    foo = Foo.new 
    foo.bar 
end 

這將加載Foo類用於irbpry,但不會執行的foo實例化或在方法調用foo.barif語句中結束。

但是,如果在命令行運行ruby foo.bar它將返回"Foo bar"並退出。

是否有Python(v2或v3)等價於此?

我來最接近(2.7)是這樣的,但我覺得有可能是一個更清潔的方式:

import os, sys 

if os.__file__ == sys.argv[0]: 
    # do stuff 
+0

你說的是:'如果__name__ == 「__main__」: 的main() ' – Fallenreaper

+0

但是'__name__ ==「__main __」'是真的,不管你是否在交互式shell中,不是嗎? –

+0

如果您想要創建一個可以獨立運行的文件,並定義添加的腳本,如果該文件獨立運行,可以讓您擁有默認的主文件夾。如果該文件作爲導入的項目運行,它將不會運行main,而只是在您的案例中定義類Foo' – Fallenreaper

回答

2

在您的例子,當你independantly運行的文件VS模塊的一部分,你可以做這樣的事情:

if __name__ == "__main__": 
    main() 

如果Python文件獨立執行,而運行main()

在你的例子中,你可能會想要這樣的東西。

class Foo: 
    def bar(self): 
    print 'Foo bar' 

def main(): 
    foo = Foo() 
    foo.bar() 

if __name__ == "__main__": 
    main() 

我個人喜歡定義一個主要功能上面的例子,但可以很容易地只是做:

if __name__ == "__main__": 
    foo = Foo() 
    foo.bar() 
1

Python模塊包括__name__變量保存模塊的名字。如果它的頂級腳本,名稱是__main__

class Foo: 
    def bar(self): 
    print('Foo bar') 

if __name__ == "__main__": 
    foo = Foo() 
    foo.bar()