内建属性
常用专有属性 | 说明 | 触发方式 |
---|---|---|
_init_ | 构造初始化函数 | 创建实例后,赋值时使用,在_new_后 |
_new_ | 生成实例所需的属性 | 创建实例时 |
_class_ | 实例所在的类 | 实例._class_ |
_str_ | 实例字符串表示,可读性 | print(类实例), 如果没有实现,使用repr结果 |
_repr _ | 实例字符串表示,准确性 | 类实例 回车 或者 print(repr(类实例)) |
_del_ | 析构 | del删除实例 |
_dict_ | 实例自定义属性 | vars(实例,_dict_) |
_doc_ | 类文档,子类不继承 | help(类或实例) |
_getattribute_ | 属性访问拦截器 | 访问实例属性时 |
_bases_ | 类的所有父类构成元素 | 类名._bases_ |
a = helloword
a # 调用的是repr方法
print(a) # 调用的是str方法
_getattribute_方法例子
class Itcast(object):
def __init__(self, subject1):
self.subject1 = subject1
self.subject2 = 'cpp'
# 属性访问时拦截器,打log,用于制作访问日志
def __getattribute(self,obj):
if obj == 'subject1':
print('log subject1')
return 'redirect python'
else: # 测试时注释这两行,将找不到subject2
return object.__getattribute__(self, obj)
def show(self):
print('this is Itcast')
s = Itcat('python')
print(s.subject1)
print(s.subject2)
结果为:
log subject1
redirect python
cpp
只要访问属性,就会首先调用_getattribute_方法
方法名也是一条属性,方法名指向方法函数
range函数
range(stop) -->list of integers
range(start, stop, step) -->list of integers
start:计数从start开始。默认是0,range(5) == range(0, 5)
stop:到stop结束,但不包括stop。range(0, 5) = [0,1,2,3,4]
seep:每次跳跃的间距,默认为1
map函数
map函数会根据提供的函数对指定序列做映射
map(...)
map(function, sequence,sequence,...) ->list
function是一个函数
sequence是一个或多个序列,取决于function需要几个参数
返回值是一个list
参数序列中的每一个元素分别调用function函数,返回包含每次function函数返回值的list
# 函数需要一个参数
map(lambda x:x*x, [1, 2, 3])
# 结果为[1, 4 ,9]
# 函数需要两个参数
map(lambda x, y: x+y, [1, 2, 3], [4, 5, 6])
# 结果为[5, 7, 9]
def f1(x, y):
return (x, y)
l1 = [0, 1, 2, 3]
l2 = ['sun', 'm', 'n', 'x']
l1 = map(f1, l1, l2)
print(list(l3))
# 结果为[(0, 'sun'),(1, 'm'),(2, 'n'),(3, 'x')]
filter函数
filter函数会对指定的序列进行过滤操作
filter(...)
filter(function or None,sequence) ->list,tuple,or strig
function:接收一个参数,返回值为True或False
sequence:接收一个序列,可以是list,tuple,or string1
filter函数会对序列参数sequence中的每个参数调用function函数,最后返回的结果包含调用结果为True的元素,返回值的类型跟sequence的类型相同
filter(lambda x:x%2, [1, 2, 3, 4])
结果为:[1, 3]
reduce函数
reduce函数:reduce函数会对参数序列中的元素进行积累
reduce(...)
reduce(function, sequence, initiall) ->value
function是一个函数
sequence可以是list,tuple or string
initial:固定初始值
reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以sequence中的前两个元素做参数调用function。注意:function函数不能为None
reduce(lambda x, y:x+y, [1, 2, 3, 4])
结果为: 10
reduce(lambda x, y:x+y, [1, 2, 3, 4], 5)
结果为: 15
sorted函数
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) -> new sorted list
sorted([1,4,2,6,3,5])
[1,2,3,4,5,6]
sorted([1,4,2,6,3,5], reverse=True)
[6,5,4,3,2,1]
functools模块
查看functoools模块中所有的函数
import functools
dir(functools)
partial函数(偏函数)
把一个函数的某些参数设置默认值,返回一个新的参数,调用这个函数会更简单
import functools
def showarg(*arg, **kw):
print(arg)
print(kw)
p1 = functools.partial(showarg, 1, 2, 3) # 返回的是一个新函数的引用,新函数还调用showarg函数,但是默认给函数传1,2,3
p1()
p1(4, 5, 6)
p1(a='python', b='cpp')
p2 = functools.partial(showarg, a=3, b='linux')
p2()
p2(1, 2)
p2(a='python', b='itcast')
结果为
(1,2,3) {}
(1,2,3,4,5,6) {}
(1,2,3) {'a':'python', 'b':'cpp'}
() {'a':'3', 'b':'linux'}
(1,2) {'a':'3', 'b':'linux'}
() {'a':'python', 'b':'itcast'}
wraps函数
使用装饰器时,有一些细节需要被注意。例如:被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生变化)。
添加后由于函数名和函数的doc发生了变化,对测试结果有一些影响,例如:
def note(func):
"note function" # 说明文档
def wrapper():
" wrapper function"
print('note someting')
return func()
return wrapper
@note
def test():
"test function"
print('I am test')
test()
print(help(test))
结果为
note somethong
I am test
wrapper function
所有,python的functools包中提供了一个wraps的装饰器来消除这样的副作用
import functools
def note(func):
"note function" # 说明文档
@functools.wraps(func)
def wrapper():
" wrapper function"
print('note someting')
return func()
return wrapper
@note
def test():
"test function"
print('I am test')
test()
print(help(test))
结果为:
note somethong
I am test
test function
python的标准模块
标准库 | 说明 |
---|---|
builtins | 内建函数默认加载 |
os | 操作系统接口 |
sys | python自身的运行环境 |
functools | 常用的工具 |
json | 编码和解码JSON对象 |
logging | 记录日志,调试 |
multiprocessing | 多进程 |
threading | 多线程 |
copy | 拷贝 |
time | 时间 |
datetime | 日期时间 |
calendar | 日历 |
hashlib | 加密算法 |
random | 生成随机数 |
re | 字符串正则匹配 |
socket | 标准的BSD Socket API |
shutil | 文件和目录管理 |
glob | 基于文件通配符搜索 |
hashlib
用于注册,登录
import hashlib
m = hashlib.md5() # 创建hash对象
print(m)
m.update(b'itcast') # 更新哈希对象以字符串参数
print(m.hexdigest) # 返回十六进制数字字符串