关于python的一些笔记 2018-03-01 00:04:54
关于python的一些笔记 2018-03-01 00:04:54
以下是近期写python代码的时候遇到的一些常用的函数和方法,在此记录一下:
isinstance
可以用来判断某变量是否为某个类型,返回一个布尔值
a = 'sherlock'
>>> isinstance(a,str)
True
>>> isinstance(a,int)
False
>>> b = 18
>>> isinstance(b,str)
False
>>> isinstance(b,int)
True
list comprehension(列表生成式)
列表生成式是为了完成如下语句段的简写版:
LST = []
for SOMEITEM in SOMELIST:
(if SOMECONDITION)
RESULT = SOMEOPERATION(SOMEITEM)
LST.append(RESULT)
LST
像这样的语句可以用列表生成式完成,比如:
>>> [x*x for x in range(5)]
[0, 1, 4, 9, 16]
>>> [x*x for x in range(5) if x%3 == 1]
[1, 16]
>>> [x+y for x in range(5) for y in range(1,6)]
[1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8, 5, 6, 7, 8, 9]
>>> [x+y for x in 'ABC' for y in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
可以用for循环,后面跟if可以进行拣选,也可以多重循环,后面跟两个for相当于两重循环,即对两个列表的每两个元素分别操作一次。较为实用的功能。
generator
这个object一般称为生成器,上面说过的list comprehension在列表比较大的时候,比如我想range(9999999),很占内存,所以考虑用generator来避免这个缺点。用圆括号代替方括号就可以生成generator:
>>> (x*x for x in range(5))
<generator object <genexpr> at 0x7fa3d0014a50>
>>> sqr = (x*x for x in range(5))
>>> for i in sqr:
... print i
...
0
1
4
9
16
之所以generator可以避免内存占用问题,是因为generator每次只生成下一个需要迭代的元素,而不是直接都生成成为一个list。
yield
yield可以用来生成一个generator,比如在以下函数里,用yield返回一个generator
>>> def ShowYield():
... for i in range(5):
... yield i*i
...
>>> sh = ShowYield()
>>> type(sh)
<type 'generator'>
>>> for i in sh:
... print i
...
0
1
4
9
16
用yield而不是return返回的函数,在执行sh = ShowYield()时没有调用这个函数,而是在for i in sh中每执行一次就运行一遍def中的循环,把下一个值返回出来。
with
with常常用在对资源的访问,用来应对异常的,即使访问出现异常,也会完成资源的释放,比如关闭文件f.close()或者线程的锁的释放。
常常用在打开文件的过程中:
f = open('sometxt.txt')
data = f.read()
f.close()
# 上述没有异常处理,比如文件打不开,而且需要手动close文件的handle,用with就好多了:
with open('sometxt.txt') as f:
data = f.read()
其他
if CONDITION:
VAL = V1
else:
VAL = V2
可以写成:
VAL = V1 if CONDITION else V2
2018年03月01日00:04:47