您好我正试图从一段运行电位计的代码中提取一些信息。
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
答案 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'