Python模块和包

文章目录

      • 模块的简介
      • 模块的导入方式之import句式
      • from...import...句式
      • 导入语句的其他用法
      • 循环导入
      • 判断文件类型(执行文件、导入文件)
        • 名字的查找顺序
      • 相对导入和绝对导入
      • 包的使用
      • 软件开发目录规范
      • 正则表达式
      • 字符组

模块的简介

模块是Python中非常核心的一块内容,用的非常多,它比较简单.
 
python这门语言:调包侠
PHP是世界上做好的语言
    Python不服气
     
1. 什么是模块?
     模块就是一些列功能的集合,模块中就是提前写好了很多的功能,直接拿来使用
     
2. 为什么要用模块?
     站在巨人的肩膀上,别人写好的一些功能我们把它下载下来直接用在我们自己的项目中,大大提高开发效率
      支付宝支付、微信支付、发短信、验证码、等等很多的服务
      # 别人已经开发好了,给它下载下来,直接挪到我们自己的python文件中使用就行了
     
3. 模块的分类
    1. 内置模块(python解释器原来就存在的,在任何位置,任何时间都可以直接使用)
        eg:time
         
     2. 第三方的(别人写好的模块,人家放在了网上,去网上下载)
     3. 自定义的(我们自己写的模块)
         
4. 模块存在的形式
    一共有4钟形式,只需要掌握21. 我们自己写的python代码(.py文件)
        # 一个py文件就是一个模块
         
    2. 包的形式:就是一系列py文件的组合(文件夹)
        # 文件夹内部有一个__init__.py文件
 
    3. 
     
    4. 
 
"""
    以后我们再开发一些复杂的功能的时候,就可以想想或者查查有没有别人已经写好了,直接下载下来使用
"""
 
# 当你遇到一个你不会的技术栈的时候,一般情况都有人开发好了
 
github:https://github.com/
gitee:https://gitee.com/

模块的导入方式之import句式

import md # 导入模块的时候,只写模块名字,不要写后缀名字
 
"""
    学习模块的时候一定要弄清楚:谁是执行文件,谁是导入文件?
     
    运行当前文件,会导入md文件到此文件中,并且会执行导入文件
     
    导入文件多次,那么,也只会执行一次导入文件中得代码,只需要导入一次即可
     
     
    导入文件的时候发生了什么事儿?
        1. 首先会运行执行文件,产生执行文件的全局名称空间
        2. 运行导入文件
        3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
        4. 会在执行文件中产生一个名字md指向导入文件的名称空间
         
"""
 
# 在执行文件中如何使用导入文件中得数据
# 直接使用模块名字点变量名 直接使用
# money = 999
# print(md.money) # 1000 知名道姓的调用,不会乱
#
# def read1():
#     print('read1')
# md.read1()
 
money=888
md.change()
print(money)

from…import…句式

from md import money,read1,read2,change  # from the md.py
import md
"""
    from...import...句式
        导入模块也会执行导入文件,多次导入也只会执行一次,跟import句式一样
     
    导入文件的时候发生了什么事儿?
        1. 首先会运行执行文件,产生执行文件的全局名称空间
        2. 运行导入文件md
        3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
        4. 会在执行文件中产生一个名字money指向导入文件的名称空间中得money
         
    如果使用from...import...句式的情况,在执行文件中会出现名字冲突的情况(在执行文件中出现了和导入的名字一样的时候)
        出现冲突的时候离谁近用谁的
     
    以后所有的导入语句都写在文件的开头
"""
# money = 999
# print(money)
# from md import money
# print(money)
 
# print(read1)
# read2()
# change()
def read1():
    print('from read1')
read1()

导入语句的其他用法

1. 起别名
     
    from md import money as m
    from md import read1 as r1
    from md import read2 as r2
    import md
 
    def read1():
        print('from read1')
    read1()
    r1()
 
    md.read1()
     
2. 连续导入
    import md
    import time
    import os
    import sys
     
    import md,time,os,sys
3. 通用导入
    from md import *
    from md import *
    read1()
    change()
 
__all__ = ['money', 'read1', 'change']

循环导入

# 在你编码的过程中,循环导入是不能允许出现的
如果你的代码出现了循环导入问题,那就是你的代码设计不合理,及时更正
 

判断文件类型(执行文件、导入文件)

 
if __name__ == '__main__': # md
    read2()
 
if __name__ == '__main__':
    '''在这个判断里面写的代码,只有是以执行文件运行的时候,才会被执行,当被当成导入文件的时候,不会被运行'''
名字的查找顺序
"""
1. 先从内存中查找
2. 再从内置模块中查找
3. 最后去环境变量sys.path中查找
 
如果以上都找不到,直接报错!
"""
 
# 以后再给文件名或者叫模块名起名字的时候一定不能跟内置模块名冲突
 
"""如果找不到,那就去sys.path中查找"""
import sys
print(sys.path)
 
['D:\\Python27\\day20', 'D:\\Python27\\day20', 'D:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_display', 'D:\\Python38\\python38.zip', 'D:\\Python38\\DLLs', 'D:\\Python38\\lib', 'D:\\Python38', 'C:\\Users\\oldboy\\AppData\\Roaming\\Python\\Python38\\site-packages', 'D:\\Python38\\lib\\site-packages', 'D:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
 
# 上面的列表中第一个元素永远是当前文件所在的路径
 
 
以后遇到模块找不到的情况:
  1. 把模块所在的路径添加到sys.path中
      import sys
        sys.path.append(r'D:\Python27\day20\aaa\bbb')
    2. 使用from...import句式
      from aaa.bbb.ccc import m1
        from aaa.bbb.ccc.m1 import f1
 
        f1()
        m1.f1()

相对导入和绝对导入

"""在导入模块的时候,模块的查找始终以执行文件所在的路径为准"""
 
绝对导入:
  它始终是以执行文件所在的sys.path路径为基准查找
 
相对导入:
  """
      .(句点符)
      . 代表的是当前路径
      .. 代表的是上一级路径    
  """
# 相对导入可以打破始终以执行文件及准的查找顺序
from .ccc import m2
from .ccc.ddd import m2
 
只要py文件中出现了相对导入语句(.开头的语句),那么,这个文件就不能当成执行文件了,只能被导入
 

包的使用

什么是包?
  就是文件夹,其实就是文件夹中包含了一些列的py文件(模块)
    # 包就是一些列模块的组合
包和模块有什么区别呢?
  包中有一个特殊文件:__init__.py文件
 
     
"""导包其实就是在导包下的__init__.py文件的!"""

软件开发目录规范

软件开发目录规范就是跟项目中得文件夹起合适的名字的!
 
项目名:
    bin 
      # 放启动文件的 run.py start.py manage.py...
    如果你的启动文件只有一个,也可以不要bin文件夹,可以把启动文件写在项目的跟下
     
    conf (config:配置) 
      # 放项目的配置文件
        settings.py
        '''就是一些初始化的数据'''
    core # 核心的
      # 写一些项目的核心逻辑
        src.py 
          def login():
                pass
            def register():
                pass
    lib # library 库
      # 这个里面一般写项目使用的公共代码
         common.py
            def outer():
                pass
             
   log
    # 日志:就是记录一些在代码运行过程中发生的一些事情,可以是正确的,可以是异常的
      log.log
         
   db
   # database
      跟项目相关的数据存储都存在db、data
         
    api/
      # 接口层
   # 当你自定义文件夹名字的时候,一定要是见名知意, 一定不能出现中文的
setup.py  # 安装模块使用的 python setup.py ...
|-- requirements.txt # 目前用不到---> 
 
      taobao
          time
           os
             requests
             xml
             ...
        # 命令:  
          reqeusts == 1.11.1
            xml = 1.1.1
     # 命令:       
|-- README
  # 就是项目的说明书
 
下周要讲的ATM项目用的就是这个  

正则表达式

 
import re
phone_number = input('please input your phone number : ')
if re.match('^(13|14|15|18)[0-9]{9}$',phone_number):
        print('是合法的手机号码')
else:
        print('不是合法的手机号码')
         
         
正则表达式:
  利用一些特殊的符号匹配出我们想要的数据
 
正则表达式它是一门独立的语言,跟Python、Java等语言没有关系的
所以,如果想在Python中使用正则表达式,需要借助于re模块,内置的
import re
 
"""我们只学习正则的基础,就学习一些简单的正则够我们开发使用就行了"""
 

字符组

[0123456789]  # 0-9之间的数字
[0-9]  # # 0-9之间的数字
[A-Z]  # # A-Z之间的字母
[a-z]  # # a-z之间的字母
 
# 练习题:
匹配:0-9a-zA-Z之间的任意一个
[0-9A-Za-z]
[0-9A-Xa-f]

你可能感兴趣的:(Python,python,开发语言)