目录

名字冲突与避免

设置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]

Python基础17-模块与包基础02、常用模块之time、random相关推荐

  1. Python模块之二:Python3 常用模块总结

    Python模块之二:Python3 常用模块总结 一.random模块 提供一些随机数获取的相关方法 1.常用方法 1.random():获取[0.0,1.0)范围内的浮点数 2.randint(a ...

  2. Python基础16-模块与包基础01

    目录 初识模块和包 Python常用的内置模块 关键字import和from import.from查找的路径 如何调用 __name__与模块执行 __name__的用法(单元测试) 初识模块和包 ...

  3. python 必备模块和包_Python_异常和模块

    异常处理 单个异常处理: try: print(num) except NameError: print('没有定义变量') except FileNotFoundError: print('找不到文 ...

  4. Python模块和包:导入制作模块、name、模块定位顺序(文件名与模块名重复、功能名与功能名重复、函数名与功能名重复、变量名与模块名重复)、from 模块名 import *__all__列表、包

    一.模块 Python 模块(Module),是⼀个 Python ⽂件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块能定义函数,类和变量,模块⾥也能包含可执⾏的代码. ...

  5. Python之路【第七篇】:常用模块

    一. 模块介绍 1. 什么是模块 在前面的几个章节中我们基本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python ...

  6. python模块大全下载_Python及其常用模块库下载及安装

    一.Python下载:https://www.python.org/downloads/ 二.Python模块下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...

  7. python常用模块用法_python笔记之常用模块用法分析

    python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...

  8. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  9. Python模块和包的介绍(模块含义、用模块好处、模块分类、包和模块的创建)

最新文章

  1. 抢票神器成GitHub热榜第一,支持候补抢票,Python跑起来
  2. android连接usb外设通讯_iOS App连接外设的几种方式
  3. 利用大数据和分析来发展业务,您准备好了吗?
  4. [临时]关于tar.gz .gz的压缩研究
  5. linux命令(51):set 指定行,直接替换并修改文件
  6. 全球及中国植物脂肪酸行业供给前景与需求规模预测报告2022版
  7. 小程序使用vant-dialog组件内容出不来_微信官方小程序同构新方案Kbone全解析
  8. access查询出生日期格式转换_从身份证中提取出生日期的3个方法和计算年龄和星座的方法...
  9. 基于事件驱动架构构建微服务第7部分:在仓储上实现事件溯源
  10. Socket网络编程--Libev库学习(3)
  11. 如何在Vue中使用Font Awesome?
  12. 让你的博文自动带上缩址,方便发到微博客上
  13. 排序算法--希尔排序
  14. Linux下网络抓包工具(ngrep)
  15. matlab遗传算法求解车辆路径问题(一)
  16. AndroidSDK和ADT下载地址
  17. 2021年全国高德地图数据下载
  18. springboot springcloud 启动优化、性能优化
  19. 从零开始设计RISC-V处理器——五级流水线之控制冒险
  20. redis的持久化机制详解

热门文章

  1. python做测试书籍推荐_学习pytest应该观看的书籍?
  2. JavaWeb项目第三次总结_成绩查询的实现
  3. 软件测试实验--性能测试工具LoadRunner
  4. 电子狗显示连接不上服务器,大家觉得我这样做得对吗?行车记录仪新名词:云狗...
  5. html 写一个日志控件 查看log
  6. iOS 模仿支付宝支付到账推送,播报钱数
  7. 使用Powershell批量为Azure资源添加Tags
  8. 一个6年iOS程序员的工作感悟,送给还在迷茫的你
  9. Centos 7使用vsftpd搭建FTP服务器
  10. Jmeter脚本 GUI和非GUI启动方式