Python备忘录
创建环境
conda create -n tensorflow python=3.6
循环dict
d = {'a': 1}
for key, value in d.items():
print(key, value)
vars
vars 会执行type实现的__dict__方法
vars(str)
杂七杂八
每个文件前面加:
#!/usr/bin/python
# coding=utf8
初始化数组为N个相同值,如: arr = [0] * 26,或 arr = [0 for i in range(26)]
char和ASCII码值之间转换: ord(‘a’) ==> 97 chr(97) ==> ‘a'
拷贝一份list或数组,直接slice操作,下标从最小到最大 a = [0] b = a[:]
python的chardet模块的detect函数能够检测字符串的编码
ipython里面,可以用%timeit函数测试某个操作的速度
a = [0] %timeit a.sort()
zip
把2个数组变成2个tuple的数组
>>> zip([784, 50], [50, 10])
[(784, 50), (50, 10)]
实现多线程
- 一种是通过继承Thread类,重写它的run方法
- 另一种是创建一个threading.Thread对象,在它的初始化函数(init)中将可调用对象作为参数传入
GIL
GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
python2和python3的range(100)的区别
python2返回列表,python3返回迭代器,节约内存
new and init
self是由__new__方法返回的,如果__new__方法创建的实例是当前类的实例,则会自动调用__init__
with
class Sample:
def __init__(self):
pass
def __enter__(self):
return "aa"
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit')
with Sample() as sample:
print(f'do: {sample}')
表示原始字符
r , 表示需要原始字符串,不转义特殊字符
a = 'aaa\tbbb'
print(a)
a = r'aaa\tbbb'
print(a)
python2和python3区别?列举5个
1、Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi')
Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比 如 print 'hi'
2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存
3、python2中使用ascii编码,python中使用utf-8编码
4、python2中unicode表示字符串序列,str表示字节序列
python3中str表示字符串序列,byte表示字节序列
5、python2中为正常显示中文,引入coding声明,python3中不需要
6、python2中是raw_input()函数,python3中是input()函数
可变数据类型和不可变数据类型
不可变: number, string, tuple 可变: list, dict
字典key排序
dic={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
dict(sorted(dic.items(), key=lambda item: item[0]))
collections库的Counter方法
from collections import Counter
a = 'lsdjfsldfjsldfj'
c = Counter(a)
for k, v in c.items():
print(f'{k}:{v}')
正则re.complie作用
re.compile是将正则表达式编译成一个对象,加快速度,并重复使用
a=(1,)b=(1),c=("1") 分别是什么类型的数据?
(1): int ("1"): str (1,): tuple
正则表达式匹配中,(.)和(.?)匹配区别?
(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配
(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配