模块module

1 定义

模块是一个包含有一系列变量,函数,类等组成的程序组

模块是一个文件,模块文件名通常以.py结尾

2 作用

   让一些相关的变量,函数,类等有逻辑的组织在一起,让逻辑结构更加清晰

   模块中的变量,函数和类等可提供给其它模块或程序使用

3 分类
1)内置模块(builtins)

在解析器的内部可以直接使用(c语言,c#编写,python编写,java编写的解释器)

2)安装的标准库模块

通常在安装python时已安装具可以直接使用

3)第三方模块(通常开源)

需要自己安装

4)用户自己编写的模块

可以作为其他人的第三方模块

4 模块的导入
1) 语法:

import 模块1 [as 模块新名1],模块2[as 模块新名2],·····

2)示例

import math

import sys,os

3)作用:

将某模块整体导入到当前模块

4)import 语句用法

   模块.属性名

   math.sin(1)

   math.   Tab键

5)help(obj)函数

   可以查看模块相关的文档字符串

6)dir(obj)函数

返回模块所有属性的字符串列表

 

5 另一种模块导入方式

from import 语句

1)语法

from 模块名 import 模块属性名1 [as 属性名1],模块属性名2 [as 属性名2],·········

2)作用

将某个模块内的一个或多个属性(变量,函数,类等)导入到当前模块

3)示例

from math import sin

from math inport pi

from math import factorial (阶乘)as fac

6第三种导入方式

fromimport * 语句

 

1)语法

from 模块名 import  *

2)作用

   将某个模块的所有属性导入当前模块中

3)示例

from math import *

sin(pi/2)

7 dir 函数

dir([对象])  返回一个字符串列表

   1)作用

如果没有参数调用,则返回当前作用域内的所有变量的列表,如果给定一个对象作为参数,则返回这个对象的所有变量列表。

对于模块,返回这个模块的所有变量

对于类,返回类对象的所有变量

对于其它对象,返回所有变量,类变量和基类变量???

8 内置模块

builtins,sys,time,itertools ·····,math

9 标准库模块

random,datetimes,os,xml········

10 获取内置模块/标准库模块

http://docs.python.org

11 时间模块

此模块提供了时间相关的函数,且一直可用

1)导入方式

import time

from time import *

from time import xxxx

时间简介:

a)公元纪年是公元0000年1月1日开始

b)对于unix/linux系统,计算机元年是1970-1-1零时开始,此时间为0

c) UTC时间(Coordinated UniversalTime)是从GreenWich时间开始计算的 (中国东八区),减去8小时,得到英国时间

UTC不会因时区问题而产生错误

d)DST阳光节约时间(Daylight SavingTime),又称夏令时,是经过日照时间修正后的时间

3)时间元组

是一个9个整数组成的,这9个元素从前往后依次为

4位年

月(1-12)

日(1-31)

时(0-59)

分(0-59)

秒(0-59)

星期几(0-6,星期一是0)

元旦开始日(1-366)(距离上一个元旦时间)

夏令时修正时间(-1,0,+1)

注:如果年份小于100,则会自动转换为加上1900后的值

4)模块中的变量和函数
(1)变量

time.timezone   本地区时间与UTC时间差(秒为单位)

time.altzone        夏令时时间与UTC时间差(秒为单位)

                               alternate(间隔的,代替的) [‘ɔ: l’ tə: net]

time.daylight  夏令时校正时间

time.tzname   时区名称的元组

(2)函数

    time.time() 返回计算机元年至当前时间的秒数的浮点数(UTC时间为准)

time.sleep(secs)让程序给定的秒数睡眠一段时间(以秒为单位)

time.gmtime([secs]) 将给定的秒数转换为UTC表达的时间元组

   时间不填写,则显示当前时间

示例:

time.gmtime(661190400.0)

time.struct_time(tm_year=1990, tm_mon=12, tm_mday=14, tm_hour=16, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=348, tm_isdst=0)

 

 

time.mktime(tuple) 将时间元组转换为新纪元秒数时间(UTC为准)

示例

time.mktime((1990, 12, 15, 0, 0, 0, 0, 0, 0))

661190400.0

 

 

time.asctime([tuple]) 将时间元组转成字符串(字符串不是元组的字符串,而是转换成'Tue Oct 1716:28:39 2017')

示例:

time.asctime()

执行结果

    'Tue Oct 17 16:28:39 2017'

 

time.localtime([secs])将UTC秒数转换为时间元组(以本地时间为准)

示例:

time.localtime()

time.struct_time(tm_year=2017, tm_mon=10,tm_mday=17, tm_hour=16, tm_min=13, tm_sec=49, tm_wday=1, tm_yday=290,tm_isdst=0)

 

time.localtime(3600)

time.struct_time(tm_year=1970, tm_mon=1,tm_mday=1, tm_hour=9, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

 

time.clock() 返回字cpu开始运行到现在的时间秒数的浮点数

time.ctime() 返回当前时间的字符串格式

注释:[]里的内容可以省略

 

strftime(...)

       strftime(format[, tuple]) -> string

       

       Convert a time tuple to a string according to a format specification.

       See the library reference manual for formatting codes. When the timetuple

       is not present, current time as returned by localtime() is used.

       

       Commonly used format codes:

       

       %Y  Year with century as a decimalnumber.

       %m  Month as a decimal number[01,12].

       %d  Day of the month as a decimalnumber [01,31].

       %H  Hour (24-hour clock) as adecimal number [00,23].

       %M  Minute as a decimal number[00,59].

       %S  Second as a decimal number[00,61].

       %z  Time zone offset from UTC.

       %a  Locale's abbreviated weekdayname.

       %A  Locale's full weekday name.

                 %b  Locale's abbreviated month name.

       %B  Locale's full month name.

       %c  Locale's appropriate date andtime representation.

       %I  Hour (12-hour clock) as adecimal number [01,12].

       %p  Locale's equivalent of eitherAM or PM.

12 数学模块

模块名称 math

注: linux下内建模块

   Masos 为标准库模块

1)变量

math.e 自然对数e

math.pi 圆周率

2)函数

math.ceil(x) 把x向大的方向取整,

 

比如x=1.2 返回2

 

x=(-1.2)  返回-1

 

math.floor(x) 对x向0取整

 

x=1.2 返回1

x=(-1.2) 返回-2

 

比如x=1.2 返回1 x=(-1.2) 返回-2

math.sqrt(x) 返回x的平方根

math.factorial(x) 求x的阶乘

          [fæ k’ t ɔ: r i ə l] 阶乘

math.log(x[,base]) 返回以base为底x的对数,如果不给出base,则以自然数对数e为底

math.log10(x) 求以10为底的x的对数

math.pow(x,y)   返回x**y

math.fabs(x)  返回浮点数x的绝对值 只适用于float int类型

#角度和弧度转换

math. degrees(x)将弧度x转换为角度 (0~360°)

                 【学位,度】

math.radians(x)  将角度x转换为弧度

    [‘reidjənz] [弧度]

#三角函数

math.sin(x) 返回x的正弦(x为弧度)

math.cos(x) 返回x的余弦

math.tan(x) 返回x的正切

 

 

radians degrees alternate

recursion [ri’ kə: ʃn]

13 系统模块

系统模块 sys

          与系统相关的信息

1) 变量:

sys.path 模块搜索路径,此变量为路径字符串列表path[0]是当前脚本程序的路径名,或是’’

sys.modules 已加载模块的字典

sys.version   版本信息

示例:

>>>sys.version

'3.5.2 (default, Nov 17 2016, 17:05:23)\n[GCC 5.4.0 20160609]'

sys.version_info 程序运行环境的版本信息的命名元组

示例:

>>>sys.version_info

sys.version_info(major=3(主版本), minor=5(次版本), micro=2(微版本),releaselevel='final', serial=0)

sys.platform 平台信息

                        示例

 sys.platform

'linux'

sys.argv 命令行参数  argv[0] 代表当前脚本程序路径名

sys.stdin  标准输入文件

sys.stdout 标准输出文件

sys.stderr       标准错误输出文件

 

命令行 python3 abc.py   在此行python3是命令

                 命令行  python3

                 命令行语法  命令 [选项]

 

查看脚本程序路径名

示例:python3 abc.py cc.py a.txt ‘hello’

sys.argv

执行结果

abc.py cc.py a.txt ‘hello’

注意之间是用英文’ ’空格隔开

                 命令行 python3 abc.py   在此行python3是命令

                 命令行 python3

                 命令行语法  命令 [选项]

sys.copyright  获取python版权相关信息

sys.builtin_module_names  获得python内建模块名称(字符串元组)

示例:

>>> sys.builtin_module_names

('_ast', '_bisect', '_codecs', '_collections', '_datetime', '_elementtree', '_functools', '_heapq', '_imp', '_io', '_locale', '_md5', '_operator', '_pickle', '_posixsubprocess', '_random', '_sha1', '_sha256', '_sha512', '_signal', '_socket', '_sre', '_stat', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', 'array', 'atexit', 'binascii', 'builtins', 'errno', 'faulthandler', 'fcntl', 'gc', 'grp', 'itertools', 'marshal', 'math', 'posix', 'pwd', 'pyexpat', 'select', 'spwd', 'sys', 'syslog', 'time', 'unicodedata', 'xxsubtype', 'zipimport', 'zlib')

 

不同系统中内建模块不同

注意其中的熟悉模块

2)函数

sys.exit([code]) 退出程序,正常退出时sys.exit(0)

sys.getrecursionlimit()  得到递归的层次限制值

sys.setrecursionlimit()  设置递归层次限制值

14 自定义模块的编写
1)调用模块和模块在一个路径下

自己编写的模块和内建模块,标准库模块,第三方模块一样导入,也是有三种方式

2)搜索路径(不在同一路径下 )

import 模块名(怎么寻找这个模块)

标准库模块,有自己的路径

内置模块不需要路径,每个模块可直接引入

自己编写模块需要路径了

(1)查询顺序

a) 搜索内置模块

  sys.builtin_modules_name

b)  sys.path提供的路径

   c)  搜索程序运行路径

  d) 后来添加的路径

          例如:

          编写新的模块需要调用别的模块时,需要把在编写的模块中添加,在引入模块前

          importsys

sys.path.append('/home/tarena')

添加后就能导入并访问了

(2)PYTHONPATH环境变量

   python3在linux系统中运行,则linux就是python3的运行环境

 

   此环境变量的值会在python3的解析器启动时自动加载到sys.path列表中

linux/unix 查看环境变量的命令

printenv 命令行

 

export PYTHONPATH=$PYTHONPATH:/home/tarena(只适用于当前环境,例如在一个终端设置完后,在另一个终端是不能用的)

补充1: sys.path 和 PYTHONPATH的关系

sys.path搜索模块或包的路径包括 标准库模块和第三方模块

 

把模块放在主程序执行路径下(当前路径下)

sys.path搜索的现有路径下

内置模块

添加搜索模块路径的方式有两种

第一种:sys.path.append(‘/home/tarena/libs/’)

第二种:

python3启动时时会把pythonpath环境变量下的路径扫描并加载进sys.path中

补充2:

如何在终端启动时自动设置PYTHONPATH环境变量:

   在~/.bashrc文件里面最下面加入:

   exportPYTHONPATH = $PYTHONPATH:/home/tarena/libs

15模块的加载过程:

   (1)在模块导入时,模块内的所有语句会执行(导入后即执行,也加载内存中)__pycache__包中

                        编译                              解释执行

   menu.py--------------->menu.pyc------------------>python3

 

(2)如果一个模块已经导入,则再次导入时,不会重新执行所有语句

16模块化编程的优缺点:

   1有利于多人开发

2使代码更加易于维护

3提高代码的复用率

4模块化编程有助于解决函数名和变量名冲突问题

17 模块的属性
1)__name__属性

用来记录模块自身的名字,分两种情况

1.对于被导入的模块,模块名是去掉前面的路径和’.py’后缀的文件名

2.对于被执行的主模块,模块名为“__main__”

例如:

myadd.py

当直接执行madd.py时,__name__为 ‘__main__’

当myadd.py被其他模块使用时,__name为‘myadd’

示例

>>> import all__

>>> all__.__all__

['name1', 'hello1']

>>> from all__ import  *

>>> __all__

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name '__all__' is not defined

 

(1)作用:

1 记录模块名

2 用来判断是否是主模块

2)__doc__属性

用来绑定模块的文档字符串

(1)模块文档字符串

它是模块中第一行出现的,没赋值给其它变量的字符串

myadd.__doc__   文档字符串

myadd.function().__doc__         函数字符串

3) __all__属性
(1)作用:

当用from import * 语句导入模块式,只是导入__all__列表内属性

__all__属性是用来存放可导出属性的列表

模块中设置__all__属性后,便可以规定哪些是可以导出的属性

 

__all__ = ['name1',"hello1"]  #只有name1,’hello1’可以被导出

def hello1():pass

def hello2():pass

def hello3():pass

 

name1='aishushuishui'

name2 =  'nidaye'

 

 

交互模式下的执行情况

>>> from all__ import *

>>> dir()

['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'hello1', 'name1']

yincang.py

__all__ = ["_abc",'__abc','_name']

 

def _abc(): pass

 

def __abc(): pass

 

def abc(): pass

 

name1 = 'hello'

 

_name = 'hello1'

__name = 'hello2'

import yincang

>>> yincang.__all__

['_abc', '__abc', '_name']

>>> dir(yincang)

['__abc', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name', '__name__', '__package__', '__spec__', '_abc', '_name', 'abc', 'name1']

 

4)__file__属性

   __file__用来记录模块对应的文件路径名

18 模块的隐藏属性

模块中以‘_’或’__’开头,不以‘__’结尾的属性,

在用from 模块名 import * 导入时,不会显示

 

 

 

# yincang.py

def _abc(): pass

 

 

def __abc(): pass

 

 

def abc(): pass

 

name1 = 'hello'

 

_name = 'hello1'

__name = 'hello2'

 

>>> from yincang import *

>>> dir()

['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'abc', 'name1']

 

19 标准库模块
1)随机模块 random

假设导入:

import random as R

(1)函数

 

R.random()

返回一个[0,1)之间的随机数

生成一个1000以内的数,可以将此扩大1000倍

R.getrandbits(nbit)

以长整型的形式返回用nbite位来表示的随机数

如果nbite是8 则返回0~255之间的整数

因为2**8=256

R.uniform(a,b)

uniform 随机,独立,制服

返回[a,b)区间内的随机数

 

生成浮点数或整数

R.randrange([start,]stop[,step])

返回range(start,stop,step中的随机数)

 

生成整数

randint(self, a, b)

    Return random integer in range [a, b], including both end points.

没有步长

生成整数

 

序列的随机

R.choice(seq)

从序列中返回任意1个元素

 

 

R.shuffle(seq)

[‘ʃʌfl] 洗牌 曳步舞

随机指定序列的顺序(乱序序列)

#无返回值直接改变原有seq

 

R.sample(seq,n)

从序列中选择n个随机元素且不重复的元素

import random

 

 

l = [1,2,2,'bob','lucy']

 

print(random.sample(l,2)) #按照下标进行随机取出

 

#执行结果有可能是

[2,2]

(2) 随机数生成算法

https://www.cnblogs.com/ECJTUACM-873284962/p/6926203.html

十一 包 package

1 包的定义

包是将模块以文件夹的组织形式进行分组管理的方法

2 包的作用:

将一系列模块进行分类管理,有利于防止名字冲突,可以在需要时加载一个或部分模块而不是全部模块

3 包的加载

   第一种

import 包名 [as 包别名]

import 包名.模块名 [as 模块别名]

import 包名.模块名.函数名  [as模块别名]

 

import 包名.子包名.模块名 [as 模块别名]

·····

导入立即初始化

mypack/

          __init__.py

          menu.py

          games/

                        __init__.py

                        contra.py

                        supermario.py

                        tanks.py

   office/

                 __init__.py

                 exec.py

                 word.py

import mypack  导入整个包是包内的__init__.py被加载

importmypack.games.tanks  逐层寻找tanks.py模块 会初始化两个__init__.py,然后再加载tanks.py模块

                

第二种

from packageName import moduleName [as  newmodule]

 

from packageName.packagesonName importmoduleName [as newmodule]

 

from packageName.moduleName  import variableName [as newVariable]

from packageName import *

和上面加载的过程一样的,包被加载 [然后模块被加载]

4 __init__.py文件

建包时必须建的文件

1)作用

在包被加载时自动调用

   1.在内部填写包的文档字符串

   2 加载此包所依赖的一些模块或其他包???

2)__all__属性
(1)作用:

用来记录那些包需要导入

当用from 包 import * 语句导入模块时,只查找__all__属性所列出的模块

__all__ 属性只在from包  import  *语句中起作用,也必须写在__init__.py中,加载子包,还有本包的模块

5 包的加载路径

同模块相同,设置方法:

1.可以设置sys.path

2.可以设置PYTHONPATH环境变量

6 包的的加载过程

   模块加载过程如下  

编译                       解释执行

   menu.py--------------->menu.pyc------------------>python3


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值