Python之路,第十三篇:Python入门与基础13
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的更多相关文章
- Python之路(第二十三篇) 面向对象初级:静态属性、静态方法、类方法
一.静态属性 静态属性相当于数据属性. 用@property语法糖装饰器将类的函数属性变成可以不用加括号直接的类似数据属性. 可以封装逻辑,让用户感觉是在调用一个普通的数据属性. 例子 class R ...
- Python之路(第十三篇)time模块、random模块、string模块、验证码练习
一.time模块 三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.(从 ...
- 【Python之路】第九篇--Python基础之线程、进程和协程
进程与线程之间的关系 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除.线程可与属于同一进程的其它线程共享进程所拥有的全 ...
- 【Python之路】特别篇--Python面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- Python之路【第九篇】堡垒机基础&数据库操作
复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:u ...
- Python之路(第八篇)Python内置函数、zip()、max()、min()
一.python内置函数 abs() 求绝对值 例子 print(abs(-2)) all() 把序列中每一个元素做布尔运算,如果全部都是true,就返回true, 但是如果是空字符串.空列表也返回t ...
- Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") ret ...
- Python之路(第五篇) Python基本数据类型集合、格式化、函数
一.变量总结 1.1 变量定义 记录某种状态或者数值,并用某个名称代表这个数值或状态. 1.2 变量在内存中的表现形式 Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是 ...
- 【Python之路】特别篇--Python切片
字符串切片操作 切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割. 注意: 数是可选的,而冒号是必须的. consequence[start:end:step] 切片操作符中的 ...
- 【Python之路】特别篇--Python内置函数
abs() 求绝对值 i = abs(-100) print(i) # 100 all() 循环里面的参数 如果每个元素都为真,那么all返回值为真 假: 0 False None "&q ...
随机推荐
- 2015-09-21 css学习1
3.设置背景图片 Background-image:url(相对路径) ----123.jpg 图片拉伸铺满: background-size:cover 铺满方向: background-repea ...
- vscode代码保存时自动格式化成ESLint风格(支持VUE)
一.问题 vscode的默认的代码格式化ctrl+shift+f 无法通过eslint的代码风格检查是一个非常蛋疼的问题 同样在进行vue项目开发的时候,使用eslint代码风格检查是没啥问题的,但是 ...
- ActiveMQ 的连接和会话
要了解 connection 和 session 的概念,可以先从 ConnectionState 和 SessionState 入手: // 省略部分代码 public class Connecti ...
- weblogic查看版本号教程
1.查看软件版本号 cd /weblogic/bea/wlserver_10.3/server/lib java -cp weblogic.jar weblogic.version 说明:版本号后边的 ...
- 【内存泄漏】 C/C++内存泄漏及其检测工具
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Po ...
- application Initialization设置导致处理程序ExtensionlessUrlHandler-Integrated-4.0在其模块列表中有一个错误模块问题的解决
HTTP 错误 500.21 - Internal Server Error 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“Ma ...
- InterBase 数据库与驱动 版本不同
[Window Title] Project1 - Delphi 10.1 Berlin - Unit1 [Content] Failed: "unsupported on-disk str ...
- Linux3.10.0块IO子系统流程(2)-- 构造、排序、合并请求
Linux块设备可以分为三类.分别针对顺序访问物理设备.随机访问物理设备和逻辑设备(即“栈式设备”) 类型 make_request_fn request_fn 备注 SCSI 设备等 从bio构 ...
- java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.test.Test
由于我在第二个Activity中指定了进程名字,但是服务却没有指定进程名(默认跟主入口一个进程)所以报错. 网上找到的是 服务 和绑定服务的客户端必须在同一个application或者进程中,所以Ma ...
- linux一些命令的介绍
http://www.runoob.com/linux/linux-command-manual.html 寻找文档操作命令wc -l时,发现一个好的介绍linux操作命令的网站.