文章目录
-
-
- 模块的简介
- 模块的导入方式之import句式
- from...import...句式
- 导入语句的其他用法
- 循环导入
- 判断文件类型(执行文件、导入文件)
-
- 相对导入和绝对导入
- 包的使用
- 软件开发目录规范
- 正则表达式
- 字符组
模块的简介
模块是Python中非常核心的一块内容,用的非常多,它比较简单.
python这门语言:调包侠
PHP是世界上做好的语言
Python不服气
1. 什么是模块?
模块就是一些列功能的集合,模块中就是提前写好了很多的功能,直接拿来使用
2. 为什么要用模块?
站在巨人的肩膀上,别人写好的一些功能我们把它下载下来直接用在我们自己的项目中,大大提高开发效率
支付宝支付、微信支付、发短信、验证码、等等很多的服务
3. 模块的分类
1. 内置模块(python解释器原来就存在的,在任何位置,任何时间都可以直接使用)
eg:time
2. 第三方的(别人写好的模块,人家放在了网上,去网上下载)
3. 自定义的(我们自己写的模块)
4. 模块存在的形式
一共有4钟形式,只需要掌握2钟
1. 我们自己写的python代码(.py文件)
2. 包的形式:就是一系列py文件的组合(文件夹)
3.
4.
"""
以后我们再开发一些复杂的功能的时候,就可以想想或者查查有没有别人已经写好了,直接下载下来使用
"""
github:https://github.com/
gitee:https://gitee.com/
模块的导入方式之import句式
import md
"""
学习模块的时候一定要弄清楚:谁是执行文件,谁是导入文件?
运行当前文件,会导入md文件到此文件中,并且会执行导入文件
导入文件多次,那么,也只会执行一次导入文件中得代码,只需要导入一次即可
导入文件的时候发生了什么事儿?
1. 首先会运行执行文件,产生执行文件的全局名称空间
2. 运行导入文件
3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
4. 会在执行文件中产生一个名字md指向导入文件的名称空间
"""
money=888
md.change()
print(money)
from…import…句式
from md import money,read1,read2,change
import md
"""
from...import...句式
导入模块也会执行导入文件,多次导入也只会执行一次,跟import句式一样
导入文件的时候发生了什么事儿?
1. 首先会运行执行文件,产生执行文件的全局名称空间
2. 运行导入文件md
3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
4. 会在执行文件中产生一个名字money指向导入文件的名称空间中得money
如果使用from...import...句式的情况,在执行文件中会出现名字冲突的情况(在执行文件中出现了和导入的名字一样的时候)
出现冲突的时候离谁近用谁的
以后所有的导入语句都写在文件的开头
"""
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__':
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
如果你的启动文件只有一个,也可以不要bin文件夹,可以把启动文件写在项目的跟下
conf (config:配置)
settings.py
'''就是一些初始化的数据'''
core
src.py
def login():
pass
def register():
pass
lib
common.py
def outer():
pass
log
log.log
db
跟项目相关的数据存储都存在db、data
api/
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]
[A-Z]
[a-z]
匹配:0-9a-zA-Z之间的任意一个
[0-9A-Za-z]
[0-9A-Xa-f]