zoukankan      html  css  js  c++  java
  • python杂记 20200207 离线安装 正则

    正则匹配小括号:

    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目录的区别

    1. sudo apt-get install 安装的package存放在 /usr/lib/python2.7/dist-packages目录中
    2. pip 或者 easy_install安装的package存放在/usr/local/lib/python2.7/dist-packages目录中
    3. 手动从源代码安装的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
    4
    array = [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 数据类型作为线程间的数据通信方式。

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

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

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

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

  • 相关阅读:
    百度前端技术学院task35源代码——听指令的小方块3
    百度前端技术学院task34源码——会指令的小块2
    ManyToManyField 增加记录
    同一个页面多个按钮,根据按钮名字执行相应功能
    django 函数装饰器 变为 类装饰器
    script 跳出小窗口
    django 把函数装饰器变为方法装饰器
    modelform添加属性
    Cannot assign “A1”: “B1” must be a “C1” instance.
    Django form choices, placeholder
  • 原文地址:https://www.cnblogs.com/testzcy/p/12273688.html
Copyright © 2011-2022 走看看