从if__name__导入==" __ main __"

时间:2015-08-12 14:54:08

标签: python

您好我正试图从一段运行电位计的代码中提取一些信息。

class KY040
    def x():

    def y():

if __name__ == "__main__"
    def rotaryChange(direction):
        turn = "turned"
        return turn

在另一个代码(相同的目录)中我有#34;来自pot import rotateChange"但是它错误地说不能导入名称rotateChange。

我不能从if语句导入吗?

我没有编写我刚编辑过的原始代码,原始来源:https://github.com/martinohanlon/PiLadyAnneRadio -file是源代码/ KY040

我的编辑:

l1= 0
l2 = 0
def rotaryChange(direction):
    global l1
    global l2
    turn = ""
    l1 = l1 +  int(direction)
    #print l1
    #print "turned : " + str(direction)
    if (l1 != l2):
            if (l1 < l2):
                    print ("clockwise Turn")
                    turn = "clockwise"
            else:
                    print ("anit-clockwise Turn")
                    turn = "anit-clockwise"
    l2 = l1
    return turn

3 个答案:

答案 0 :(得分:3)

字面上if __name__ == '__main__块的整点是提供仅在文件直接执行时执行的代码,而不是在导入文件时执行的代码。

如果您需要导入此功能,请将其移到该区域之外。

答案 1 :(得分:3)

如果在导入模块时执行该语句,则可以。但是,__name__ == '__main__专门用于防止代码运行,除非模块作为主脚本运行,不是,当它仅由另一个模块导入时。如果您希望其他模块使用rotaryChange,则应在if语句之外定义。

答案 2 :(得分:3)

__name__ == "__main__"条件只有在执行python脚本时才会True

python pots.py

如果使用import指令导入包,则if中的所有内容都不会执行,因此rotaryChange函数未定义且无法导入。

基本上,您可以使用此条件来测试您的软件包或将其用作外部程序,如果您(或其他人)导入它,则不会执行所有内容。

class MyClass: pass

if __name__ == "__main__":
   m = MyClass ()
   # Do some test on m

如果您运行python myclass.py,则会执行所有代码,您可以测试MyClass类的行为。但如果有人使用import myclass导入您的软件包,您就不希望执行测试代码,因此请将其放在if __name__ == "__main__":下。

另一种用法是允许用户以&#34;工具&#34;执行您的包,此类包的一个示例是timeit模块。

# import the timeit module and use it
>>> import timeit 
>>> timeit.timeit ('math.exp(1)', setup = 'import math')
# Use the timeit module from the command line
C:\Users\Holt59 python -m timeit 'math.exp(1)' 'import math'