python3   模块

模块 Module

概念: 模块是一个保护有一系统变量、函数、类等组成的程序组;

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

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

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

分类: 1,内置模块(builtins), 在解析器的内部可以直接使用;

,2,安装的标准库模块,安装python时已安装都可以使用;

,3,第三方模块(通常开源),需要自己安装;

4,用户自己编写的模块,(可以作为其他人的第三方模块使用)

模块的导入:

1)  import  语句

import   模块名1  [ as 模块新名1 ]  [模块名2  [ as 模块新名2 ] ]...

例如:#导入数据模块

import  math

#导入系统sys模块和os模块

import   sys,os

用法:模块名.属性名

math.factorial(5)    #求5的阶乘

dir(object) 函数,返回模块的所有属性的字符串列表;

help(object) 函数,可以查看模块文档相关的字符串;

from   import  语句

语法: from  模块名  import  模块属性名1   [ as 属性别名1  ] ,模块属性名2   [ as 属性别名2 ] ,....

作用: 将某模块内的一个或多个属性导入到当前模块;

示例: from    math  import pi

from  math  import sin

from  math  import factorial  as fac

from import  * 语句

语法: from   模块名  import   *

作用:将模块内的所有属性名导入到当前模块

示例: from math  import   *

sin(pi/2)  #1.0

dir()  函数

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

作用:  1,如果没有参数调用,则返回当前作用域内所有变量的列表;

2,如果给定一个对象作为参数,则返回这个对象的所有变量列表;

对于模块,返回这个模块的全部变量; 对于类,返回类对象的所有变量;对于其他对象,返回所有变量,类变量,基类变量;

 import math
math.factorial(5)
120
dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
dir()
['__builtins__', 'cba', 'math', 'sys']
import math
dir()
['__builtins__', 'cba', 'math', 'sys']
dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
dir(pi)
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'pi' is not defined
from math import pi
dir()
['__builtins__', 'cba', 'math', 'pi', 'sys']
pi
3.141592653589793
import os
dir()
['__builtins__', 'cba', 'math', 'os', 'pi', 'sys']
from os import *
dir()
['F_OK', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '__builtins__', '_exit', 'abort', 'access', 'altsep', 'cba', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fstat', 'fsync', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'math', 'mkdir', 'name', 'open', 'os', 'pardir', 'path', 'pathsep', 'pi', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']

内置模块:builtins   , sys, time,itertools.....math

标准库模块: random, os, datetime   , xml .....

http://docs.python.org

时间模块   time

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

导入方式: import time  ;   from  time  import *   ; from time  import   xxx

时间简介:

公元纪年是公元0000年1月1日开始;

对于uninx、linux 系统,计算机元年是从1970年1月1日0时开始,此时时间为0 ;

UTC(Coordinated  Universal Time) 是从Greewich 时间开始计算的;UTC时间不会因时区问题而产生错误  ;

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

时间元组:

是一个9个整数组成的,这个9个元素自前至后依次为为:

四位的年(例1999)

月(1-12)

日(1-31)

时(0-23)

分(0-59)

秒(0-59)

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

元旦开始日(1-366)

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

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

模块中的变量和函数

变量

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

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

time.daylight      夏令时校正时间

time.tzname      时区名称的元组

函数

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

time.sleep(secs)             让程序按给定的秒数睡眠一段时间;

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

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

time.asctime( [tuple] )      将时间元组转换为字符串;

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

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

[ ] 里的内容 代表可以省略

数学模块

模块名  math

注:linux下为内建模块,mac os 为标准库模块

变量:

math.e     自然数e

math.pi     圆周率

函数

math.ceil(x) 对x向上取整, 比如x=1.2 ,返回2
math.floor(x) 对x向下取整, 比如x=1.2 ,返回1
math.sqrt(x) 返回x的平方根
math.factorial(x) 求x的阶乘
math.log(x[, base]) 返回以base为底x的对数,如果不给出base,则以自然对数e为底;
math.log10(x) 求以10为底x的对数
math.pow(x,y) 返回x**y
math.fabs(x) 返回浮点数x的绝对值
#角度和弧度转换
math.degrees(x) 将弧度x转换为角度
math.redians(x) 将角度x转换为弧度
#三角函数
math.sin(x) 返回x的正弦(x为弧度)
math.cos(x) 返回x的余弦
math.tan(x) 返回x的正切

math.asin(x) 返回x的反正弦(x为弧度)
math.acos(x) 返回x的反余弦
math.atan(x) 返回x的反正切

系统模块sys

与系统相关的信息

数据:

sys.path       模块搜索路径 path[0] 是当前脚本程序的路径名,或者是‘ ’ ;

sys.modules    已加载模块的字典;

sys.version      版本信息

sys.version_info   版本信息的命名元组

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

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

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

 sys.path
sys.path[0]
sys.path[1]
sys.modules
sys.modules[0]
sys.version
sys.version[1]
sys.version_info
sys.version.major
sys.argv
sys.argv[0]
sys.copyright
sys.builtin_module_names
('_ast', '_bisect', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_collections', '_csv', '_datetime', '_functools', '_heapq', '_imp', '_io', '_json', '_locale', '_lsprof', '_md5', '_multibytecodec', '_opcode', '_operator', '_pickle', '_random', '_sha1', '_sha256', '_sha512', '_sre', '_stat', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', '_winapi', 'array', 'atexit', 'audioop', 'binascii', 'builtins', 'cmath', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'parser', 'signal', 'sys', 'time', 'winreg', 'xxsubtype', 'zipimport', 'zlib')
 import sys

 #sys.argv 是一个字符串序列
print("参数的个数是:",len(sys.argv))
print(sys.argv)
#python3 sys_argv.py a b
# #参数的个数是:3
#['sys_argv.py' , 'a' , 'b']
#
#chomod +x sys.argv.py
#./sys_argv.py '-l' /home/
#
for x in sys.argv:
print("参数是",x) #
import sys
if len(sys.argv) < 4:
print("用法: ./sys_argv.py 数字 运算符 数字")
sys.exit(0) #退出程序 if sys.argv[2] == "加":
print(float(sys.argv[1]) + float(sys.argv[3]))
elif sys.argv[2] == "乘":
print(float(sys.argv[1]) * float(sys.argv[3]))
#./sys_argv.py 3 加 5 #8
#./sys_argv.py 3 乘 5 #15

函数

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

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

sys.setrecursionlimit(n)   设置递归的最大层次限制值

 sys.getrecursionlimit()
1000
sys.setrecursionlimit(2000)
sys.getrecursionlimit()
2000
sys.setrecursionlimit(1000)
sys.getrecursionlimit()
1000

自定义模块的编写:

 #file : mymod.py
def fac(n):
print("正在计算n的阶乘...") def sum_fac(n):
print("正在计算n的阶乘的和...") #import mymod.py
#dir(mymod)
#mymod.fac(100)
#mymod.sum_fac(100) ##################################################
#test_mymod.py
import mymod
mymod.fac(20)
mymod.sum_fac(30)
#
from mymod import fac as f

模块的搜索路径:

import  模块名     #对应   模块名.py   去哪找?

查找的顺序:1, 搜索内置模块 sys.builtins_modules_name

2,sys.path 提供路径

3,搜索程序运行时路径(绝对路径/当前路径)

PYTHONPATH 环境变量

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

#export    PYTHONPATH=$PYTHONPATH:/home/tarena

#printenv

 sys.builtin_module_names
('_ast', '_bisect', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_collections', '_csv', '_datetime', '_functools', '_heapq', '_imp', '_io', '_json', '_locale', '_lsprof', '_md5', '_multibytecodec', '_opcode', '_operator', '_pickle', '_random', '_sha1', '_sha256', '_sha512', '_sre', '_stat', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', '_winapi', 'array', 'atexit', 'audioop', 'binascii', 'builtins', 'cmath', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'parser', 'signal', 'sys', 'time', 'winreg', 'xxsubtype', 'zipimport', 'zlib') sys.path
#import sys
#sys.path.append("/home/test/")
#import mymod
#dir()
 printenv
echo $PATH
export PATH=$PATH:/home/test/
echo $PATH
mymod

模块加载过程:

1,在模块导入时,模块内的所有语句会执行;

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

模块化编程的优点:

1,有利于多人开发;

2,使代码更加易于维护;

3,提高代码的复用率;

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

模块的属性:

__name__属性:

用来记录自身的名字;

1,对于被导入模块,模块名为去掉路径前缀和“.py” 后缀的文件名;

2,对于被执行的主模块,模块名为'__main__'

 #mymod.py

 def f1():
print("f1被调用。。") def f2():
print("f2被调用。") name = "hello" f1()
print("模块被加载完毕")
###########
>>> import mymod
f1被调用。。
模块被加载完毕
>>> mymod.__name__
'mymod'
>>>
>>> from mymod import f1
>>> from mymod import *
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'mymod', 'name']
>>>
###################
#mymod1.py
def f1():
print("f1被调用。。") def f2():
print("f2被调用。") print("此模块名为:",__name__)
#####
此模块名为: __main__
#####
>>> import mymod1
此模块名为: mymod1
>>>

作用:1,记录模块名,

2,用来判断是否为主模块;

 #mymod2
def f1():
print("f1被调用。。") def f2():
print("f2被调用。") def test():
print("模块测试正在进行中...")
f1()
f2() print("此模块名为:", __name__)
print("#" * 50)
if __name__ == '__main__':
test()
#此模块名为: __main__
###################################################
#模块测试正在进行中...
#f1被调用。。
#f2被调用。

__doc__属性

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

模块的文档字符串是模块中第一行出现的没给赋值给变量的字符串;

 #mymod3.py
'''
此模块有两个函数.
此模块用来演示文档字符串.
此处省略2000字.
''' def f1():
print("f1被调用。。") def f2():
print("f2被调用。") #>>> import mymod3
#>>> dir()
#['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'mymod1', 'mymod3']
#>>> mymod3.__doc__
#'\n此模块有两个函数.\n此模块用来演示文档字符串.\n此处省略2000字.\n'
#>>>
#>>> help(mymod3)
#Help on module mymod3:
#
#NAME
# mymod3
#
#DESCRIPTION
# 此模块有两个函数.
# 此模块用来演示文档字符串.
# 此处省略2000字.
#
#FUNCTIONS
# f1()
#
# f2()
#
#FILE
 #mymod3.py
'''
此模块有两个函数.
此模块用来演示文档字符串.
此处省略2000字.
''' def f1():
'''
此为函数的文档字符串
此处省略200字
'''
print("f1被调用。。") def f2():
print("f2被调用。") #>>>
#
## >>> import mymod3
#>>> mymod3.__doc__
#'\n此模块有两个函数.\n此模块用来演示文档字符串.\n此处省略2000字.\n'
#>>> mymod3.f1.__doc__
#'\n 此为函数的文档字符串\n 此处省略200字\n '
#>>> help(mymod3)
#Help on module mymod3:
#
#NAME
# mymod3
#
#DESCRIPTION
# 此模块有两个函数.
# 此模块用来演示文档字符串.
# 此处省略2000字.
#
#FUNCTIONS
# f1()
# 此为函数的文档字符串
# 此处省略200字
#
# f2()
#

__all__属性

作用:

当用from   import  * 语句导入模块时,只导入__all__列表内的变量(属性)

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

 #mymod4.py
__all__ = [ 'hello1', 'hello2', 'hello3','name1' ]
def hello1():pass def hello2():pass def hello3():pass def hello4():pass def hello5():pass name1 = 'aaa'
name2 = 'bbb' #>>> from mymod4 import *
#>>> dir()
#['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'hello1', 'hello2', 'hello3', 'hello4
#', 'hello5', 'mymod3', 'mymod4', 'name1', 'name2']
#>>>
#加'__all__'
#>>> from mymod4 import *
#>>> dir()
#['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'hello1', 'hello2', 'hello3', 'name1'
#]
#>>>

__file__ 属性

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

模块的隐藏属性

模块中以‘_’ 或‘__’ 开头,不以‘__’结尾的属性,在用from xxx import *  语句导入时,将不被导入到其他模块;

 #mymod5.py
def _abc():
pass def __abc():
pass def abc():
pass name = "hello"
_name = "hello2"
__world = "world..." #>>> from mymod5 import *
#>>> dir()
#['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'abc', 'name']
#>>> abc
#<function abc at 0x00000000026DAE18>
#>>> _abc
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#NameError: name '_abc' is not defined
#>>> name
#'hello'
#>>> _name
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#NameError: name '_name' is not defined
#>>>
#

Python之路,第十三篇:Python入门与基础13的更多相关文章

  1. Python之路(第二十三篇) 面向对象初级:静态属性、静态方法、类方法

    一.静态属性 静态属性相当于数据属性. 用@property语法糖装饰器将类的函数属性变成可以不用加括号直接的类似数据属性. 可以封装逻辑,让用户感觉是在调用一个普通的数据属性. 例子 class R ...

  2. Python之路(第十三篇)time模块、random模块、string模块、验证码练习

    一.time模块 三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.(从 ...

  3. 【Python之路】第九篇--Python基础之线程、进程和协程

    进程与线程之间的关系 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除.线程可与属于同一进程的其它线程共享进程所拥有的全 ...

  4. 【Python之路】特别篇--Python面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  5. Python之路【第九篇】堡垒机基础&数据库操作

    复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:u ...

  6. Python之路(第八篇)Python内置函数、zip()、max()、min()

    一.python内置函数 abs() 求绝对值 例子 print(abs(-2)) all() 把序列中每一个元素做布尔运算,如果全部都是true,就返回true, 但是如果是空字符串.空列表也返回t ...

  7. Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

    一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") ret ...

  8. Python之路(第五篇) Python基本数据类型集合、格式化、函数

    一.变量总结 1.1 变量定义 记录某种状态或者数值,并用某个名称代表这个数值或状态. 1.2 变量在内存中的表现形式 Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是 ...

  9. 【Python之路】特别篇--Python切片

    字符串切片操作 切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割. 注意: 数是可选的,而冒号是必须的. consequence[start:end:step] 切片操作符中的 ...

  10. 【Python之路】特别篇--Python内置函数

    abs() 求绝对值 i = abs(-100) print(i) # 100 all() 循环里面的参数 如果每个元素都为真,那么all返回值为真  假: 0 False None "&q ...

随机推荐

  1. Linux -- 基于zookeeper的java api(二)

    Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...

  2. find中的-exec参数

    1.find中的-exec参数 在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行 find ./ -name "*.txt" -ex ...

  3. Sql server2008如何导入Excel文件数据?

    sql server 中如何使用Excel文件导入数据?我做个测试,首先建立一个测试表(民族表) --创建一个民族表-- create table BdsNation( Uid int not nul ...

  4. Linux c++ time different

    下面这个函数可以得到微秒级别: #include<time.h> int clock_gettime(clockid_t clk_id,struct timespec *tp); 函数&q ...

  5. 逆袭之旅DAY16.东软实训.Oracle.索引

    2018-07-12 14:44:27 四.索引1.创建索引手动创建:create index 索引名 on 表名(列名,[列名,...])create table employee(pno numb ...

  6. laravel中判断当前页面与连接地址是否一致,并添加效果:

  7. bzoj3277

    题解: 后缀自动机 然后抄了一发题解 可以看看这个博客:http://blog.csdn.net/clover_hxy/article/details/53861268 代码: #include< ...

  8. 自己写了一个解析json为table的工具类

    还需要完善的包括,css的封装,触发事件,数据的获得处理: <!DOCTYPE html> <html> <head> <meta charset=" ...

  9. 4.2 C++虚成员函数

    参考:http://www.weixueyuan.net/view/6371.html 总结: virtual关键字仅用于函数声明,如果函数是在类外定义,则不需要再加上virtual关键字了. 在C+ ...

  10. 「版本升级」MyEclipse CI 2018.12.0正式发布

    新版本MyEclipse为WildFly 14新增一个新的服务器连接器,改进性能并新增一些Java 10修复程序.新版本为IDE做了几个核心修复,这是MyEclipse 2018一个更棒的升级. [M ...