【012】Python全栈日记-模块

一个模块就是一个包含python代码的文件。一个文件就是一个模块

一、为什么要使用模块

1.现在程序开发文件比较大,都放在一个文件中维护不方便,拆分成多个文件方便维护与管理

2.模块可以增加代码的重用率

二、模块的导入方式

import 模块名

作用:直接导入模块

1、 import 模块 as 别名

作用:直接导入模块,并且为模块起一个别名

2、 from 模块 import 某个函数或者类

作用:直接导入模块中的某个方法或者某个类或变量

3、from 模块 import *

作用:直接导入模块中的所有方法和类和变量

4、当你导入一个模块,Python解析器对模块位置的搜索顺序是:

(1)、当前目录

(2)、如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。

(3)、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

可使用sys.path.append(自定义路径) 添加

三、__all__特殊变量的用法

格式:

__all__ = ['模块','模块','子包'。。。]   #必须是列表

例子:

用import *调用会报错:

__all__限定import *对模块中函数的调用,列表中有的是可以调用的。

四、自定义模块

模块本身就是一个文件,所有py代码都可以在文件中直接书写。不过我们开发共用模块时,最好在模块中书写以下内容。

变量         模块中的属性值

函数         单独的功能

类           相似功能组合

模块测试代码   临时使用,被导入时不会执行

五、测试代码:

测试代码经常在开发模块时用于测试模块的功能,但是测试代码仅在开发和测试时使用,被当作模块导入时不希望测试代码运行。需要使用name特殊变量来操作。

六、包

包就是文件夹,他用于存放文件也就是模块。包中也可以存放包,

在pycharm里右键新建python Package

与普通新建文件不同,新建的包自带一个__init__.py文件

在包中新建个python文件a

同样可以调用:

或者:

1、包的结构

2、包中的__all__

如果包中这么输入:

文件关系:a是求和,b是求积

运行后会发现报错,这时候就需要在__init__文件中加入__all__

在__init__.py文件中,如果没有__all__变量,那么使用from 包 import * 仅导入__init__.py中定义的方法和类及其他内容

在__init__.py文件中,如果定义all变量,那么使用from 包 import * 则会导入all指定的所有模块,而忽略init.py文件中的信息

__all__ = ['模块','模块','子包'。。。]   #必须是列表

七、常用模块

(一)数学模块

(1)引入模块:import math

(2)ceil()

向上取整操作

格式:math.ceil(数值)

返回值:整型

(3)floor()  

向下取整操作

格式:math.floor(数值)

返回值:整型

(4)pow()

计算一个数值的N次方

格式: math.pow(底数,幂)

返回值:浮点类型      该操作相当于**运算但是结果为浮点型

(5)sqrt()

开平方

格式:math.sqrt(数值)

返回值:浮点数

(6)fabs()

对一个数值获取其绝对值操作

格式:math.fabs(数值)

返回值:浮点数

(7)modf()

将一个浮点数拆成整数和小数部分组成的元组

格式:math.modf(数值)

返回值:元组      (小数部分,整数部分)

(8)fsum()

将一个序列的数值进行相加求和

格式:math.fsum(序列)

返回值:浮点数

1、模块提供的常见值

pi

圆周率:3.141592653589793

2、内置函数

(1)round()

  四舍五入操作

  格式:round(数值)

  返回值:整数

  注意:此函数不在math模块当中!!!

(2)abs()

对一个数值获取其绝对值操作

格式:abs(数值)

返回值:可能是整数可以能浮点数

    注意:abs() 他是内建函数 同时返回值根据原类型决定

(3)sum()

将一个序列的数值进行相加求和

格式:sum(序列)

返回值:数值类型

(4)max()

获取最大值

格式1:max(序列)

    返回值:序列中的最大值

格式2:max(参数1,参数2...)

    返回值:多个参数中的最大值

(5)min()

获取最小值

格式1:min(序列)

    返回值:序列中的最小值

格式2:min(参数1,参数2...)

    返回值:多个参数中的最小值

(6)pow()

获取一个数值的N次方

(二)time模块

必须导入 time 模块

import time

1、时间戳

时间戳是一种用于表示时间的方式。从1970年1月1日0时0分0秒0毫秒开始到指定时间的秒数。时间戳也叫做UNIX时间戳,1970年1月1日成为UNIX元年。

作用:是为了方便时间的统一运算。

(1).从1970年1月1日开始计算。

(2).能够使用到2038年的某一天

2、时间元组

时间元组就是一个用于表示时间格式的元组数据而已,他是time模块操作时间的主要方式。

(tm_year=2017, tm_mon=7, tm_mday=4, tm_hour=9, tm_min=4, tm_sec=21, tm_wday=1, tm_yday=185, tm_isdst=0)

格式:(年,月,日,时,分,秒,周几,一年中的第几天,是否是夏令时(0是 其他不是))

(1)time()

功能:获取当前本地的时间戳

格式:time.time()

返回值:浮点数时间戳

(2)localtime()

功能:获取当前时间元组

格式1:time.localtime()

    返回值:本地时间元组

格式2:time.localtime(时间戳)

返回值:指定时间戳的本地时间元组

结果:

(3)gmtime()

功能:获取当前UTC时间元组

格式1:time.gmtime()

    返回值:当前UTC时间元组

格式2:time.gmtime(时间戳)

返回值:指定时间戳的UTC时间元组

(4)mktime()

功能:使用时间元组制作时间戳

格式:time.mktime(时间元组)

返回值:时间戳

注意:按照本地时间来进行计算

输出结果为:

这是把现在时间转为秒。

(5)ctime()

功能:获取本地时间的字符串格式

格式1: time.ctime()

    返回值:时间格式字符串 相当于 asctime(localtime())

格式2: time.ctime(时间戳)

返回值:时间格式字符串 相当于asctime(localtime(时间戳))

结果:

(6)asctime()

功能:返回一个正常的可读的时间字符串

格式:time.asctime(时间元组)

返回值:时间字符串

(7)sleep()

功能:程序睡眠,使得程序在此处等待指定的时间

格式:time.sleep(时间秒数)

返回值:无

(8)strftime()

功能:格式化输出时间字符串(str foramt time)

格式:time.strftime('字符串格式'[,时间元组])

返回值:格式化之后的哦字符串

结果:

格式    含义       

%a    本地(locale)简化星期名称

%A    本地完整星期名称

%b    本地简化月份名称

%B    本地完整月份名称

%c    本地相应的日期和时间表示

%d    一个月中的第几天(01 - 31)

%H    一天中的第几个小时(24 小时制,00 - 23)

%I    一天中的第几个小时(12 小时制,01 - 12)

%j    一年中的第几天(001 - 366)

%m    月份(01 - 12)

%M    分钟数(00 - 59)

%p    本地 am 或者 pm 的相应符   

%S    秒(01 - 61)    

%U    一年中的星期数(00 - 53 星期天是一个星期的开始)第一个星期天之前的所有天数都放在第 0 周   

%w    一个星期中的第几天(0 - 6,0 是星期天)   

%W    和 %U 基本相同,不同的是 %W 以星期一为一个星期的开始

%X    本地相应时间

%y    去掉世纪的年份(00 - 99)

%Y    完整的年份

%z    用 +HHMM 或 -HHMM 表示距离格林威治的时区偏移(H 代表十进制的小时数,M 代表十进制的分钟数)

%%    %号本身

(9)strptime()

功能:解析时间字符串成一个元组,strftime的逆向操作(str parse time)

格式:time.strptime('时间字符串','时间字符串格式')

返回值:时间元组

结果:

3、时间模块的值

timezone

获取当前时区与格林尼治所在时区的相差的秒数(推荐)

altzone

获取当前时区与格林尼治所在时区的相差的秒数,在有夏令时的情况下

(三)String模块

(1)ascii_letters

获取所有ascii码中字母字符的字符串(包含大写和小写)

(2)ascii_uppercase

获取所有ascii码中的大写英文字母

(3)ascii_lowercase

获取所有ascii码中的小写英文字母

(4)digits

获取所有的10进制数字字符

(5)octdigits

获取所有的8进制数字字符

(6)hexdigits

获取所有16进制的数字字符

(7)printable

获取所有可以打印的字符

(8)whitespace

获取所有空白字符

(9)punctuation

获取所有的标点符号

时间模块练习题:

假设你有一张银行卡被冻结,冻结时间为7天,从2018年11月11日15点03分开始冻结,计算冻结还剩余时间,输出为年月日的格式,并每一秒减时间都会变化。

过程:

结果:

八、Python中包、模块、类的区别

先看一个面试标准错误答案:

你要这么回答真的可以回家洗洗睡了。

1、 类

类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用。

2、 模块

模块,在Python可理解为对应于一个文件。在创建了一个脚本文件后,定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。一般用module_name.fun_name,和module_name.var_name进行使用。这样的语义用法使模块看起来很像类或者名字空间,可将module_name 理解为名字限定符。模块名就是文件名去掉.py后缀。

模块属性__name__,它的值由Python解释器设定。如果脚本文件是作为主程序调用,其值就设为__main__,如果是作为模块被其他文件导入,它的值就是其文件名。

3、 包

通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。

作业:

第1题.         写个装饰器,修饰一个函数

        函数的内容是输入一个数返回此数前面所有数的列表推导式

        装饰器要求,计算此函数总共运行了多长时间

第2题.         用生成器实现,斐波那契数列。实现调用一次,打印一个数

第3题、文件管理系统 (尽量使用函数实现)

|  1、查看目录列表(列出目录下所有的文件和目录)

显示出是文件还是目录

|  2、创建目录

|  3、删除文件或目录

需要检查文件或目录是否存在

  可以删除文件也可以删除目录

4、重命名文件或目录

需要检查文件或目录是否存在

|  5、为文件添加前缀

  为当前目录下的所有文件,添加文件名前缀,前缀需要用户输入

|  6、删除文件前缀

      删除当前目录下所有文件名的前缀,前缀需要用户输入

|  7、切换目录

切换目录后,显示目录下所有文件和目录

第4题、

一张银行卡 在2018年10月24日 10:10:10秒 因为三次密码被冻结了,冻结时间是7天,假设现在的时间是2018年10月25 日10:09:08秒,请写一个代码显示您还有多少天多少小时多少分多少秒解冻

要求(dongjie,normal)两个目录是同一目录下的两个目录

1、  函数写在目录:dongjie文件夹下的jiedong.py里

2、  调用的代码写在目录:normal 文件夹下的bank.py 里

猜你喜欢

转载自blog.csdn.net/weixin_39561473/article/details/85912135