• python进阶02


    1.import导入模块

      import sys

      sys.path:显示的是:从显示目录中查找要导入的模块文件。

      程序执行时导入模块路径:sys.path.append('/home/itcast/xxx');sys.path.insert(0, '/home/itcast/xxx')

      重新导入模块:reload(mudule)

    2.==、is之间区别

      is :比较两个引用是否指向同一个对象

      ==:比较两个对象是否相等

    3.深拷贝浅拷贝

      浅拷贝:拷贝了引用没有拷贝内容,a=[1,3,4];b=a

      深拷贝:对一个对象所有层次的拷贝(递归),b=copy.deepcopy(a)

    4.进制,位运算

      4.1 进制转换

      如:0010(二进制)=2(0*2^0+1*2^1十进制)

        34(16进制)=52(4*16^0+3*16^1十进制) 

    #10进制转为2进制
    >>> bin(10)
    '0b1010'
    
    #2进制转为10进制
    >>> int("1001",2)
    9
    
    
    #10进制转为16进制
    >>> hex(10)
    '0xa'
    
    #16进制到10进制
    >>> int('ff', 16)
    255
    
    >>> int('0xab', 16)
    171
    
    #16进制到2进制
    >>> bin(0xa)
    '0b1010'
    >>>
    
    #10进制到8进制
    >>> oct(8)
    '010'
    
    
    #2进制到16进制
    >>> hex(0b1001)
    '0x9'
    View Code

      4.2 位运算

        数字在计算机中是二进制的补码形式保存,因此-1+1需按照补码进行相加

        -1+1在计算机中计算方式:1111 1111 1111 1111 + 0000 0000 0000 0001 = 0000 0000 0000 0000

        & 按位与;| 按位或;^ 按位异或;~ 按位取反;<< 按位左移;>> 按位右移

        注意:a. 左移1位相当于 乘以2;用途:快速计算一个数乘以2的n次方 (8<<3 等同于8*2^3)

    5 私有化

        xx: 公有变量

        _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问

        __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
        __xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__ , __ 不要自己发明这样的名字
        xx_:单后置下划线,用于避免与Python关键词的冲突

        这里私有化越来越强!

        父类中属性名为__名字的,子类不继承,子类不能访问

        如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性
        _名的变量、函数、类在使用from xxx import *时都不会被导入

    6 属性property

      可代替 类的get,set方法,如

      这里操作后:私有属性一般不能通过实例直接赋值,但这样操作后,就可以了,本质是变为一个方法将私有属性值传入

    class Money(object):
        def __init__(self):
            self.__money = 0
    
        @property
        def money(self):
            return self.__money
    
        @money.setter
        def money(self, value):
            if isinstance(value, int):
                self.__money = value
            else:
                print("error:不是整型数字")
    
    ------------------------------
    In [3]: a = Money()
    
    In [4]: 
    
    In [4]: 
    
    In [4]: a.money
    Out[4]: 0
    
    In [5]: a.money = 100
    
    In [6]: a.money
    Out[6]: 100
    View Code

     7.垃圾回收机制

      7.1

      小整数[-5,257)共用对象,常驻内存
      单个字符共用对象,常驻内存
      单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁

      7.2 GC垃圾回收机制

        7.2.1机制:以引用计数为主,分代收集为辅

        7.2.2 导致引用计数+1情况    

    对象被创建,例如a=23
    对象被引用,例如b=a
    对象被作为参数,传入到一个函数中,例如func(a)
    对象作为一个元素,存储在容器中,例如list1=[a,a]

        7.2.3 导致引用计数-1情况 

    对象的别名被显式销毁,例如del a
    对象的别名被赋予新的对象,例如a=24
    一个对象离开它的作用域,例如f函数执行完毕时,func函数中的局部变量(全局变量不会)
    对象所在的容器被销毁,或从容器中删除对象

        7.2.4 查看一个对象的引用计数

    import sys
    a = "hello world"
    sys.getrefcount(a)

        7.2.5 内存泄漏

          只通过引用计数机制管理内存,当出现循环引用时就可能会出现内存泄漏

        7.2.6 常用函数

    1、gc.set_debug(flags) 设置gc的debug日志,一般设置为gc.DEBUG_LEAK
    
    2、gc.collect([generation]) 显式进行垃圾回收,可以输入参数,0代表只检查第一代的对象,1代表检查一,二代的对象,2代表检查一,二,三代的对象,如果不传参数,执行一个full collection,也就是等于传2。 返回不可达(unreachable objects)对象的数目
    
    3、gc.get_threshold() 获取的gc模块中自动执行垃圾回收的频率。
    
    4、gc.set_threshold(threshold0[, threshold1[, threshold2]) 设置自动执行垃圾回收的频率。
    
    5、gc.get_count() 获取当前自动执行垃圾回收的计数器,返回一个长度为3的列表

     8 内建属性

       一个类的自带属性很多很有用

    常用专有属性说明触发方式
    __init__ 构造初始化函数 创建实例后,赋值时使用,在__new__
    __new__ 生成实例所需属性 创建实例时
    __class__ 实例所在的类 实例.__class__
    __str__ 实例字符串表示,可读性 print(类实例),如没实现,使用repr结果
    __repr__ 实例字符串表示,准确性 类实例 回车 或者 print(repr(类实例))
    __del__ 析构 del删除实例
    __dict__ 实例自定义属性 vars(实例.__dict__)
    __doc__ 类文档,子类不继承 help(类或实例)
    __getattribute__ 属性访问拦截器 访问实例属性时
    __bases__ 类的所有父类构成元素

    类名.__bases__

    9.functools:提供了很多内置功能

  • 相关阅读:
    SVG.js 文本绘制整理
    SVG.js 基础图形绘制整理(二)
    SVG.js 基础图形绘制整理(一)
    C# 异步编程Task整理(一)
    Svg.Js 父类的基础操作
    Svg.Js A标签,链接操作
    Svg.Js 简介(转)
    SVG 相关整理
    Kendo UI
    Kendo UI
  • 原文地址:https://www.cnblogs.com/xiaoping1993/p/9674986.html
Copyright © 2020-2023  润新知