在python中导入和执行本地函数

时间:2017-06-18 19:41:07

标签: python

所以我试图在Python3.6中完成一些项目Euler挑战,并且我遇到了这个问题:

def divisors(n):
    divisors = []
    for i in range(2, round(n/2)+1):
        if n%i == 0:
                divisors.append(int(n/i))
    divisors.append(1)
    return sum(divisors)

def checkAmicable(n):
    if divisors(divisors(n)) == n:
        if divisors(n) != n:
            return True
    else:
        return False

def main():
    amicables = []
    for i in range(1,20000):
        if checkAmicable(i) == True:
            if (divisors(i)+i) not in amicables and divisors(i)<10000:
                amicables.append(divisors(i)+i)
    print(sum(amicables))

main()

这是我对问题21(euler21.py)的解决方案,它可以工作并给出所要求的友好对的总和。我希望能够导入函数&#34; divisors(n)&#34;到另一个代码文件(在这种情况下是euler23.py)。

根据我的理解,这应该有效:

from euler21 import divisors
print(divisors(220))

这应该只是打印284,但是,执行它时,整个euler21代码执行,我得到该程序的结果,加上最后的284,如下所示:

31626
284

有什么建议吗?可能是因为我使用命令行而不是IDE?

TL; DR:导入的文件执行整个代码,而不是专门调用的函数。

1 个答案:

答案 0 :(得分:1)

导入时,执行代码以调用main()。使用以下内容:

if __name__ == '__main__':
    main()

这将阻止main()在导入时执行

user@PC:~$ cat ./tester.py
def test():
    print('TEST FUNCTION')

if __name__ == '__main__':
    test()
user@PC:~$ python ./tester.py
TEST FUNCTION
user@PC:~$ python
>>> from tester import *
>>> test()
TEST FUNCTION
>>>