Python开发(人工智能/大数据/机器学习)Python查漏补缺

【查漏补缺】Python游戏模块121~140

2019-03-09  本文已影响0人  TensorFlow开发者

121.游戏窗口中显示图像:
一,img=pygame.image.load(路径)并把加载到内存中的图片返回给调用者。

二,屏幕对象.blit(img, (x, y))把img图像绘制在x,y位置处。

三,pygame.dusplay.update()

122.pygame游戏时钟控制刷新频率:

clock= pygame.time.Clock()
在游戏循环中,控制clock的刷新频率每秒60次 
clock.tick(60)

123.pygame中通过pygame.event.get()来获取用户当前所做的事件的列表(用户同一时间可以做很多事情)。

124.如果开发的子类不是直接继承自object,则在重写初始化方法时,一定要先调用父类的init()方法。

125.pygame中可以使用pygame.time.set_timer(eventId, 间隔时间)来添加定时器。

126.导入模块的顺序:先导入官方标准模块,再导入第三方模块,最后导入自己的模块。

127.pygame.sprite.groupcollide(group1, group2, dokill1, dokill2, collided=None)---Sprite_dict专门用来检测两个精灵组是否发生了碰撞。碰撞后,dokill1用来控制碰撞后group1是否销毁;dokill2用来控制碰撞后group2是否销毁;

128.模块之间循环导入,会报ImportErorr。设计模块时,应避免循环导入。

129.特别注意:
a=3
b=3
则,a==b和a is b都返回True,

a=30000
b=30000
则,a==b返回True, a is b 返回False

130.深拷贝copy.deepcopy(aaa)、浅拷贝copy.copy(aaa)深入剖析:
深拷贝copy.deepcopy(aaa)不管引用层级有多深,都会拷贝出来让其与源彻底独立。比如,一个list中存放的是另外list的引用,则进行深拷贝时,拷贝出来的会与源彻底独立了。

浅拷贝copy.copy(aaa)最多只会copy第一层,也有可能不拷贝。之所以这么说,是因为:当被拷贝的是可变类型时,不管引用层级有多深,只会copy第一层,后面的引用的与源共用一个。而当被拷贝的是不可变类型时,第一层也不拷贝。

131.属性、属性(多见于Python把我们定义的私有变量前面加上类名)、属性、属性,含义各不同。属性公有属性,属性、属性均表示私有属性,属性_内置属性。

属性、_属性在from xxx模块 import *这种情况下,是导入不过来的。在import xxx模块可以被导进来。

132.私有属性之所以无法调用,正是Python把我们定义的私有变量前面加上_类名,最终变量名即:_类名__变量名。当我们知道了这个规则后,尽管可以通过这种方式调用,但极不推荐!

133.@property装饰器修饰的方法名(例如:name)会自动成为一个属性。当name方法被@property装饰后,自动多了个@name.setter。用@name.setter来修饰的方法将被视为name的setter方法。
注意的是:@name.setter来修饰的方法名就必须是name了,不可以随意修改了。否则设置值时,会报错!

@property
def name(self):
    pass

@name.setter
def name(self, new_name):
    
    pass

134.all作用:all是个模块中的全局变量,如果在xxx模块中定义了该变量,那么通过from xxx模块 import *来导入该模块时,只能导入里面配置的类、变量、方法。all=["变量名", "方法名", "类名"],配置不分先后顺序。

135.range(start,end),按[start,end)左闭合右开生成list。

136.range()使用时有何风险?
python2.x中有风险,如果要生成的list特别大,比如几千万甚至更大,则会报错:Memory Error

python3.x中,则不管要生成的list是多大,都返回一个range对象。不存在风险。

137.当用Thread()来创建一个线程对象时,仅仅是创建了一个普通子线程对象,此时子线程并未开始执行任务。

138.当子线程对象的start()被调用时,子线程开始执行任务;当一个子线程的任务执行完成后,该子线程生命周期自动终结。

139.主线程会等他所创建出来的子线程的任务都执行完成后,该主线程才会死亡。

140.当自定义的线程类,要继承自threading.Thread类,并重写run方法,把子线程要做的任务写在该run方法,此时再调用自己创建的该线程类的start()方法时,内部就会自动调用run方法了,执行我们要在子线程做的任务了。

上一篇 下一篇

猜你喜欢

热点阅读