Python-其他

一、模块导入

1. 模块导入路径

使用 import xxx 时,有时候会遇到 “No module named 'xxx'",找这个模块的路径,可以通过 sys.path 查看,增加路径的方法同在 list 中增加一个变量,例如增加当前路径: sys.path.append('../')

2. 重新导入

如果导入的模块已经修复了,需要重新导入才能获取到最新的内容,使用 reload() 方法可以实现,但这个方法是在 imp 模块,也需要导入才能用: from imp import * 

3. 循环导入

互相调用,导致死循环

二、== & is

== 是用来判断两边值是否相同,is 用来判断两边是否指向同一个地方

a = 1000, b=1000, 此时 "a is b" 返回 False,但是在一个范围内数值是一致的

三、深拷贝、浅拷贝

浅拷贝:把某个变量指向的地址赋值给另一个变量

深拷贝:变量指向一个地址,深拷贝就是创造一份一样的数据,指向另一个地址

import copy
a = [11,22,33]

b = copy.deepcopy(a)

print(id(a))
print(id(b))

可以看到指向的内存地址不同

a = [11,2,3]
b = [4,5,6]

c = [a,b]

此时 c 指向的是 a 和 b 的引用

d 深拷贝 c 时,发现 c 的内容也是引用,深拷贝会重新拷贝一份引用的内容

copy 模块中的另一个方法 copy.copy() ,拷贝的是引用时,重新指向了一个内存地址,但指向的内容不变(但对于不可变类型来说,这个方法不创建新的内存地址,还是指向原来的地址)

四、位运算

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

按位左移 1 位相当于*2,右移 1 位相当于/2,这是计算机最底层的运算,速度很快

五、私有化

  • XX:公有变量
  • _X:单前置下划线,私有化属性和方法,from somesomemodule import* 禁止用
  • __X:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问
  • __X__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__
  • XX_:为了避免与python关键字冲突

1. 使用property升级get和set方法

 

 

注意点:

t.money 到底是调用 getMoney() 还是 setMoney(), 要根据实际的场景来判断

a. 如果是给 t.money 赋值,那么一定调用 setMoney()

b. 如果是获取 t.money 的值,那么就一定调用 getMoney()

property 的作用:相当于把方法进行了封装,开发者在对属性设置数据时更方便(先 get 后 set,直接写方法名)

 

property 的另一种使用方法:

 

posted @ 2020-07-12 19:26  april_aaa  阅读(98)  评论(0编辑  收藏  举报