鱼C论坛

 找回密码
 立即注册
查看: 2072|回复: 7

[学习笔记] Python学习笔记20(1)-----模块学习 New!

[复制链接]
发表于 2020-8-8 17:02:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 极品召唤兽 于 2020-8-9 10:59 编辑



模块概念

在计算机程序的开发过程中,随着程序代码越写越多,写在一个文件里的代码就会越来越长,越来越不容易维护。

为了让代码方便维护,我们将代码进行分类,分别放到不同的文件里。这样,所有的代码都按照一定的规则分布在各个文件里,需要使用的时候只要导入相应的文件即可。在 Python 中,这样的文件被称之为模块(Module)。


Python 提前帮我们把一些常用的函数和变量写到了内置模块中,比如数学计算中常用的开根号方法——math.sqrt() 方法,圆周率 π 的数值——math.pi 等。关于内置模块的更多知识我们下一关会学到。

例子
当我们需要使用模块的时候,只需使用 import 语句导入对应的模块即可。我们来看一个例子,这个例子中有两个模块,一个是 other.py 文件,另一个是 main.py 文件。

# other.py
print('带你打开编程世界的大门')

# main.py
import other  # 导入 other 模块
# 输出:带你打开编程世界的大门

模块导入


我们使用 import 模块名(不需要 .py 后缀)导入模块,相当于我们在 main.py 里借用并运行了 other.py 文件里的代码,因此运行结果是 带你打开编程世界的大门。你可以理解为 Python 会将 import other 语句替换成 other.py 里的代码。

当导入模块后,要使用模块中的变量、函数,需要通过 模块名.变量名 和 模块名.函数名() 的方式。. 表明了从属关系,表示某个模块里面的某个变量或函数。

import 语句还有一种用法是 import ... as ...,比如我们觉得 other 这个模块名太长,就可以用 import other as o,相当于给 other 取了一个别名为 o,之后我们就可以使用 o 来替代 other。

拓展:数据分析常用的 pandas 和 numpy 常被简写成 pd 和 np,所以你会看到 import pandas as pd 和 import numpy as np 这样的写法。


???

另外,当我们需要同时导入多个模块时,可以用逗号隔开。比如 import a, b, c 可以同时导入 a.py、b.py 和 c.py 三个文件。
可以看到,执行 from other import pi, half 后可以直接使用 other.py 里的 pi 和 half,不再需要在前面加 other.。并且同时导入多个变量或函数时,两两之间要用逗号隔开。


需要注意的是:使用 from ... import ... 的方式导入就不能再用 模块名.变量名 和 模块名.函数名 的方式访问模块内的变量或函数了,否则代码将会报错:


                               
登录/注册后可看大图

眩晕警告

                               
登录/注册后可看大图

程序入口
为了指明某个文件是程序入口,我们可以在代码中这样写:

# xxx.py
代码块 A

if __name__ == '__main__':
  代码块 B

上面代码的意思是当 __name__ 的值为 '__main__' 时执行代码块 B,那这里的 __name__ 和 '__main__' 又都是什么呢?请听我慢慢道来:

其实 __name__ 是 Python 里一个特殊的内置变量,它的值默认是模块名。而当文件被直接运行时,即通过命令行执行 python xxx.py 运行代码时,__name__ 的值会被改为 __main__。

所以我们可以根据 __name__ 的这个特性来判断模块是以导入的方式使用,还是作为程序入口文件直接运行,从而执行相对应的操作。比如只有作为程序入口执行时才运行启动程序的代码,否则什么都不做。

def bootstrap():
  print('项目启动')

if __name__ == '__main__':
  bootstrap()
上面这段代码只有在作为程序入口直接运行时才会自动执行 bootstrap() 启动项目,同时也提供了 bootstrap() 函数给其他模块使用。例如:

# main.py
def bootstrap():
  print('项目启动')

if __name__ == '__main__':
  bootstrap()

# other.py
import main

main.bootstrap()

想一想
# other.py
print('我是 other 模块')

if __name__ == '__main__':
  print('我被直接运行了(other)')

# main.py
import other

print('我是 main 模块')

if __name__ == '__main__':
  print('我被直接运行了(main)')
答案刮刮乐
我是 other 模块
我是 main 模块
我被直接运行了(main)



内置模块
除了我们自己写的模块之外,Python 中还内置了大量非常实用的模块。其实,我们之前的代码中就已经使用过几个内置模块了,比如 time 模块和 random 模块。

Python 的内置模块非常多,今天我们介绍几个常用的模块。废话少说,我们直接来看代码!
time 模块
# 导入time 模块
import time

# 暂停程序的执行,参数为秒
time.sleep(3)  # 暂停 3 秒再执行后续代码

time.sleep() 这个方法我们在第一课就见到过,它用于暂停程序的执行,参数为秒。它可以用于防止程序执行过快,比如爬取数据时降低爬取速率防止被封等。

import time

拓展

# 获取当前时间的 Unix 时间戳
print(time.time())
# 输出:1558329240.201314
Unix 时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。Unix 时间戳只是一个单纯不断增长的数字,所以不会存在时区等问题,全球统一,简单便捷。

拓展:在 32 位的机器上 Unix 时间戳的最大值为 2147483647,即 2038 年 1 月 19 日 03:14:07。届时所有 32 位操作系统的时间将会出错,变成 1901 年 12 月 13 日。而 64 位系统的最大值可达到 2900 亿年后的 292277026596 年 12 月 4 日 15:30:08,我们完全不必为此担忧。

Unix 时间戳对计算机来说稍微计算一下就知道现在是什么时间了,但对人类来说可读性就大打折扣了,所以还有对人类友好的 ctime() 方法:
import time

print(time.ctime())
# 输出:Mon May 20 13:14:00 2019


                               
登录/注册后可看大图

datetime 模块
datetime 模块包括很多函数和类,这些函数和类均用于日期和时间的解析、格式化以及计算。老师今天只给你介绍其中的几个,更多的内容等你需要时再自行探索。
# 导入 datetime 模块中的 datetime 对象
from datetime import datetime

# 获取当前时间
print(datetime.now())
# 输出:2019-05-20 13:14:00.201314

# 将 Unix 时间戳转换成时间
print(datetime.fromtimestamp(1558329240.201314))
# 输出:2019-05-20 13:14:00.201314

注意,datetime 模块里有一个同名的 datetime 类,因此我们要写成 from datetime import datetime。

datetime.now() 和 time.ctime() 类似,都是获取人类可读的时间格式,只是 datetime.now() 没有星期几的信息。

有些时候我们拿到 Unix 时间戳却不知道具体时间,可以使用 datetime.fromtimestamp() 方法来将其转换成人类可读的时间格式。

有些时候我们还要进行日期的计算,比如 5 天前是几月几号,10 天后又是几月几号等。这在 Python 中实现起来也不难,我们来看个例子:

from datetime import datetime, timedelta

print(datetime.now() - timedelta(days=5))
# 输出:2019-05-15 13:14:00.201314
timedelta() 在日期计算中很实用,上面代码中的 timedelta(days=5) 表示 5 天,用现在的时间减去 5 天就能得到 5 天前的日期。同理,如果加上 5 天就能得到 5 天后的日期了。


                               
登录/注册后可看大图

如果你英文还不错,这些参数对你来说肯定很简单吧!还有,timedelta() 可以支持同时传入多个参数,比如计算两个半小时前的时间:

from datetime import datetime, timedelta

print(datetime.now() - timedelta(hours=2, minutes=30))
# 输出:2019-05-20 10:44:00.201314

我去了  怎么这么多!!!!
模块这章太恶心了
明天继续QWQ
加油哦



                               
登录/注册后可看大图




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-8 19:10:25 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-10 20:36:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-11 15:22:58 | 显示全部楼层
这个答案刮刮乐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-27 16:04:01 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-27 20:30:03 | 显示全部楼层
冲压
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-30 08:06:19 | 显示全部楼层

回帖奖励 +1 鱼币

支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-30 08:07:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 03:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表