Task08:模块与datetime模块

学习链接(模块)
学习链接 datetime模块

python中的函数包括内建函数、标准库函数、第三方库和用户自定义函数。内建函数可以直接使用,使用库函数必须先把函数所在的模块导入程序中。

  • 内建函数查看
dir(__builtins__)

模块

通过脚本用Python解释器进行编程,从Python解释器退出再进入,那么之前定义的方法和变量就都消失了。Python提供一种方法,可以将这些定义放在文件中,为脚本或者交互式的解释器实例使用,这个文件被称为模块(Module)。
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,已使用模块中的而函数等功能。

在这里插入图片描述
图片来源

什么是模块

  • 容器 用来封装数据
  • 函数 用来封装语句
  • 类 用来封装方法和属性
  • 模块 用来封装程序文件

命名空间

在创建函数、类或者模块时会创建一个新的作用域,而作用域会生成一个命名空间。命名空间是从名称到对象的映射。不同的命名空间中的名字之间没有关系,例如两个函数内定义的两个同名变量x使用时没有冲突,两个模块中定义的两个同名函数foo在使用时只要写为模块名.foo也不会造成冲突。
命名空间因为对象的不同,也有所区别

  • 内置命名空间(Built-in Namespaces):Python
    运行起来,它们就存在了。内置函数的命名空间都属于内置命名空间,所以,我们可以在任何程序中直接运行它们,比如id(),不需要做什么操作,拿过来就直接使用了。
  • 全局命名空间(Module:Global
    Namespaces):每个模块创建它自己所拥有的全局命名空间,不同模块的全局命名空间彼此独立,不同模块中相同名称的命名空间,也会因为模块的不同而不相互干扰。
  • 本地命名空间(Function & Class:LocalNamespaces):模块中有函数或者类,每个函数或者类所定义的命名空间就是本地命名空间。如果函数返回了结果或者抛出异常,则本地命名空间也结束了。

程序在查询上述三种命名空间的时候,就按照从里到外的顺序,即:Local Namespaces --> Global Namesspaces --> Built-in Namesspaces。

导入模块

在Python中,一个文件就是一个模块。例如,
创建 TemperatureConversion.py,TemperatureConversion就是模块名。
要使用模块中的函数,必须要先导入。方法有多种。

# TemperatureConversion.py
def c2f(cel):
    fah = cel * 1.8 + 32
    return fah


def f2c(fah):
    cel = (fah - 32) / 1.8
    return cel
  • 第一种:import 模块名
 - import TemperatureConversion

print('32摄氏度 = %.2f华氏度' % TemperatureConversion.c2f(32))
print('99华氏度 = %.2f摄氏度' % TemperatureConversion.f2c(99))
  • 第二种:from 模块名 import 函数名(还可以只导入模块中的某一个函数,属性或者子类)
from TemperatureConversion import c2f, f2c

print('32摄氏度 = %.2f华氏度' % c2f(32))
print('99华氏度 = %.2f摄氏度' % f2c(99))
  • 第三种:import 模块名 as 新名字
import TemperatureConversion as tc

print('32摄氏度 = %.2f华氏度' % tc.c2f(32))
print('99华氏度 = %.2f摄氏度' % tc.f2c(99))

if __name__ == '__main__'

对于很多编程语言来说,程序都必须要有一个入口,而Python则不同,它属于脚本语言,不像编译型语言那样现将程序编译成二进制再运行,而是动态逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。

PI = 3.14


def main():
    print("PI:", PI)


main()

# PI: 3.14

计算圆面积的 area.py 文件,area.py 文件需要用到 const.py 文件中的 PI 变量。从 const.py 中,我们把 PI 变量导入 area.py:

from const import PI


def calc_round_area(radius):
    return PI * (radius ** 2)


def main():
    print("round area: ", calc_round_area(2))


main()

'''
PI: 3.14
round area:  12.56
'''

const.py 中的 main 函数也被运行了,实际上我们不希望它被运行,因为 const.py 提供的 main 函数只是为了测试常量定义。这时if __name__ == '__main__'派上了用场,我们把 const.py 改一下,添加if __name__ == "__main__"

 PI = 3.14

def main():
    print("PI:", PI)

if __name__ == "__main__":
    main()

运行 const.py,输出如下:

PI: 3.14

运行 area.py,输出如下:

round area:  12.56

__name__:是内置变量,可用于表示当前模块的名字。

import const

print(__name__)
# __main__

print(const.__name__)
# const

由此我们可知:如果一个 .py 文件(模块)被直接运行时,其__name__值为__main__,即模块名为__main__

所以,if __name__ == '__main__'的意思是:当 .py 文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当 .py 文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

搜索路径

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。语法如下,

import sys

print(sys.path)

我们使用 import 语句的时候,Python 解释器是怎样找到对应的文件的呢?

这就涉及到 Python 的搜索路径,搜索路径是由一系列目录名组成的,Python 解释器就依次从这些目录中去寻找所引入的模块。

这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。

搜索路径是在 Python 编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在 sys 模块中的 path 变量中。

Packages

包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
包是有模块和子包组成的一个应用程序执行环境,是一个有层次的文件目录结构。

import A.C.c1

print(A.C.c1(123))

A是最顶层的包,C是它的子包,c1是子包C中的模块。如果要调用模块c1中的函数foo(),可以通过“import 包名.子包名.模块名”把相应地模块导入。

datetime 模块

在这里插入图片描述

datetime是Python中处理日期的标准模块,它提供了4中对日期和时间进行处理的类:

  • datetime
  • date
  • time
  • timedelta

在计算机中,1970年1月1日00:00:00UTC+00:00时区的时刻被称为epoch time(新纪元事件)记为0,当前阅读时间是从epoch time开始的描述,称为是timestamp(时间戳)。时间戳与时区无关,全球各地的计算机在任何时刻的时间戳都是一样的,儿datetime对象则跟时区有关。

datetime类

  • datetime.now(tz=None) 获取当前的日期时间,输出顺序为:年、月、日、时、分、秒、微秒。
  • datetime.timestamp() 获取以 1970年1月1日为起点记录的秒数
  • datetime.fromtimestamp(tz=None) 使用 unixtimestamp 创建一个 datetime。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值