一个有关python包管理的有趣问题

先上代码:

# __init__文件:

#  -*- coding: utf-8 -*-
"""
Created on Sat Apr 29 16:56:22 2017

@author: wang bei bei
"""
import sys,os
sys.path.append(str(sys.argv)[2:-2].replace("\\\\","\\").replace("\\__init__.py",""))
sys.path.append("..")

import time
import temp
if __name__ == "__main__":
    while(1):
        time.sleep(1)
        print(temp.return_unrepeated_url_io())
# temp文件:

# -*- coding: utf-8 -*-
"""
Created on Sat Apr 29 16:56:22 2017

@author: wang bei bei
"""
import time
unrepeated_url_io=0
set_=set()#去重需要用到的set

def return_unrepeated_url_io():
    global unrepeated_url_io
    return unrepeated_url_io
def return_set():
    global set_
    return set_
#直接导入temp.unrepeated_url_io只能得到浅拷贝,对应文件的修改不能体现出来。
#需要调用函数返回最新的数值不断刷新才行
if __name__ == "__main__":
    while(1):
        time.sleep(1)
        unrepeated_url_io=unrepeated_url_io+1
        print(unrepeated_url_io)
#  这个程序的想法很简单,temp文件负责修改变量然后__init__文件负责打印该变量
#  涉及到了跨文件调用全局变量的一点点东西,使用的方法就是每隔一段时间调用
#  return_unrepeated_url_io这个函数返回temp里的全局变量,因为跨文件引用全局
#  变量虽然传的参数使用id()打印出来的是一样的,但是实质上传的只是一个浅拷贝
#  (我也不知道作者为什么要这么设计..)
#  但是非常坑爹的一点是.......使用了 if __name__ == "__main__": 之后竟然出问题了....
#  之前可以实时刷新的功能因为 if __name__ == "__main__":  的出现失效了.....
#  但是在删除了temp中的 if __name__ == "__main__": 后又恢复了......
>>> 接下来是解(猜)释(测)时刻:
1.为什么要有 if __name__ == "__main__": 这玩意??
>>>因为测试需要执行的代码在主函数调用该库文件之后中希望被屏蔽(不执行)
>>>那在__init__调用temp.return_unrepeated_url_io()时测试代码可能就被选择屏蔽了......
>>>所有的修改都不会被传到__init__的主函数中.....最后失效
>>>
>>>
然后要注意的是,两个文件所处的位置在上下级的文件夹时该怎么办?
具体如下:
|---temp.py
|---package
|      | __init__.py

这时候导入sys包
# sys.path.append(str(sys.argv)[2:-2].replace("\\\\","\\").replace("\\__init__.py",""))
# sys.path.append("..")
# 二选一即可
一个有关python包管理的有趣问题_第1张图片
image.png

一个有关python包管理的有趣问题_第2张图片
image.png
一个有关python包管理的有趣问题_第3张图片
image.png
一个有关python包管理的有趣问题_第4张图片
image.png

你可能感兴趣的:(一个有关python包管理的有趣问题)