python学习Day24--模块和包+项目开发规范

【知识点】

1、模块

  (1)from...import.... 

    # 导入了什么就能使用什么,不导入的变量不能使用;

    # 不导入不意味着不存,而是没有建立文件到模块中其他名字的引用;

    # 当模块中导入的方法或者变量 和 本文件重名的时候,那么这个名字的只代表最后一次对它赋值的那个方法或者变量;

1 from my_module import login
2 # 导入了什么就能使用什么,不导入的变量不能使用
3 # 不导入不意味着不存,而是没有建立文件到模块中其他名字的引用
4 def login():
5     print("in my login")
6 # 当模块中导入的方法或者变量 和 本文件重名的时候,那么这个名字的只代表最后一次对它赋值的那个方法或者变量
7 login()

  (2)from...import...as...(重命名,导入多个)

1 from my_module import login as l,name as n

  (3)from...import *

    # 导入模块的所有东西都可以使用了

    # __all__可以控制*导入的内容

 1 __all__ = ['login']
 2 
 3 name = 'alex'
 4 
 5 def login():
 6     print('login',name)
 7 
 8 import sys
 9 my_module = sys.modules[__name__]
10 getattr(my_module,'login')()

【注意】此时,其他引用该模块时,*能控制只能导出login,其他的通过*不能导入

  (4)模块相关的其他知识

    # 把模块当成脚本运行:从本模块中反射本模块中的变量

    # 模块的搜索路径

    # 重新加载模块

    # pyc编译文件

  ① 把模块当成脚本运行:

    # 运行一个py文件的两种方式:

      A、 以模块的形式运行  import my_module

        如果不想模块在导入的情形下执行(比如模块里的print()等内容):在模块里添加如下内容:(脚本运行下都是__name__='__main__')

1  if __name__ == '__main__':
2      print('饿了么')
3      print(__name__,type(__name__)) # '__main__'/'my_module'

【注意】:

    # 在编写py文件的时候,所有不在函数和类中封装的内容都应该写在if __name__=='__main__':之下 (快捷键,打印main按tab)

    # 在使用发射自己模块中的内容的时候,应该写以下内容:

1 import sys 
2 getattr(sys.modules[__name__],'变量名')

      B、直接pycharm运行   cmd运行

  ② pyc编译文件和重新加载模块

    重新加载:(开发时不能使用,拿着玩吧)

    # 在import之后再修改这个被导入的模块,程序是感知不到的,reload这种方式可以强制程序再重新导入一次

1 import aaa
2 import importlib
3 
4 importlib.reload(aaa)  #表示重新加载

   (4)模块的循环引用

    在模块的导入中,不要产生循环引用问题

2、包:集合了一组py文件 提供了一组复杂功能的。

  # 为什么要有包呢?  当提供的功能比较复杂,一个py文件写不下的时候

    # 包里有什么?  包里至少有一个__init__.py

  (1)简单的导入:import 包.包.模块——包.包.模块.变量(使用)

            from 包.包 import 模块(推荐这种)

  (2)导入包  相当于执行了包下面的__init__.py文件(读框架源码的时候)

    # 包中模块的绝对导入:

      ① 在第一级包下面的__init__.py文件里写入要导入的下一级包: from 包 import 包

      ② 在第二级包下面的__init__.py文件里写入要导入的下一级包或模块:from 包.包 import 包/模块

      以此类推往下进行

    # 包中模块的相对导入:

      ① from . import 模块(其中.相当于当前目录,..表示上一层目录)  在包下面的__init__.py文件里写入

      ② 与上面的绝对导入思想一致,只是用 . 获取相对路径

      ③ 相对导入只能被模块执行,不能以脚本执行

  (3)从包里到处一个模块:获取模块的path,然后添加路径:sys.path.append(path)

  (4)从一个包引用另一个包里的模块:

 1 import sys
 2 # 获取路径
 3 ret=__file__.split('/')  # ['D:', 'wendang', 'PyCharmCode', 'MyPycharm', 'day24 模块', 'fff', 'bbb', 'main.py']
 4 base_path='/'.join(ret[:-2]) # 插入‘/’
 5 # 添加路径
 6 sys.path.append(base_path)
 7 print(base_path)
 8 # 导入模块
 9 from xxx import hello
10 hello.func()

3、项目开发规范


时间:2020-02-18          01:07:35

猜你喜欢

转载自www.cnblogs.com/fengxb1213/p/12321430.html