zoukankan      html  css  js  c++  java
  • Python高级编程第二版--笔记

    不只是CPython

    • Stackless Python
    • Jython(与java集成)
    • IronPython(与net集成)
    • PyPy

    python真正出众的领域在于围绕语言打造的整个生态系统。

    PyPI包索引

    python shell自定义

    • IPython
    • bpython
    • ptpython

    交互式调试器--pdb

    虚拟环境

    • virtualenv
    • venv:标准库提供的,和virtualenv用法几乎相同,pyvenv 名字
    • Vagrant

    buildout:可用于引导启动并部署python编写的应用。

    pip freeze:该命令可以打印出当前环境所有的python包,包括仅用于测试的。

    有用的资源

    • Awesome-Python:包括流行包和框架列表
    • Python Weekly:每周向订阅者发送有趣的Python包和资源

    不太明白

    virtualenv完全依赖于在文件系统中的存储状态,不会提供额外功能来跟踪应该安装哪些包。这些虚拟环境不可移植,不能移动到其它系统或机器。 常规做法:将所有项目依赖保存到一个requirements.txt(约定命名)文件中,使用pip安装:pip install -r requirements.txt

    • 容器化和虚拟化

    Python在创建这些数组时采用了指数过分配,所以并不是每次操作都需要改变数组大小。

    •  混合类

    •  Python元编程(相当复杂)

    集合、字典

    CPython中的列表根本不是列表,被实现为长度可变的数组。
    Python中的列表是由对其他对象的引用组成的连续的数组。

    类装饰器闭包缺陷

    类装饰器中这样使用闭包,生成的对象不再是被装饰的类的实例,而是装饰器中动态创建的子类的实例。

    def paramrized_short_repr(max_width=8):
        def paramrized(cls):
            class ShortlyRepd(cls):
                """提供装饰器行为的子类"""
                def __repr__(self):
                    return super().__repr__()[:max_width]
    
            return ShortlyRepd
    
        return paramrized
    
    
    @paramrized_short_repr(80)
    class MyClass_Short:
        pass
    
    print(MyClass_Short().__class__)
    

    混入类

    __new__使用场景

    使用__new__()对python不可变的内置类型(int,str,float,frozenset)等进行子类化。因为一旦创建了这样不可变的对象实例,就无法在__init__()方法中对其进行修改。

    何为可变不可变类型:https://blog.csdn.net/dan15188387481/article/details/49864613

    __new__()不限于返回同一个类的实例,可能会滥用,所以要慎用。

    __dict__

    一个对象的属性查找顺序遵循首先查找实例对象自己,然后是类,接着是类的父类。

    python2与python3元类语法

    # python3
    class ClassWithAMetaclass(metaclass=type):
        pass
    
    # python2
    class ClassWithAMetaclass(object):
        __metaclass__ = type
    

    使用兼容的包: from six import with_metaclass

    class Meta(type):
        pass
    
    class Base(object):
        pass
    
    class MyClass(with_metaclass(Meta,Base)):
        pass

    name-mangling

    name-mangling:名称改写或是名称修饰技术。

    • _xxx:表示内部使用,不能被from M import * 导入
    • xxx_:表示避免和关键字冲突
    • __xxx:更彻底的private,用到了name mangling技术,会自动加上类名前缀,不能被子类和类外部访问
    • _xxx_:魔术方法或用户控制的命名空间

    Pythonic

    Pythonic就是以Python的方式写出简洁优美的代码!

    • 优美
    • 明了
    • 简洁
    • 可读性很重要
    • .........

    代码检测工具

    • PyLint
    • pep8

     

    Python包构建

    一个简单的实例

    https://www.cnblogs.com/cposture/p/9029023.html

    http://blog.konghy.cn/2018/04/29/setup-dot-py/

    待续......................

  • 相关阅读:
    依赖注入
    微服务下的安全方案
    VS2019 社区版(community) 离线版本 解决“试用30天过期”步骤
    webpack4升级webpack5
    Ubuntu 上 Node.js 安装和卸载
    记录一次使用locust压测的过程
    大厂面试通关指南,已拿腾讯,阿里offer(附100+最新大厂真题)
    通过自己整理和刷题三个月成功入职腾讯,皇天不负有心人啊!!
    不懂就问系列,为什么别人能靠这份面试题宝典去大厂?(内附面试题答案)
    整理了3家面试问题:美团+字节+腾讯,个个三面,你认为你能走到哪一面?
  • 原文地址:https://www.cnblogs.com/tianboblog/p/9672056.html
Copyright © 2011-2022 走看看