JAVA网络爬虫
HttpClient

导航

 

python高级的相关操作

  • 模块的重新导入

    # test.py模块
    def test():
        print("----1----")
        print("----2----")
    
       
    # 主文件
    import sys
    
    #这是模块的查找路径
    sys.path #这是个变量 是个列表 可以用列表的操作
    
    sys.path.append('/home') #添加模块的搜索路径
    print(sys.path)
    
    #导入模块 test
    import test
    
    test.test()
    
    
    from imp import *
    
    #重新加载模块
    reload(test) #更新test模块
    
    test.test()
    
    # 运行结果
    ['/Users/xiaoge/Downloads/python学习进度/02.核心/01.Python高级编程/01.python高级1', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python35.zip', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload', '/Users/xiaoge/Library/Python/3.5/lib/python/site-packages', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages', '/home']
    ----1----
    ----2----
    ----1----
    ----2----
    
  • 模块循环导入问题

    #两个模块相互导入       形成死循环导入
    #例:
    ''' a模块
        from b import b
         def a():
             print("----1----")
             b()
    '''
    ''' b模块
         from a import a
         def b():
             print("----b----")
    
         def c():
             print("----c----")
             a()
    
         c()
    '''
    
    
  • ==.is的作用

    a = [11,22,33]
    b = [11,22,33]
    
    print(a == b)
    
    print(a is b)
    
    # ==:判断两个对象是否相等
    # is:判断两个引用是否指向同一个对象(引用比较)
    
    # 运行结果
    True
    False
    
  • 深拷贝和浅拷贝

    #浅拷贝
    a = [11,22,33]
    b = a
    print(a)
    print(id(a))
    print(b)
    print(id(b))
    
    print("----1----")
    #深拷贝
    import copy
    
    c = copy.deepcopy(a)
    
    print(a)
    print(id(a))
    
    print(c)
    print(id(c))
    
    # 运行结果
    [11, 22, 33]
    4320184712
    [11, 22, 33]
    4320184712
    ----1----
    [11, 22, 33]
    4320184712
    [11, 22, 33]
    4320633288
    
  • copy与deepcopy的区别

    import copy
    # copy只拷贝一次 里面的不拷贝
    a = [1,2,3]
    b = [4,5,6]
    c = [a,b]
    e = copy.copy(c)
    
    a.append(44)
    print(id(c))
    print(c[0])
    
    print(id(e))
    print(e[0])
    
    print("*************************")
    
    # deepcopy依次拷贝
    a = [1,2,3]
    b = [4,5,6]
    c = [a,b]
    e = copy.deepcopy(c)
    
    a.append(44)
    print(id(c))
    print(c[0])
    
    print(id(e))
    print(e[0])
    
    # 运行结果
    4329864008
    [1, 2, 3, 44]
    4329523528
    [1, 2, 3, 44]
    *************************
    4329865096
    [1, 2, 3, 44]
    4329864008
    [1, 2, 3]
    
  • copy的特点

    # copy 是可变类型我考一层 不是可变类型我一层都不考
    import copy
    
    a = [1,2,3]
    b = [4,5,6]
    c = (a,b)
    print(id(c))
    e = copy.copy(c)
    print(id(e))
    
    # 运行结果
    4330462856
    4330462856
    
  • 源码-反码-补码-类型转换

    # 1的源码:0000 0000 0000 0001
    #-1的源码:1000 0000 0000 0001
    #-1的反码:1111 1111 1111 1110  #第一位是符号位 符号位不变别的取反
    #-1的补码:1111 1111 1111 1111
    
    #如何计算补码
    #正数:源码=反码=补码
    #负数:反码=符号位不变,其他位取反
    #     补码=反码+1
    
    #加-1直接加补码
    
    #从源码变成补码
    #-1+1 #相当于 1111 1111 1111 1111--->0000 0000 0000 0000 +1
    
    #负数补码转换成源码: 源码 = 补码的符号不变 --> 数据位取反 --->尾+1
    #从补码变成源码
    #一样     1111 1111 1111 1111--->0000 0000 0000 0000 +1
    
    
    #进制转换
    
    #18转换成2进制
    print(bin(18))
    
    #18转换成8进制
    print(oct(18))
    
    #18转换成16进制
    print(hex(18))
    
    
    #转成十进制
    
    #二进制转10进制
    print(int('0b10010',2))
    
    #八进制转10进制
    print(int('022',8))
    
    #十六进制转10进制
    print(int('0x12',16))
    
    # 运行结果
    0b10010
    0o22
    0x12
    18
    18
    18
    
  • 位运算

    #左移右移
    a = 5
    a = a << 1 #左移一位乘以2 
    print(a)
    
    a = a >> 1 #右移一位除以2
    print(a)
    
    
    #按位与 &
    #案例:1001101
    #     1010111
    #结果为: 只要有一位是0那就是0
    #     1000101
    num = 0b1001101
    print(num&0b1010111)
    
    #按位或 |
    #案例:1001101
    #     1010111
    #结果为: 只要有一位是1那就是1
    #     1011111
    print(num|0b1010111)
    
    #按位异或 ^
    #案例:1001101
    #     1010111
    #结果为: 只要不相同时,那就是1
    #     0011010
    print(num^0b1010111)
    
    #按位取反 ~
    #案例:1001101
    #结果为:是1就是0,是0就是1
    #     0110010
    print(~num)
    
    # 运行结果
    10
    5
    69
    95
    26
    -78
    
  • 私有化

    class Test(object):
        def __init__(self):
            self.__num = 100  #这里带下划线的变量是私有的
    
        def setNum(self):
            self.__num = 200
        def getNum(self):
            return self.__num
    
    #私有属性访问不了的原因是,它把你这个私有属性的名字改了 你可以用dir(实列对象)查看
    #这个Test里的私有属性__num 被 改成_Test(类名)__num
    
    test = Test()
    #print(test.__num) #私有属性不能直接调用
    print(test.getNum())
    test.setNum()
    print(test.getNum())
    #test.__num = 200 #添加属性的时候是可以用下划线的
    #print(test.__num) #这样是可以的 因为你上面定义了一个__num属性 == 200
    
    # 运行结果
    100
    200
    
  • property

    class Test(object):
        def __init__(self):
            self.__num = 100  #这里带下划线的是私有属性
    
        def setNum(self,num_temp):
            self.__num = num_temp
    
        def getNum(self):
            return self.__num
        
        num = property(getNum,setNum) #property根据你下面的实际场合  选择方法
    
    t = Test()
    print(t.num)
    t.num = 10 #相当于 t.setNum(10)
    print(t.num)#相当于 print(t.getNum())
    
    #注意点:
    #t.num 到底是调用getNum()还是setNum(),要根据实际场景来判断,
    #1.如果是给t.num赋值,那么一定调用setNum()
    #2.如果是获取t.num的值,那么就一定调用getNum()
    #
    #property的作用:相当于把方法进行了封装,开发者在对属性设置数据的时候更方便
    
    # 运行结果
    100
    10
    
  • property-2

    class Test(object):
        def __init__(self):
            self.__num = 100  #这里带下划线是私有属性
        
        @property
        def num(self):     #这个说明了 num替换了property 这里是num那么下面也必须是num
            return self.__num #并且是个getNum方法
    
        @num.setter 
        def num(self,num_temp): #这是setNum方法
            self.__num = num_temp
    
    
    t = Test()
    
    print(t.num)
    
    t.num = 10 #相当于 t.setNum(10)
    
    print(t.num)#相当于 print(t.getNum())
    
    # 运行结果
    100
    10
    
  • siyou

    #如果这个模块是被 from siyou import *  _num2 和 __num3 是导入不进去的
    #import siyou 和 from siyou import _num2,__num3 是可以导入的
    num1 = 100
    _num2 = 200
    __num3 = 300
    
posted on 2019-08-27 13:36  gmlgxx  阅读(40)  评论(0)    收藏  举报