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)]

实现多线程

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

正则表达式匹配中,(.)和(.?)匹配区别?

(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配

(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配