美文网首页
13-核心编程1

13-核心编程1

作者: 痞子_4ae7 | 来源:发表于2020-05-15 16:10 被阅读0次

模块导入问题

  • 如何导入模块:

    import sys
    如何查看该模块路径:
    print(sys.path)
    如何要导入的模块在[sys.path]中没有,则可以通过
    sys.path.append("相对路径/绝对路径")
    可以使用ipython测试,也可以使用IDE测试
    
  • 模块重复导入

    问题:(该问题在集成IDE中不存在)
    先导入一个模块
    在导入之后,目标模块被修改
    在之前导入的地方,使用模块还是修改之前的模块没有即使更新
    
    • 如何解决重复导入问题:
      • 导入 imp包
      • from imp import * 导入 imp包中的所有方法
      • 调用方法reload(模块名)
    • 模块循环导入

== 与 is的比较

  • 意义

    '=='用来比较两个值是否相等
    'is'用来表示两个变量是否同一个
    
  • 案例验证

    a = [1,2,3]
    b = [1,2,3]
    a == b
    a is b
    #基本数据验证
    a=256
    b=256
    a is b
    a == b
    [-5 256]范围内的数字为同一个值
    

深拷贝与浅拷贝问题

  • 深浅copy概念

    嵌套列表复制时,如果为深copy,会递归复制列表
    浅copy只复制当前列表
    
  • 举例验证

    a = [1,2,3]
    b  = a
    print(id(a))
    print(id(b))
    import copy
    c = copy.copy(a)
    d = copy.deepcopy(a)
    print(id(c))
    print(id(d))
    
    3.3 嵌套列表深copy的问题
     思考:
    a = [1,2,3]
    b = [4,5,6]
    c = [a,b]
    d = copy.deepcopy(c)
    e = c.copy()
    修改a的值
    a.append(100)
    print(c)
    print(d)
    print(e)
    
    • 画内存图分析:
  • 元组嵌套列表的复制问题

  • 注意:

    • 如果是元组进行copy操作,只能得到一个指向元组的一个引用
      代码验证

进制问题

  • 常用进制以及进制取值范围

  • 原码、反码、补码

    +1   加上  -1  和不为0的问题(以补码的形式进行计算)
    0000 0001       +1
    1000 0001       -1
    
    正数的(原码=反码=补码)
    负数的
    原码:符号位 -1表示负数
    反码:符号位不变,其他取反
    补码:反码+1
    从补码->原码的方式也是一样(符号位不变,取反+1)
    
  • 进制转换问题

    • 十进制->其他进制

      bin(num)
      oct(num)
      hex(num)
      
    • 其他进制->十进制

      int('0b10010',2)
      int('0o22',8)
      int('0x12',16)
      

位运算

直接操作二进制,省内存,效率高

  • 按位与 " & "
    • 两个操作数同为1,结果才为1,否则为0
  • 按位或 " | "
    • 两个操作数,有一个为1,结果就为1,同为0的时候,为0
  • 按位异或 " ^ "
    • 两个操作数相同为0,不同为1
  • 按位取反 " ~ "
    1.先得到数字的补码(数字以补码的形式存在的)
    2.进行取反操作,得到取反之后的补码
    3.既然为补码,之后,需要回到人能认识的码型,因此,需要转换为原码
    4.除符号位,进行取反操作
    5.进行+1操作,得到原码
    
  • 按位左移 " << "
    • 左移n位乘以2^n
  • 按位右移 " >> "
    • 右移n位 除以2^2

属性私有化问题

  • xx:

    • 共有变量
  • _x;

    • 单前置下划线,私有属性或者方法,from somemodule import *禁止导入,
      不同模块中导入另外一个模块(使用import导入),模块中的_x成员变量,
      可以进行访问
  • __x:

    • 双前置下划线,属性,方法私有,无法继承,无法在类外访问
      不是真正意义上的私有化,只是python解释器默认给修改了名字
      这种成为名字重整
      修改规则:比如_age会被修改为类名__age
      通过这个名字可以实现访问,但不提倡
      stu = Student(12)
      dir(stu)可以查看对象内所有属性,方法
  • __ xx __:

    • 双前后置下划线,一般用于魔法方法,自定义的方法应避免
  • xx_:

    • 单置后下划线,一般用于避免与变量冲突

property的使用1

  • 私有属性合成对应的set、以及get方法

  • property的引入

    • 注意先写get方法,在写set方法,只写方法名,不是方法调用
    使property升级get和set用法
    class Money():
        def __init__(self):
            self.__money = 0
        def getMoney(self):
            return self.__money
        def setMoney(self,money):
            if isinstance(money,int):
                self.__money = money
            else:
                raise Exception("金钱类型有误")
    # 手动合成
        money = property(getMoney,setMoney)
    m = Money()
    m.money = 100
    print(m.money)
    
  • 使用property取代get和set方法

    get方法在前,set方法在后
    学名:装饰器
    @property 
    @money.setter 
    class Money():
        def __init__(self):
            self.__money = 0
        @property
        def money(self):
            return self.__money
        @money.setter
        def money(self, money):
            if isinstance(money, int):
                self.__money = money
            else:
                raise Exception("金钱类型有误")
    m = Money()
    m.money = 100
    print(m.money)
    

相关文章

  • 13-核心编程1

    模块导入问题 如何导入模块:import sys如何查看该模块路径:print(sys.path)如何要导入的模块...

  • 2018-10-16

    Java编程思想 1~12 java多线程编程核心技术 23~57

  • C++学习笔记之C++基础

    1、C++学习计划 (1)基础语法(复习)——初步了解,基础编程(2)核心编程——面向对象(3)提高编程——泛型编...

  • 离线计算组件篇-MapReduce基础

    1.mapreduce编程指导思想 本文的核心是带领大家去了解的MapReduce的核心设计思想,以及最基础的编程...

  • python核心编程笔记1

    自学python有一段时间了,可是总感觉学的不扎实,现在回过头来重新把python核心编程过一遍并作笔记。目标是扎...

  • python核心编程笔记-1

    note 列表 用中括号包裹[],元素的个数和元素的值可以改变 元组用()包裹,但元素的个数和元素的值不可以更改 ...

  • Python 入门 之 初识面向对象

    1、初识面向对象编程 (核心--对象) (1)观察以下代码: 可得出结论: 面向过程 vs 函数式编程 <1> 函...

  • Android 网络编程3 Java NIO

    Android网络编程 目录 1、Java NIO 的核心组件 Java NIO的核心组件包括:Channel(通...

  • spring boot:AOP

    1、简介 AOP即面向切面编程Aspect Oriented Program。 面向切面编程将系统功能分为核心业务...

  • 2017年书单

    《汇编语言》 《TCP/IP详解 卷1:协议》 《python核心编程》

网友评论

      本文标题:13-核心编程1

      本文链接:https://www.haomeiwen.com/subject/iyqtohtx.html