python学习笔记
一、Python dir()函数:运行pythonshell窗口(通过开始-〉所有程序-〉python3.5-〉运行IDLE启动pythonshell窗口);1、查询所有函数:dir(__builtins__)2、查看具体函数语法及说明(举例说明):help(input)二、for循环i值修改:foriin range(10) ,你可以在for循环体中修改i的值,但
一、Python dir()函数:运行python shell窗口(通过开始-〉所有程序-〉python3.5-〉运行IDLE启动python shell窗口);
1、查询所有函数:dir(__builtins__)
2、查看具体函数语法及说明(举例说明):help(input)
二、for循环i值修改:for i in range(10) ,你可以在for循环体中修改i的值,但每次循环之后for语句又会重新对i赋值,所以改了也没用;如果想改i值,可以用while,或者,用个生成器
三、常用方法,函数:
1、三引号字符串不赋值的情况下,通常当作跨行注释使用
2、列表中添加单个元素:list1.append('test1') //append()方法是将参数作为一个元素增加到列表的末尾
3、列表中添加多个元素:list1.extend(['test2','test2']) //extend()方法则是将参数作为一个列表去扩展列表的末尾
4、列表中按位置插入元素:list1.insert(0,'我是第一位') //在第一位置插入
5、列表前面几个元素表示:列表[:3] ,访问后面几个元素:列表[3:]
6、列表元素排序:列表名.reverse()反转、列表名.sort(reverse=True)倒序排序、列表名.sort()正序排序、sorted可以获取排序后的列表
7、随机读取列表元素
#使用python random模块的choice方法随机选择某个元素
foo = ['a', 'b', 'c', 'd', 'e']
from random import choice
print choice(foo)
#使用python random模块的sample函数从列表中随机选择一组元素
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
slice = random.sample(list, 5) #从list中随机获取5个元素,作为一个片断返回
print slice
print list #原有序列并没有改变。
8、range生成的是列表list
range(stop)
#注意:默认情况下,的起始值是0。例如range(5)等价于range(0, 5)
range(start, stop[, step])
#start开始,stop结束(但不包括end),step每次跳跃的间距,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
9、copy() 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象 (list)
说明:浅拷贝 另一方法:新列表=列表[ : ]
deepcopy() 深拷贝 拷贝对象及其子对象 (list)
10、clear() 从列表中移除所有元素(list)
#当我们希望内容不被轻易改写的时候,我们使用元组
11、元组插入元素(拼接插入):temp =(1,'二',3,4,5,'六'); temp =temp[:2]+('插入的字符串',)+temp[2:];
12、元组的拷贝:变量=元组[:]
13、元组的删除:del 元组
14、字符串切片:str1='I love you!'; str1[:6]
15、字符串拼接:str1='I love you!';str1=str1[:6]+' me'+str1[6:]; #字符串可以元组方式来操作
16、逐个读取字符串:for i in ‘acdefg’:
17、推导式:[有关A的表达式 for Ain B]
如: [i*i for i in range(10)]
[(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
18、lambda 函数也叫匿名函数,即,函数没有具体的名称。lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。 lambda 函数不能包含命令,
包含的表达式不能超过一个。
19、map函数:根据提供的函数对指定序列做映射,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回,
map(func, *iterables) --> map object
20、filter过滤函数:是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,
filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。:filter(function or None, iterable) --> filter object
22、python中变量作用域及嵌套作用域:Python 的变量名解析机制也称为 LEGB 法则,具体如下:当在函数中使用未确定的变量名时,Python 搜索 4 个作用域:
本地作用域(L),之后是上一层嵌套结构中 def 或 lambda 的本地作用域(E),之后是全局作用域(G),最后是内置作用域(B)。
按这个查找原则,在第一处找到的地方停止。如果没有找到,Python 会报错的。
python中变量的查找作用域优先级变为:局部、外部、全局和内建
global:关键字-可将函数中变量修改为全局变量,慎用
nonlocal:关键字-在嵌套函数中,可将内部函数变量改为外部函数的局部变量
23、python类内部调用自己的方法必须加self:
class tt:
def fa(self):
return 'aa'
def fb(self):
return self.fa()
24、函数加括号和不加括号的区别:
def a(x):
def b(y):
return x+y
return b
print(a)
print(a(2))
print(a(2)(3))
a–>函数a的内存地址
a(x) –>调用a方法,返回b函数对象相当于–>b
a(x)(y)–>b(y)调用b方法返回x和y的值,这里x取的是a方法的参数值,y是b方法的参数值
四、字符串操作函数
capitalize() | 把字符串的第一个字符改为大写 |
casefold() | 把整个字符串的所有字符改为小写 |
center(width) | 将字符串居中,并使用空格填充至长度 width的新字符串 |
count(sub[, start[, end]]) | 返回 sub在字符串里边出现的次数,start和 end参数表示范围,可选。 |
encode(encoding='utf-8', errors='strict') | 以 encoding指定的编码格式对字符串进行编码。 |
endswith(sub[, start[, end]]) | 检查字符串是否以 sub子字符串结束,如果是返回 True,否则返回 False。start和 end 参数表示范围,可选。 |
expandtabs([tabsize=8]) | 把字符串中的 tab符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8。 |
find(sub[, start[, end]]) | 检测 sub是否包含在字符串中,如果有则返回索引值,否则返回 -1,start和 end 参数表示范围,可选。 |
index(sub[, start[, end]]) | 跟 find方法一样,不过如果 sub不在 string中会产生一个异常。 |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。 |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。 |
isdecimal() | 如果字符串只包含十进制数字则返回 True,否则返回 False。 |
isdigit() | 如果字符串只包含数字则返回 True,否则返回 False。 |
islower() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。 |
isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False。 |
isspace() | 如果字符串中只包含空格,则返回 True,否则返回 False。 |
istitle() | 如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False。 |
isupper() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。 |
join(sub) | 以字符串作为分隔符,插入到 sub中所有的字符之间。 |
ljust(width) | 返回一个左对齐的字符串,并使用空格填充至长度为 width的新字符串。 |
lower() | 转换字符串中所有大写字符为小写。 |
lstrip() | 去掉字符串左边的所有空格 |
partition(sub) | 找到子字符串 sub,把字符串分成一个 3元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub则返回 ('原字符串', '', '') |
replace(old, new[, count]) | 把字符串中的 old子字符串替换成 new子字符串,如果 count指定,则替换不超过 count次。 |
rfind(sub[, start[, end]]) | 类似于 find()方法,不过是从右边开始查找。 |
rindex(sub[, start[, end]]) | 类似于 index()方法,不过是从右边开始。 |
rjust(width) | 返回一个右对齐的字符串,并使用空格填充至长度为 width的新字符串。 |
rpartition(sub) | 类似于 partition()方法,不过是从右边开始查找。 |
rstrip() | 删除字符串末尾的空格。 |
split(sep=None, maxsplit=-1) | 不带参数默认是以空格为分隔符切片字符串,如果 maxsplit参数有设置,则仅分隔 maxsplit个子字符串,返回切片后的子字符串拼接的列表。 |
splitlines(([keepends])) | 按照 '\n'分隔,返回一个包含各行作为元素的列表,如果 keepends参数指定,则返回前 keepends行。 |
startswith(prefix[, start[, end]]) | 检查字符串是否以 prefix开头,是则返回 True,否则返回 False。start和 end 参数可以指定范围检查,可选。 |
strip([chars]) | 删除字符串前边和后边所有的空格,chars参数可以定制删除的字符,可选。 |
swapcase() | 翻转字符串中的大小写。 |
title() | 返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。 |
translate(table) | 根据 table的规则(可以由 str.maketrans('a', 'b')定制)转换字符串中的字符。 |
upper() | 转换字符串中的所有小写字符为大写。 |
zfill(width) | 返回长度为 width的字符串,原字符串右对齐,前边用 0填充。 |
五、字符串格式化及转义
字符串格式化符号含义
符 号 | 说 明 |
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化定点数,可指定小数点后的精度 |
%e | 用科学计数法格式化定点数 |
%E | 作用同%e,用科学计数法格式化定点数 |
%g | 根据值的大小决定使用%f活%e |
%G | 作用同%g,根据值的大小决定使用%f或者%E |
格式化操作符辅助指令
符 号 | 说 明 |
m.n | m是显示的最小总宽度,n是小数点后的位数 |
- | 用于左对齐 |
+ | 在正数前面显示加号(+) |
# | 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X' |
0 | 显示的数字前面填充 '0' 取代空格 |
字符串转义字符含义
符 号 | 说 明 |
\' | 单引号 |
\" | 双引号 |
\a | 发出系统响铃声 |
\b | 退格符 |
\n | 换行符 |
\t | 横向制表符(TAB) |
\v | 纵向制表符 |
\r | 回车符 |
\f | 换页符 |
\o | 八进制数代表的字符 |
\x | 十六进制数代表的字符 |
\0 | 表示一个空字符 |
\\ | 反斜杠 |
六、修改变量的作用域
1、函数中修改全局变量的值,可在函数中用global先申明变量,再对变量进行操作
2、内部函数修改上级函数变量的值,可在内部函数中用nonlocal先申明变量为不是局部,再对变量进行操作
七、匿名函数:lambda例如 lambda x,y:x+y
八、内置过滤器函数:filter(function or None, iterable) 求0-9奇数list(filter(lambda x:x%2,range(10)))
内置过滤器函数:map(function, *iterables) 求0到9*2list(map(lambdax:x*2,range(10)))
九、求阶乘:
def factorial():
temp=1
num=int(input('请输一个数:'))
for i in range(1,num+1):
temp=temp*i
return temp
print(factorial())
十、文件操作
文件打开模式
打开模式 | 执行操作 |
'r' | 以只读方式打开文件(默认) |
'w' | 以写入的方式打开文件,会覆盖已存在的文件 |
'x' | 如果文件已经存在,使用此模式打开将引发异常 |
'a' | 以写入模式打开,如果文件存在,则在末尾追加写入 |
'b' | 以二进制模式打开文件 |
't' | 以文本模式打开(默认) |
'+' | 可读写模式(可添加到其他模式中使用) |
'U' | 通用换行符支持 |
文件对象方法
文件对象方法 | 执行操作 |
f.close() | 关闭文件 |
f.read([size=-1]) | 从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回 |
f.readline([size=-1]) | 从文件中读取并返回一行(包括行结束符),如果有size有定义则返回size个字符 |
f.write(str) | 将字符串str写入文件 |
f.writelines(seq) | 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象 |
f.seek(offset, from) | 在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节 |
f.tell() | 返回当前在文件中的位置 |
f.truncate([size=file.tell()]) | 截取文件到size个字节,默认是截取到文件指针当前位置 |
十一、os、os.path模块中关于文件、目录常用的函数使用方法
os模块中关于文件/目录常用的函数使用方法
函数名 | 使用方法 |
getcwd() | 返回当前工作目录 |
chdir(path) | 改变工作目录 |
listdir(path='.') | 列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录) |
mkdir(path) | 创建单层目录,如该目录已存在抛出异常 |
makedirs(path) | 递归创建多层目录,如该目录已存在抛出异常,注意:'E:\\a\\b'和'E:\\a\\c'并不会冲突 |
remove(path) | 删除文件 |
rmdir(path) | 删除单层目录,如该目录非空则抛出异常 |
removedirs(path) | 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常 |
rename(old, new) | 将文件old重命名为new |
system(command) | 运行系统的shell命令 |
walk(top) | 遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])【具体实现方案请看:第30讲课后作业^_^】 |
以下是支持路径操作中常用到的一些定义,支持所有平台 | |
os.curdir | 指代当前目录('.') |
os.pardir | 指代上一级目录('..') |
os.sep | |
os.linesep | 当前平台使用的行终止符(Win下为'\r\n',Linux下为'\n') |
os.name | 指代当前使用的操作系统(包括:'posix', 'nt', 'mac', 'os2', 'ce', 'Java') |
os.path模块中关于路径常用的函数使用方法
函数名 | 使用方法 |
basename(path) | 去掉目录路径,单独返回文件名 |
dirname(path) | 去掉文件名,单独返回目录路径 |
join(path1[, path2[, ...]]) | 将path1, path2各部分组合成一个路径名 |
split(path) | 分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在 |
splitext(path) | 分离文件名与扩展名,返回(f_name, f_extension)元组 |
getsize(file) | 返回指定文件的尺寸,单位是字节 |
getatime(file) | 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
getctime(file) | 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
getmtime(file) | 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
以下为函数返回 True或 False | |
exists(path) | 判断指定路径(目录或文件)是否存在 |
isabs(path) | 判断指定路径是否为绝对路径 |
isdir(path) | 判断指定路径是否存在且是一个目录 |
isfile(path) | 判断指定路径是否存在且是一个文件 |
islink(path) | 判断指定路径是否存在且是一个符号链接 |
ismount(path) | 判断指定路径是否存在且是一个挂载点 |
samefile(path1, paht2) | 判断path1和path2两个路径是否指向同一个文件 |
十二、python异常总结
Python标准异常总结
AssertionError | 断言语句(assert)失败 |
AttributeError | 尝试访问未知的对象属性 |
EOFError | 用户输入文件末尾标志EOF(Ctrl+d) |
FloatingPointError | 浮点计算错误 |
GeneratorExit | generator.close()方法被调用的时候 |
ImportError | 导入模块失败的时候 |
IndexError | 索引超出序列的范围 |
KeyError | 字典中查找一个不存在的关键字 |
KeyboardInterrupt | 用户输入中断键(Ctrl+c) |
MemoryError | 内存溢出(可通过删除对象释放内存) |
NameError | 尝试访问一个不存在的变量 |
NotImplementedError | 尚未实现的方法 |
OSError | 操作系统产生的异常(例如打开一个不存在的文件) |
OverflowError | 数值运算超出最大限制 |
ReferenceError | 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象 |
RuntimeError | 一般的运行时错误 |
StopIteration | 迭代器没有更多的值 |
SyntaxError | Python的语法错误 |
IndentationError | 缩进错误 |
TabError | Tab和空格混合使用 |
SystemError | Python编译器系统错误 |
SystemExit | Python编译器进程被关闭 |
TypeError | 不同类型间的无效操作 |
UnboundLocalError | 访问一个未初始化的本地变量(NameError的子类) |
UnicodeError | Unicode相关的错误(ValueError的子类) |
UnicodeEncodeError | Unicode编码时的错误(UnicodeError的子类) |
UnicodeDecodeError | Unicode解码时的错误(UnicodeError的子类) |
UnicodeTranslateError | Unicode转换时的错误(UnicodeError的子类) |
ValueError | 传入无效的参数 |
ZeroDivisionError | 除数为零 |
以下是 Python内置异常类的层次结构:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +--ConnectionAbortedError
| | +--ConnectionRefusedError
| | +--ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +--UnicodeDecodeError
| +--UnicodeEncodeError
| +--UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+--PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+--BytesWarning
+-- ResourceWarning
十三、python GUI
EasyGui 学习文档【超详细中文版】http://bbs.fishc.com/thread-46069-1-1.html
十四、Python魔法方法详解
魔法方法 | 含义 |
基本的魔法方法 | |
__new__(cls[, ...]) | 1. __new__ 是在一个对象实例化的时候所调用的第一个方法 |
__init__(self[, ...]) | 构造器,当一个实例被创建的时候调用的初始化方法 |
__del__(self) | 析构器,当一个实例被销毁的时候调用的方法 |
__call__(self[, args...]) | 允许一个类的实例像函数一样被调用:x(a, b)调用 x.__call__(a, b) |
__len__(self) | 定义当被 len()调用时的行为 |
__repr__(self) | 定义当被 repr()调用时的行为 |
__str__(self) | 定义当被 str()调用时的行为 |
__bytes__(self) | 定义当被 bytes()调用时的行为 |
__hash__(self) | 定义当被 hash()调用时的行为 |
__bool__(self) | 定义当被 bool()调用时的行为,应该返回 True或 False |
__format__(self, format_spec) | 定义当被 format()调用时的行为 |
有关属性 | |
__getattr__(self, name) | 定义当用户试图获取一个不存在的属性时的行为 |
__getattribute__(self, name) | 定义当该类的属性被访问时的行为 |
__setattr__(self, name, value) | 定义当一个属性被设置时的行为 |
__delattr__(self, name) | 定义当一个属性被删除时的行为 |
__dir__(self) | 定义当 dir()被调用时的行为 |
__get__(self, instance, owner) | 定义当描述符的值被取得时的行为 |
__set__(self, instance, value) | 定义当描述符的值被改变时的行为 |
__delete__(self, instance) | 定义当描述符的值被删除时的行为 |
比较操作符 | |
__lt__(self, other) | 定义小于号的行为:x < y调用 x.__lt__(y) |
__le__(self, other) | 定义小于等于号的行为:x <= y调用 x.__le__(y) |
__eq__(self, other) | 定义等于号的行为:x == y调用 x.__eq__(y) |
__ne__(self, other) | 定义不等号的行为:x != y调用 x.__ne__(y) |
__gt__(self, other) | 定义大于号的行为:x > y调用 x.__gt__(y) |
__ge__(self, other) | 定义大于等于号的行为:x >= y调用 x.__ge__(y) |
算数运算符 | |
__add__(self, other) | 定义加法的行为:+ |
__sub__(self, other) | 定义减法的行为:- |
__mul__(self, other) | 定义乘法的行为:* |
__truediv__(self, other) | 定义真除法的行为:/ |
__floordiv__(self, other) | 定义整数除法的行为:// |
__mod__(self, other) | 定义取模算法的行为:% |
__divmod__(self, other) | 定义当被 divmod()调用时的行为 |
__pow__(self, other[, modulo]) | 定义当被 power()调用或 **运算时的行为 |
__lshift__(self, other) | 定义按位左移位的行为:<< |
__rshift__(self, other) | 定义按位右移位的行为:>> |
__and__(self, other) | 定义按位与操作的行为:& |
__xor__(self, other) | 定义按位异或操作的行为:^ |
__or__(self, other) | 定义按位或操作的行为:| |
反运算 | |
__radd__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rsub__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rmul__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rtruediv__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rfloordiv__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rmod__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rdivmod__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rpow__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rlshift__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rrshift__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rand__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__rxor__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
__ror__(self, other) | (与上方相同,当左操作数不支持相应的操作时被调用) |
增量赋值运算 | |
__iadd__(self, other) | 定义赋值加法的行为:+= |
__isub__(self, other) | 定义赋值减法的行为:-= |
__imul__(self, other) | 定义赋值乘法的行为:*= |
__itruediv__(self, other) | 定义赋值真除法的行为:/= |
__ifloordiv__(self, other) | 定义赋值整数除法的行为://= |
__imod__(self, other) | 定义赋值取模算法的行为:%= |
__ipow__(self, other[, modulo]) | 定义赋值幂运算的行为:**= |
__ilshift__(self, other) | 定义赋值按位左移位的行为:<<= |
__irshift__(self, other) | 定义赋值按位右移位的行为:>>= |
__iand__(self, other) | 定义赋值按位与操作的行为:&= |
__ixor__(self, other) | 定义赋值按位异或操作的行为:^= |
__ior__(self, other) | 定义赋值按位或操作的行为:|= |
一元操作符 | |
__pos__(self) | 定义正号的行为:+x |
__neg__(self) | 定义负号的行为:-x |
__abs__(self) | 定义当被 abs()调用时的行为 |
__invert__(self) | 定义按位求反的行为:~x |
类型转换 | |
__complex__(self) | 定义当被 complex()调用时的行为(需要返回恰当的值) |
__int__(self) | 定义当被 int()调用时的行为(需要返回恰当的值) |
__float__(self) | 定义当被 float()调用时的行为(需要返回恰当的值) |
__round__(self[, n]) | 定义当被 round()调用时的行为(需要返回恰当的值) |
__index__(self) | 1. 当对象是被应用在切片表达式中时,实现整形强制转换 |
上下文管理(with 语句) | |
__enter__(self) | 1. 定义当使用 with语句时的初始化行为 |
__exit__(self, exc_type, exc_value, traceback) | 1. 定义当一个代码块被执行或者终止后上下文管理器应该做什么 |
容器类型 | |
__len__(self) | 定义当被 len()调用时的行为(返回容器中元素的个数) |
__getitem__(self, key) | 定义获取容器中指定元素的行为,相当于 self[key] |
__setitem__(self, key, value) | 定义设置容器中指定元素的行为,相当于 self[key] = value |
__delitem__(self, key) | 定义删除容器中指定元素的行为,相当于 del self[key] |
__iter__(self) | 定义当迭代容器中的元素的行为 |
__reversed__(self) | 定义当被 reversed()调用时的行为 |
__contains__(self, item) | 定义当使用成员测试运算符(in或 not in)时的行为 |
十五、time 模块详解(时间获取和转换)
time 模块 -- 时间获取和转换
time 模块提供各种时间相关的功能
在 Python 中,与时间处理有关的模块包括:time,datetime 以及 calendar
必要说明:
- 虽然这个模块总是可用,但并非所有的功能都适用于各个平台。
- 该模块中定义的大部分函数是调用 C 平台上的同名函数实现,所以各个平台上实现可能略有不同。
一些术语和约定的解释:
- 时间戳(timestamp)的方式:通常来说,时间戳表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量(time.gmtime(0))此模块中的函数无法处理 1970 纪元年以前的日期和时间或太遥远的未来(处理极限取决于 C 函数库,对于 32 位系统来说,是 2038 年)
- UTC(Coordinated Universal Time,世界协调时)也叫格林威治天文时间,是世界标准时间。在中国为 UTC+8
- DST(Daylight Saving Time)即夏令时的意思
- 一些实时函数的计算精度可能低于它们建议的值或参数,例如在大部分 Unix 系统,时钟一秒钟“滴答”50~100 次
时间元祖(time.struct_time):
gmtime(),localtime() 和 strptime() 以时间元祖(struct_time)的形式返回。
索引值(Index) | 属性(Attribute) | 值(Values) |
0 | tm_year(年) | (例如:2015) |
1 | tm_mon(月) | 1 ~ 12 |
2 | tm_mday(日) | 1 ~ 31 |
3 | tm_hour(时) | 0 ~ 23 |
4 | tm_min(分) | 0 ~ 59 |
5 | tm_sec(秒) | 0 ~ 61(见下方注1) |
6 | tm_wday(星期几) | 0 ~ 6(0 表示星期一) |
7 | tm_yday(一年中的第几天) | 1 ~ 366 |
8 | tm_isdst(是否为夏令时) | 0, 1, -1(-1 代表夏令时) |
注1:范围真的是 0 ~ 61(你没有看错哦^_^);60 代表闰秒,61 是基于历史原因保留。
time.altzone
返回格林威治西部的夏令时地区的偏移秒数;如果该地区在格林威治东部会返回负值(如西欧,包括英国);对夏令时启用地区才能使用。
time.asctime([t])
接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2015"(2015年12月11日 周二 18时07分14秒)的 24 个字符的字符串。
time.clock()
用以浮点数计算的秒数返回当前的 CPU 时间。用来衡量不同程序的耗时,比 time.time() 更有用。
Python 3.3 以后不被推荐,由于该方法依赖操作系统,建议使用 perf_counter() 或 process_time() 代替(一个返回系统运行时间,一个返回进程运行时间,请按照实际需求选择)
time.ctime([secs])
作用相当于 asctime(localtime(secs)),未给参数相当于 asctime()
time.gmtime([secs])
接收时间辍(1970 纪元年后经过的浮点秒数)并返回格林威治天文时间下的时间元组 t(注:t.tm_isdst 始终为 0)
time.daylight
如果夏令时被定义,则该值为非零。
time.localtime([secs])
接收时间辍(1970 纪元年后经过的浮点秒数)并返回当地时间下的时间元组 t(t.tm_isdst 可取 0 或 1,取决于当地当时是不是夏令时)
time.mktime(t)
接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)
time.perf_counter()
返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。
time.process_time()
返回当前进程执行 CPU 的时间总和,不包含睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。
time.sleep(secs)
推迟调用线程的运行,secs 的单位是秒。
time.strftime(format[, t])
把一个代表时间的元组或者 struct_time(如由 time.localtime() 和 time.gmtime() 返回)转化为格式化的时间字符串。如果 t 未指定,将传入 time.localtime()。如果元组中任何一个元素越界,将会抛出 ValueError 异常。
format 格式如下:
格式 | 含义 | 备注 |
%a | 本地(locale)简化星期名称 | |
%A | 本地完整星期名称 | |
%b | 本地简化月份名称 | |
%B | 本地完整月份名称 | |
%c | 本地相应的日期和时间表示 | |
%d | 一个月中的第几天(01 - 31) | |
%H | 一天中的第几个小时(24 小时制,00 - 23) | |
%l | 一天中的第几个小时(12 小时制,01 - 12) | |
%j | 一年中的第几天(001 - 366) | |
%m | 月份(01 - 12) | |
%M | 分钟数(00 - 59) | |
%p | 本地 am 或者 pm 的相应符 | 注1 |
%S | 秒(01 - 61) | 注2 |
%U | 一年中的星期数(00 - 53 星期天是一个星期的开始)第一个星期天之前的所有天数都放在第 0 周 | 注3 |
%w | 一个星期中的第几天(0 - 6,0 是星期天) | 注3 |
%W | 和 %U 基本相同,不同的是 %W 以星期一为一个星期的开始 | |
%x | 本地相应日期 | |
%X | 本地相应时间 | |
%y | 去掉世纪的年份(00 - 99) | |
%Y | 完整的年份 | |
%z | 用 +HHMM 或 -HHMM 表示距离格林威治的时区偏移(H 代表十进制的小时数,M 代表十进制的分钟数) | |
%Z | 时区的名字(如果不存在为空字符) | |
%% | %号本身 |
注1:“%p”只有与“%I”配合使用才有效果。
注2:范围真的是 0 ~ 61(你没有看错哦^_^);60 代表闰秒,61 是基于历史原因保留。
注3:当使用 strptime() 函数时,只有当在这年中的周数和天数被确定的时候 %U 和 %W 才会被计算。
举个例子:
1. # I love FishC.com!
2. >>> import time as t
3. >>> t.strftime("a, %d %b %Y%H:%M:%S +0000", t.gmtime())
4. 'a, 24 Aug 2014 14:15:03 +0000'
5.
time.strptime(string[, format])
把一个格式化时间字符串转化为 struct_time。实际上它和 strftime() 是逆操作。
举个例子:
1. # I really love FishC.com!
2. >>> import time as t
3. >>> t.strptime("30 Nov14", "%d %b %y")
4. time.struct_time(tm_year=2014, tm_mon=11,tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=334, tm_isdst=-1)
复制代码
time.time()
返回当前时间的时间戳(1970 纪元年后经过的浮点秒数)
time.timezone
time.timezone 属性是当地时区(未启动夏令时)距离格林威治的偏移秒数(美洲 >0;大部分欧洲,亚洲,非洲 <= 0)
time.tzname
time.tzname 属性是包含两个字符串的元组:第一是当地非夏令时区的名称,第二个是当地的 DST 时区的名称。
更多推荐
所有评论(0)