模块导入问题
-
如何导入模块:
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操作,只能得到一个指向元组的一个引用
代码验证
- 如果是元组进行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成员变量,
可以进行访问
- 单前置下划线,私有属性或者方法,from somemodule import *禁止导入,
-
__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)
网友评论