一 、模块循环导入问题

# run , m1, m2的循环导入

#run.py
x=1 # import m1 # print(m1.x) # print(m1.y) # m1.f1() import m2 m2.f2()
#m1.py
print('正在导入m1') def f1(): from m2 import y print(x,y) x='m1'
#m2.py
print('正在导入m2') def f2(): from m1 import x print(x,y) y='m2'

二、区分py文件的两种用途

1、直接运行
2 、被当作模块导入 #run1.py
import spam

 #spam.py

def f1(): print('spam.f1') def f2(): print('spam.f2') # print(__name__) # 当文件被当作脚本直接执行时 ,__name__值为"__main__" # print(__name__) # 当文件被当作模块导入时,__name__值为"模块名" if __name__ == '__main__': print("文件被当作脚本执行时要做的事情") f1() f2()def f1(): print('spam.f1') def f2(): print('spam.f2') # print(__name__) # 当文件被当作脚本直接执行时,__name__值为"__main__" # print(__name__) # 当文件被当作模块导入时 ,__name__值为"模块名" if __name__ == '__main__': print("文件被当作脚本执行时要做的事情") f1() f2()

三 、模块的搜索路径与查找优先级

1、先从内存中已经导入的模块里找

import mmm mmm.f1() import time time.sleep(15) print('='*50) import mmm mmm.f1()

2、然后再查找内置的模块

import sys print(sys.modules) import sys print(sys.path) # 当前执行文件所在的文件夹 import logging print(logging)

3 、最后去sys.path列表中存放的多个文件夹里依次检索

# 示例1: import sys print(sys.path) sys.path.append(r'D:\python全栈15期\aaa\bbb') import ccc ccc.f1() # 示例2: import sys print(sys.path) import aaa.bbb.ccc as c c.f1() from aaa.bbb import ccc ccc.f1()

 

四、软件开发的目录规范

 

ps:在公司里面一般会直接创建一个项目 ,start.py会直接放在根目录下,这样用起来更加方便

#执行文件bin---->start.py------ps:只要短短几行,不要长篇写代码
from core import src src.run()

#配置conf---->settings

import os print(__file__) # D:\python全栈15期\day17\ATM\conf\settings.py BASE_DIR=os.path.dirname(os.path.dirname(__file__)) # D:\python全栈15期\day17\ATM\ log_path = os.path.join(BASE_DIR,'log','access.log')

 ps:__file__指的是当前文件的绝对路径

  os.path

  sys.path

  os.environ把想要在全局看的加载到环境变量

#核心代码core---->src.py

from lib import common def shop(): print("购物功能") common.logger("xxx购买了一堆垃圾") def repay(): print("支付功能") common.logger("fzh支付了100亿") def withdraw(): print('提现') common.logger("fzh提现了200亿") func_dic = { '1': [shop, "购物功能"], '2': [repay, "支付功能"], '3': [withdraw, "提现功能"], } def run(): while True: for k in func_dic: print('%s---%s' % (k, func_dic[k][1])) choice = input("请输入您的操作编号/输入0退出: ").strip() if choice == '0': break if choice in func_dic: func_dic[choice][0]() else: print('指令错误,请重新输入')

#共享文件夹lib---->common.py

import time from conf import settings def logger(msg): with open(settings.log_path, mode='at', encoding='utf-8') as f: log_format = "%s %s\n" % (time.strftime('%Y-%m-%d %H:%M:%S'), msg) f.write(log_format)

#数据---->db

#日志文件log---->自动生成access.log

 

文章来源于网络 ,如有侵权请联系站长QQ61910465删除
本文版权归趣快排SEO www.SeogurUblog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ▶61910465