码迷,mamicode.com
首页 > 编程语言 > 详细

Python自动化开发04

时间:2017-12-10 12:59:15      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:对象   for   fun   方式   round   反序列化   字符   序列化   保留   

装饰器

装饰器: 本质是函数(装饰函数),就是为其他函数添加附加功能
原则:1. 不能修改被装饰器的函数的源代码与调用方式
知识储备:
1. 函数即"变量"
2. 高阶函数
a. 把一个函数名当实参传给另一个函数
b. 返回值中包含函数名
3. 嵌套函数

生成器

特点:
1. 只有调用时才会生成相应的数据
2. 只记录当前位置
3. 只有一个__next__()方法
( i*i for i in range(10) )

迭代器
迭代对象: 可直接作用于for循环的对象统称为可迭代对象:Iterable
可以被next()调用并不断返回下一个值的对象称为迭代器:Iterator

迭代器一定是迭代对象,迭代对象不一定是迭代器
迭代对象可以通过iter()转变为迭代器

In[2]: from collections import Iterable
In[3]: isinstance([],Iterable)
Out[3]: True
In[4]: from collections import Iterator
In[5]: isinstance([],Iterator)
Out[5]: False
In[6]: a = [1, 2, 3, 4]
In[7]: isinstance(a, Iterator)
Out[7]: False
In[8]: b = iter(a)
In[9]: isinstance(b, Iterator)
Out[9]: True

内置方法:
In[2]: bin(255) ----》 数字转为二进制
Out[2]: ‘0b11111111‘

In[4]: ascii([1,2,3]) ----》列表转字符串
Out[4]: ‘[1, 2, 3]‘

a = bytes("abcde",encoding="utf-8")
print(a)
b = bytearray("abcde",encoding="utf-8") ---> 使字符变成列表可更改
print(b[1])
b[1] = 100
print(b)

>>> b‘abcde‘
>>> 98
>>> bytearray(b‘adcde‘)

>>> chr(98) ----> 数字转ascii码
"b"
>>> ord("B") ----》 ascii码转数字
66

code = "(1 + 2) * 5"
c = compile(code, "err.log",‘eval‘) ---》 可执行的字符串代码转为可执行
print(c)
print(eval(c))
##################
<code object <module> at 0x00000260661F3ED0, file "", line 1>
15
#################
In[10]: divmod(5,2) ----》 两数相除,返回商和余数
Out[10]: (2, 1)


eval() 、exec() ----> 字符串转为可执行方法


匿名函数
calc = lambda n:print(n)
calc(5)
---> 5
calc = lambda n:3 if n<4 else n

filter() ---> 过滤
res = filter(lambda n:n>5, range(10))
for i in res:
print(i)

map() ----> 对传入的每个值进行处理
res = map(lambda n: n*n, range(10))
---》[i*2 for i in range(10)]
---》[lambda i:i*2 for i in range(10)]
for i in res:
print(i)

import functools
res = functools.reduce(lambda x,y: x+y, range(10))
print(res)

frozenset([1,2,3,4,5]) ---> 冻结集合,不可改

gloabs() ---> 打印全局变量
locals() ---> 打印局部变量

hex() ---> 16进制
oct() ----> 8进制
pow(3,5) ----> 3**5

round(1.345,2) ---> 保留2位小数

a = {6: 2,8: 0,1: 4, -5: 6}
print(sorted(a.items())) ----》 按key排序
---》 [(-5, 6), (1, 4), (6, 2), (8, 0)]
print(sorted(a.items(),key=lambda x:x[1])) ---》 按value排序
---》 [(8, 0), (6, 2), (1, 4), (-5, 6)]

json不能将函数序列化

json序列化: json.dumps(info) 写入文件

json反序列化: json.loads(f.read()) 读出文件

pickle与json用法相同,能处理共复杂的(函数等。。)

pickle 只能在python中用,json能在java中使用

pickle.dump(info,f) == f.write(pickle.dumps(info))
pickle.load(f) == pickle.loads(f.read())

os.path.abspath(__file__) 返回绝对路径
os.path.dirname() 返回目录

sys.path.append() 添加环境路径

 

知识补充:

if [True for line in context if name in line]:
  print("ok")

查name是否在line中

Python自动化开发04

标签:对象   for   fun   方式   round   反序列化   字符   序列化   保留   

原文地址:http://www.cnblogs.com/sshcy/p/8016387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!