zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    python 基础(三) list 的用法
    python 基础(二) string 的用法
    python 基础(四)购物车(list类型练习)
    python 基础(一)猜年龄游戏
    centOS 7 环境搭建之安装 python 3
    centOS 7 环境搭建之安装 JDK 8
    源代码管理相关命令(Git常用命令、Nuget常用命令、CMD常用命令)
    .Net Core 3.0 关于Windows Form和WPF的全面支持
    .Net Core 常用开发工具(IDE和运行时、Visual Studio插件、Visual Studio Code插件)
    .Net Core 精选公众号集合(保持更新)
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12321430.html
Copyright © 2011-2022 走看看