第20天:名字的查找顺序及绝对与相对导入、包及软件开发目录、正则表达式之字符组

名字的查找顺序 

        在运行执行文件和导入文件的时候会产生全局名称空间,名称空间中名字的查找顺序为:

        1. 先从内存中查找
        2. 再从内置模块中查找
        3. 最后去环境变量sys.path中查找

        写一个py文件main,打印环境变量

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路径为基准查找

        相对导入:.(句点符)代表的是当前路径,可以打破始终以执行文件及准的查找顺序。

        创建一个文件夹m,在文件夹内部创建导入文件m1

import m2
print('这是导入文件m1')

         在文件夹内部创建导入文件m2:

print('这是导入文件m2')

         在根目录下写一个py文件main,并运行:

from m import m1
print('这是执行文件')

         其结果会报错:

Traceback (most recent call last):
  File "D:\python\code\py27_day20\main.py", line 1, in 
    from m import m1
  File "D:\python\code\py27_day20\m\m1.py", line 1, in 
    import m2
ModuleNotFoundError: No module named 'm2'	

        错误原因为:在导入模块的时候,模块的查找始终以执行文件所在的路径为准。

        可以对导入文件m1进行修改,分别用绝对导入和相对导入的方式解决。  

        绝对导入的解决方式:

from m import m1
print('这是导入文件m1')

        相对导入的解决方式:

from . import m2
print('这是导入文件m1')

        运行执行文件后,以上两者其结果皆为:

这是导入文件m2
这是导入文件m1
这是执行文件

包及软件开发目录

        包:

        就是文件夹,其实就是文件夹中包含了一些列的py文件(模块),包中有一个特殊文件:__init__.py文件

        软件开发目录:

        bin:放启动文件的,如果启动文件只有一个,也可以不要bin文件夹,直接把启动文件写在项目的根目录下
        conf (config:配置):放项目的配置文件,初始化一些数据
        core:放一些项目的核心逻辑
        lib:放一些项目使用的公共代码            
        log:日志,就是记录一些在代码运行过程中发生的一些事情,可以是正确的,可以是异常的
        db:存储跟项目相关的数据
        api:接口层
        setup.py:安装模块使用的
        README:项目的说明书       

正则表达式及字符组

        正则表达式就是利用一些特殊的符号匹配出我们想要的数据。

        字符组

        [0123456789]即0-9之间的数字
        [0-9]即0-9之间的数字
        [A-Z]即A-Z之间的字母
        [a-z]即a-z之间的字母

      


       

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