名字的查找顺序
run.py m1.py x.py
"""
1. 先从内存中查找 2. 再从内置模块中查找 3. 最后去环境变量sys.path中查找
如果以上都找不到,直接报错!
"""
# 以后再给文件名或者叫模块名起名字的时候一定不能跟内置模块名冲突 # time (built-in)
import sys
print(sys.path)
# ['D:\\Python27\\day20', 'D:\\Python27\\day20', ...]
# 第一个元素就是当前的路径
"""如果找不到,那就去sys.path中查找"""
# 当环境变量sys.paath没有时,我们只需添加路径就行
import sys
sys.path.append(rD:\\Python27\\aaa)
import m1
print(sys.path)
以后遇到模块找不到的情况:
1. 把模块所在的路径添加到sys.path中
import sys
sys.path.append(r'D:\Python27\day20\aaa\bbb')
2. 使用from...import句式
from aaa.bbb import m1
from aaa.bbb.ccc.m1 import f1
f1()
m1.f1()
相对导入和绝对导入
在导入模块的时候,模块的查找始终以执行文件所在的路径为准
1、绝对导入:它始终是以执行文件所在的sys.path路径为基准查找
from bbb import m2
2、相对导入:. (句点符)代表的是当前路径 . . 代表的是上一级路径
# 相对导入可以打破始终以执行文件及准的查找顺序
from .ccc import m2
from .ccc.ddd import m2
"""只要py文件中出现了相对导入(.开头的语句)就不可执行,只能被导入"""
包的使用
1、定义:包就是文件夹,其实就是文件夹中包含了一些列的py文件,就是一些列模块的组合
2、 包中有一个特殊文件:__init__.py文件
# Python Package---ccc
import ccc
print(ccc.x) # 直接调用包,就可以调用包里的__init__的内容
print(ccc.f1)
fi
3、导包:1、首先运行执行文件,产生执行文件的名称空间
2、运行__init__.py文件,产生__init__.py的名称空间,会把该文件的所有名字丢 到该名称空间中
3、在执行文件中产生一个ccc的包名指向包的名称
# 如果想在ccc中调用m1,先在__init__.py中导入m1,便可以在执行文件中用ccc指向了
# 在__init__.py中
from ccc.mi import f1 # 调用ccc文件中的m1文件里的fi函数
# 在执行文件中
import ccc
print(ccc.f1)
f1()
在__init__.py文件中
from ccc.ddd.m3 import fi # 绝对导入
from .ddd.m3 import fi # 相对导入
软件开发目录规范
软件开发目录规范就是跟项目中得文件夹起合适的名字的 !
项目名:
# 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...
README/readme: # 就是项目的说明书
# 当你自定义文件夹名字的时候,一定要是见名知意, 一定不能出现中文的
正则表达式
定义:正则表达式是利用一些特殊的符号匹配出我们想要的数据
# 正则表达式是一门独立的语言,跟Python、Java等语言没有关系的,如果想在Python中使 用则需要借助于re模块,内置的import re
# 字符组:
[0123456789] / [0-9]: 匹配0到数字9
[a-z]:匹配字母a到z
[A-Z]:匹配字母A到Z
# 匹配0-9a-zA-Z之间任意一个
[0-9a-zA-Z]
[0-9A-Xa-f]
实际应用有:
"""手机号验证登录"""
# 1.手机号需要是纯数字
if phone_number.isdigit():
# 2.手机号必须是11位
if len(phone_number) == 11:
# 3. 必须是13、15、16、18等开头
if phone_number.startswihh('13') or phone_number.startswih ('15') or phone_number.startswih('16') or phone_number.startswih('18'):
print('格式合法')
else:
print('请输入合法手机')
else:
print('请输入11位的手机号码,请核对后再输入')
else:
print('手机号必须输入的是纯数字,请重新输入')
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('不是合法的手机号码')