Python基础17-模块与包基础02、常用模块之time、random
目录
名字冲突与避免
设置BASE_DIR保证程序能找到模块位置
time
random
名字冲突与避免
在test.py里写下面一段代码,用正则表达式包re进行匹配,匹配出123开头的字符。如果我们在test.py同级写一个re.py,那么Python解释器在进行导入时就会报错。因为Python把执行文件所在目录放进了sys.path里面,python先找到执行文件所在目录里的re.py而不去找python内置的re.py。
因此,写代码的时候应注意文件命名,避免与python内置模块冲突。
以上实验对time、sys等不起作用,因为time、sys等模块是用C语言直接实现的,是内嵌进Python解释器中的。
import reprint(re.findall(r'123', '123456'))
# ['123']
设置BASE_DIR保证程序能找到模块位置
我们知道Python从sys.path里面找模块位置。那么,写好的程序部署到其他环节下就会找不到自定义模块。如何保证程序一定能找到模块的位置呢?
我们把上一篇博文中的程序修改一下,建立两个包。bin包下是程序入口bin.py。my_module包时自定义模块,其中main.py实现逻辑,calc.py实现公用的算法。当bin.py放在bin包下的时候,Python将D:\dev\day21\bin加到sys.path里面,所以找不到和bin同级别的my_module包。此时,bin.py下的from my_module import main就会报错找不到my_module。
解决这个问题的办法是,把这个项目的根基目录D:\dev\day21加进sys.path里面。以后大家都可以用from pkg.subpkg的方式找到所有自定义的模块。为了防止同一个程序在不同环境(计算机)上运行导致的路径不一致(别的计算机上可能是/usr/local/dev/day21),需要找到一个和运行的计算机无关,只与我程序有关的计算路径的办法。
具体做法是,通过程序入口bin.py,找到bin.py的绝对路径,再向上找2层父目录就得到了day21的路径,将这个day21的路径加入sys.path即可。
__file__ 变量的值是被执行文件的文件名bin.py。os.path.abspath(__file__)得到bin.py的绝对路径。对bin.py绝对路径,找所在目录(上一层),再找所在目录(再上一层),得到day21的路径,这就是BASE_DIR,加入到sys.path即可。此时在day21下面找my_module就能找到了。
# bin.pyimport os
import sysBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)from my_module import mainif __name__ == '__main__':main.run()
time
time模块里面的函数都与时间相关。我们已经用过time.sleep(2)函数来是线程睡眠2秒。time提供的其他函数,可以获取用于计算的时间戳,用于取数的结构化时间,还提供了时间和字符串相互转换的函数等有用工具,具体的例子见下面代码和注释。
import time# 时间戳 做计算用
# 1970-01-01 00:00:00 - now
print(time.time())
# 1578209561.4799075 sec# 当地时间,结构化时间,取数用
t = time.localtime()
print(t)
print(t.tm_year, t.tm_wday)
# time.struct_time(tm_year=2020, tm_mon=1, tm_mday=5,
# tm_hour=15, tm_min=38, tm_sec=11, tm_wday=6, tm_yday=5, tm_isdst=0)
# 2020 6# 格林尼治时间,结构化时间,取数用
t = time.gmtime()
print(t)
# time.struct_time(tm_year=2020, tm_mon=1, tm_mday=5,
# tm_hour=7, tm_min=38, tm_sec=11, tm_wday=6, tm_yday=5, tm_isdst=0)# 将结构化时间转换为时间戳
t = time.mktime(time.localtime())# 将结构化时间转换为字符串
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
# 将字符串转换为结构化时间
print(time.strptime('2019-12-24 17:50:01', '%Y-%m-%d %H:%M:%S'))# 直接将结构化时间打印出可读性较好的当前时间,不能自定义格式
print(time.asctime())
# 直接将时间戳打印出可读性较好的当前时间,不能自定义格
print(time.ctime())
# Sun Jan 5 16:10:55 2020
# Sun Jan 5 16:10:55 2020# 另一种比较友好的显示时间的函数
import datetimeprint(datetime.datetime.now())
# 2020-01-05 16:10:55.715002
random
random模块提供与随机数和随机操作相关的函数。生成某个区间内的随机整数、随机浮点数、从有序对象里面随机取出元素、从有序对象里面随机取样n个元素、打乱有序对象元素的顺序等等。用法举例见下面代码和注释。
import random# 产生0-1之间的随机浮点数
print(random.random())
# 产生任意区间的随机浮点数
print(random.uniform(2.3, 7.9))# 产生[1,9]之间的随机整数
print(random.randint(1, 9))
# 产生[1,9)之间的随机整数
print(random.randrange(1, 9))s = ['mysql', 'oracle', 'db2']
# 从有序对象中随机选取一个
print(random.choice(s))
# mysql
# 随机取样,从有序对象中随机取n个组成取样
sample = random.sample(s, 2)
print(sample)
# ['db2', 'oracle']# 打乱次序
li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(li)
print(li)
# [1, 5, 4, 3, 6, 9, 7, 2, 8]
相关文章:

Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: 【百度百科】一个分布式系统基础架构,由Apache基金会所开发。用户能够在不了解分布式底层细节的情况下。开发分布式程序。充分利用集群的威力进行快…

HTTP协议简介
HTTP协议HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在…

计算机组成原理读写周期波形图,第3章存储器层次结构-1讲述.ppt
第3章存储器层次结构-1讲述计算机组成原理 * 计算机组成原理 ——存储器层次结构(1) 2016-3-18 几个基本概念 1、存储器:计算机系统中的记忆设备,用来存放程序和数据。 2、存储元:存储器的最小组成单位,用以存储1位二进制代码。 3…

iOS架构篇-4 架构模式MVVM
iOS架构篇-4 架构模式MVVM MVVM原理MVVM 登录例子View:ViewModel:Model:如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!读者有什么想看的相关技术篇章,欢迎评论留言!QQ交流群:908058499MVVM原理 #mermaid-svg-s6n4t9QkR9OeNy45 .label{fon…

CV00-01-开篇与环境搭建
目录 Intro 环境搭建 TensorFlow搭建 PyTorch搭建 PaddlePaddle搭建 Intro 从今天起学习CV,为期6个月,以三个真实项目为背景学习CV。 目前是第一个项目——车道线检测。时间两个月(共8周),每周五、周日晚上在线…

Spring MVC环境中的文件上传功能实现
在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像、商品图片、邮件附件等等。其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上传和下载有或多或少的…

iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署)
iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署) CI CI是指持续集成,代码的更新会定期自动构建、测试并合并到公共仓库中,方便多分支时解决冲突问题 CD CD是指持续交付和/或持续部署,开发人员改动代码会自动测试提交到仓库,运维实施人员将其部署到生产环境中,方便部…

计算机函数模式的用处是啥,请问怎么理解计算机中的函数?
你的理解有点外行看热闹的意思,呵呵。代码本身就是抽象的,所以“计算机中的函数是一种对代码进行抽象的方式”不能说不对,但是也和没说一样。至于“我们使用抽象出来的函数,而不用关心函数里面的代码是如何组织的”,只…

CV00-03-CV基本操作2
基本操作2 Similarity Transform相似变换 Similarity Transform相似变换:图像形状大小不变,位置发生变化。比如:做平移、旋转。相似变换具有保角性、保比例性,经过相似变换以后原有的角度和比例保持不变。确定一个相似变换矩阵需…

[LeetCode] [C++] 第一轮刷题总结(持续更新~~~)
LeetCode 解题报告 LC_1_解题报告LC_2_解题报告LC_3_解题报告LC_4_解题报告LC_5_解题报告LC_6_解题报告LC_7_解题报告LC_206_解题报告LC_237_解题报告LC_344_解题报告 LeetCode 1. Two Sum 解题思路:两次循环遍历数组,找到两个元素和等于target 注意点&…

Android Studio 在项目中引用第三方jar包
在Android Studio项目中引用第三方jar包的方法: 步骤: 1、在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets {main {jniLibs.srcDirs [libs]}} 点击【Sync Now】,会生成jniLibs文件夹 找到…

android专栏目录
android专栏目录 Android基础篇 android专题-数据库room android专题-蓝牙扫描、连接、读写 Android专题-常用第三方框架 Android高级篇 Android架构篇-1 项目组织架构 Android架构篇-2 国际化多语言 Android架构篇-3 网络接口封装 Android架构篇-4 架构模式MVVM Android架…

东北大学计算机分数线2017,东北大学2017年本科一批录取分数线(全国)
东北大学2017年全国各省各批次集中录取时间为7月6日-27日,在各省录取结束的分批次分科类录取最低分将在本页面持续更新公布,考生录取结果可通过关注东北大学招生办官方微信公众号(neuzs-1923)录取专区查询,最终录取结果请以考生收到的录取通知…

CV00-04-卷积
卷积概念 由于不好进行文字描述(懒),我直接推荐一个博客图像卷积,讲解图像卷积的概念。 图像卷积操作(convolution),或称为核操作(kernel),是进行图像处理的…

unity项目build成webgl时选择生成目录(解决方法)
在unity里点击File>>Build Settings...>>勾选你要生成的Scenes>>选择webgl>>后面Development Build不要勾选:点击build后会让你选择生成的目录,此处要慎重选择,否则会报错! 不要选择到项目所在目录&#…

STL中的nth_element()方法的使用
STL中的nth_element()方法的使用 通过调用nth_element(start, startn, end) 方法可以使第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后&…

Android架构篇-2 国际化多语言
Android架构篇-2 国际化多语言 实现功能: 1.默认采用系统语言 2.语言切换后实时生效 3.支持中英文 4.我的->设置->切换语言 思路:app首次初始设置为系统语言,用户在app内切换语言时发送语言切换事件,刷新所有页面 在AppBaseActivity、AppBaseFragment通过EventB…

齐鲁工业大学计算机读研,齐鲁工业大学考研难吗
齐鲁工业大学考研难吗?1、齐鲁工业大学考研难度算是比较容易。不在大学考研难度排名前100名单之内。2、考研究生难易程度还是看招生院校的地域、名气、排名等因素,生源不同,竞争力度也不同。发达地区特别是像北京,上海这样的大城市…

Python基础18-常用模块之os、sys、json、pickle、shelve、xml、re、logging、configparse、hashlib等
目录 os、os.path sys json pickle、shelve、xml、re、logging、configparse、hashlib未完待续…… os、os.path Python的os模块里面定义了常用的路径、文件操作。 os.curdir # curdir相对路径的当前路径“点” os.pardir # pardir相对路径的父目录“点点”。 os.sep …

剑指offer 重建二叉树 python
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 样例 输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6} 返回二叉树头节点想法: 使用递归,既…

C#中的Liststring泛型类示例
在C#代码中使用一系列字符串(strings)并需要为其创建一个列表时,List<string>泛型类是一个用于存储一系列字 符串(strings)的极其优秀的解决办法。下面一起有一些List<string>泛型类的示例,一起来看看吧。 List示例 下面是一个使用C#创建一个…

计算机检索的优点,专利检索与分析系统拥有哪些优势?
专利检索与分析系统拥有哪些优势?现在很多朋友都在了解专利检索与分析系统又有哪些优势,因为他们需要使用这些系统,不少朋友都会利用业余时间搞各种发明专利,并申请发明专利,在申请之前,人们就需要对专利进…

Android架构篇-1 项目组织架构
Android架构篇-1 项目组织架构 模块化分层 1.结构清晰,各模块代码分离,符合高内聚低耦合,快速定位查找代码 2.团队协作开发灵活,互不影响,各模块完成后合并即可完成整体app 3.抽离公共层、模块层、业务层,方便维护管理 分层架构图 App下的Home(首页)、Mine(我的)、Log…

Python基础19-面向对象基础
目录 面向对象概述 面向对象的一种实现 类的相关知识 对象的相关知识 面向对象属性的查改增删操作 类属性的查改增删 对象属性的查改增删 关于类、对象属性容易混淆额或忽略的地方的说明 面向对象概述 编程发展至今有面向过程编程、函数式编程、面向对象编程三大流派&…

《一杯沧桑》有感
《一杯沧桑》 “每一个人的一生, 都是一仅仅杯子。 仅仅是杯子的大小不一样。 有些杯子, 它能够装下一片汪洋, 而有些杯子, 它却装不下一点忧伤。 …

Android架构篇-3 网络接口封装
Android架构篇-3 网络接口封装 实现功能: 1.暴露参数请求地址url、请求方法method、请求参数params、请求头header、请求响应response、https请求证书 2.支持get、post、文件上传下载、https证书 以封装OKhttp为例: 接口定义 业务层接口定义 public class BusinessSer…

域中计算机设定重启,域中添加计算机设定的步骤
我来和你详细说下吧!既然你已经建立域了,那么就好办了!1。为各台电脑建立域帐号!2.在每台电脑上加域!a、首先在每台电脑上将用户的权限降到USER。b、右键选我的电脑,在计算机名称里面把域一栏里面输入你自己…

浅谈 拓扑排序
我是什么时候想到要学拓扑排序的呢? 在一次模考的时候,有这样一道题,叫做食物链,我是写了记忆化搜索的,然而全场都写了拓扑板子 后来发现我居然不会这么基础的算法,有点慌 下面进入正题 拓扑排序是针对一些…

Python基础20-面向对象:静态、组合、继承与派生、多态、封装、反射、内置attr方法等
目录 静态 静态属性property 类方法classmethod 静态方法staticmethod 组合 继承与派生 继承与派生 继承顺序 在子类中调用父类方法与super 多态 封装 反射 模块的动态导入 内置的attr方法 带双下户线的attr方法__setattr__、__getattr__、__delattr__ __getat…

C++ primer 第三章笔记
chapter 3 字符串,向量,数组 # 命名空间的using声明 头文件不应包含using声明; 注:using namespace std; #标准库类型string 1.string 表示可变长的字符序列; 2.#include<string> 3.字符串字面量 与 string 是不同类型; 4.cctype头文件种定义了一组标准库函数(改变某个字…