当前位置 : 主页 > 编程语言 > python >

python杂记 20200207 离线安装 正则

来源:互联网 收集:自由互联 发布时间:2022-06-15
正则匹配小括号: ss = u'陈奕迅(十年)sdf' ss = '晨光(MG)素描纸' s = re.sub(r'\((.*?)\)',' ',ss) s = re.sub(r'\((.*?)\)',' ',ss) ====== python cookbook:​​https://python3-cookbook.readthedocs.io/zh_CN/latest/index

正则匹配小括号:

ss = u'陈奕迅(十年)sdf'
ss = '晨光(M&G)素描纸'
s = re.sub(r'\((.*?)\)',' ',ss)
s = re.sub(r'\((.*?)\)',' ',ss)

======

python cookbook:​​https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html​​

离线安装

通过下载zip或tar.gz包可以实现python包的离线安装,如下:压缩包安装的话,包以及安装包的依赖包都存在了,所以可以直接在服务器不联网安装成功,whl文件安装包的时候,所需要的依赖包还需要联网下载,
所以没网的时候有时候有依赖包的话就安装不成功

 

py转成pyc:python -m compileall hh.py

os.getcwd() 方法用于返回当前工作目录。

使用 ​​pyinstaller​​ 可以将python程序打包成 exe 程序

python的dist-packages目录和site-packages目录的区别

  • sudo apt-get install 安装的package存放在 /usr/lib/python2.7/dist-packages目录中
  • pip 或者 easy_install安装的package存放在/usr/local/lib/python2.7/dist-packages目录中
  • 手动从源代码安装的package存放在site-packages目录中
  • Python 列表的实际实现基于数组的概念

    ============

    python 魔术方法指南: ​​https://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-methods.html#id1​​

    =========并发通信

    Queue.Queue是进程内非阻塞队列,用于进程内的各函数模块或线程间通信。
    multiprocess.Queue是跨进程通信队列。但是不能用于multiprocessing.Pool多进程的通信。
    进程池multiprocessing.Pool()的多进程之间的通信要用multiprocessing.Manager().Queue()

    ==============

    《Think Python》https://codingpy.com/books/thinkpython2/index.html

    =============

    def __len__(self): 只要正确实现了__len__()方法,就可以用len()函数“长度”:

    class TST(object):
    def __init__(self,names):
    self.names=names

    def __len__(self):
    return len(self.names)

    aa=TST('sdf')
    print(len(aa))

    def __iter__(self):
    只要实现了__iter__的对象就是可迭代对象(Iterable)
    同时实现了__iter__和__next__的是迭代器(Iterator),当然也是一个可迭代对象了
    __next__应该在迭代完成后,抛出一个StopIteration异常
    for语句会自动处理这个StopIteration异常以便结束for循环

    class Squares(object):
    def __init__(self, start, stop):
    self.value=start-1
    self.stop=stop
    def __iter__(self):
    return self #因为自己实现了__next__方法,所以可以返回self
    def __next__(self):
    if self.value==self.stop:
    raise StopIteration
    self.value+=1
    return self.value**2
    x=Squares(1,5)
    print([n for n in x]) # #[1, 4, 9, 16, 25]
    print([n for n in x]) #同一个对象只能迭代一次[]

    #要达到多个迭代器的效果,__iter__只需返回实现了__next__的对象,而不是返回self

    class mynext(object):
    def __init__(self,start,stop):
    self.value=start-1
    self.stop=stop

    def __next__(self):
    if self.value==self.stop:
    raise StopIteration
    self.value+=1
    return self.value**2

    class Squares2(object):
    def __init__(self, start, stop):
    self.value=start-1
    self.stop=stop
    def __iter__(self):
    return mynext(self.value,self.stop)

    x=Squares2(1,5)
    print([n for n in x]) # [1, 4, 9, 16, 25]
    print([n for n in x]) #同一个对象可以被迭代多次 [1, 4, 9, 16, 25]

     

    =================
    def __setitem__(self,k,v) #将对象当作字典操作,设置键值对时会触发该方法
    def __getitem__(self,k)#将对象当作字典操作,根据键获取值时会触发该方法
    def __delitem__(self,k)#将对象当作字典操作,删除指定的键值对时自动触发

    =========

    n [1]: a = 'something'
    ...: b = 'some'+'thing'
    ...: id(a)==id(b)
    Out[1]: True #这与Cpython 编译优化相关,行为称为字符串驻留In [5]: d = {}
    ...: d[1] = 'java'
    ...: d[1.0] = 'python'

    In [6]: d
    Out[6]: {1: 'python'} #相同值的不可变对象在Python中始终具有相同的哈希值class SE(object):
    def __init__(self):
    print('init')
    def __del__(self):
    print('del')
    In [63]: SE() is SE()
    init
    init
    del
    del
    Out[63]: False
    In [64]: id(SE()) == id(SE())
    init
    del
    init
    del
    Out[64]: True
    调用id函数, Python 创建一个 SE 类的实例,并使用id函数获得内存地址后,销毁内存丢弃这个对象。当连续两次进行此操作, Python会将相同的内存地址分配给第二个对象,所以两个对象的id值是相同的.In [65]: for i in range(5):
    ...: print(i)
    ...: i = 10
    0
    1
    2
    3
    4array = [1, 3, 5]
    g = (x for x in array if array.count(x) > 0)
    list(g)后返回[1,3,5]

    array = [1, 3, 5]
    g = (x for x in array if array.count(x) > 0)
    array = [5, 7, 9]
    In [74]: list(g)
    Out[74]: [5]

    生成器表达式中, in 子句在声明时执行, 而条件子句则是在运行时执行。
    上述代码等价于:
    g = (x for x in [1,3,5] if [5,7,9].count(x) > 0)python的列表内部实现是数组(长度可变的数组,具体实现要看解析器CPython的实现 )
    字典是通过hash函数和哈希桶实现的,(所以只有可哈希的对象才能作为字典的键)
    集合内部实现是dict的logging 是线程安全的,在一个进程内的多个线程同时往同一个文件写日志是安全的。
    但是多个进程往同一个文件写日志不是安全的对于不支持使用"with"语句的类似文件的对象,使用 contextlib.closing():
    import contextlib

    with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
    for line in front_page:
    print line

    优先使用Queue模块的 Queue 数据类型作为线程间的数据通信方式。

    不要在函数或方法定义中使用可变对象作为默认值.

     =========代码更快的三个技巧

    python杂记 20200207  离线安装  正则_python

     

    编译成pyc本质上和py没有太大区别,只是对于这个模块的加载速度提高了,并没有提高代码的执行速度

    将python源码打包成exe的工具,从而脱离python环境单独运行【可以通过Pyinstaller得到exe】

    如果只想要一个队列容器,用deque;如果想线程间同步,生产者消费者什么的,用Queue。

    上一篇:Python基础入门与安装
    下一篇:没有了
    网友评论