pygame的init()

你究竟有(init)几个好(子)妹(模)妹(块)?

当我们在init()的时候,我们在干什么

init 这个单词在我们用python进行面向对象开发的时候是跑不了的。理解python的__init__其实就是和这里的init作用差不多。做的工作都是初始化.

在和孩子解释这个概念的时候,我的理解还是,保持它的专业性,告诉他们这个专有名词——初始化(initialize vt.)。至于他在干什么,我的解释是这样的:

我们已经知道python有一个特殊的“工具包(模块)”叫pygame了。在我们要动手用它完成我们的想法之前,电脑这个强迫症需要我们检查一遍,这个工具包是否完整,能否正常给我们提供帮助。而这个检查的动作,就是pygame.init()

那么init()实际上检查了哪些东西呢?

这个其实也不难实验。直接在shell里面,我执行了这个函数:

>>> import pygame
>>> pygame.init()
(6, 0)

不明所以的,他给了我一个元组(6,0),我也很不理解,这个6和0分别代表什么意思。所以查阅了pygame的官方文档

initialize all imported pygame modules

init() -> (numpass, numfail)

Initialize all imported pygame modules. No exceptions will be raised if a module fails, but the total number if successful and failed inits will be returned as a tuple. You can always initialize individual modules manually, but pygame.init() is a convenient way to get everything started. The init() functions for individual modules will raise exceptions when they fail.

You may want to initialize the different modules separately to speed up your program or to not use things your game does not.

It is safe to call this init() more than once: repeated calls will have no effect. This is true even if you have pygame.quit() all the modules.

初始化所有导入的pygame模块。如果模块失败,则不会引发异常,但如果成功且失败的总数将作为元组返回。您可以随时手动初始化单个模块,但pygame.init()初始化所有导入的pygame模块是一种方便的方法来启动所有内容。各个模块的init()函数会在失败时引发异常。

您可能希望单独初始化不同的模块以加速您的程序或不使用您的游戏没有的东西。

不止一次调用此init()是安全的:重复调用将不起作用。即使你有pygame.quit()所有模块也是如此。

关于init()的一个意外的实验

我以前从来没有深究过pygame.init()这个函数究竟init了哪些模块,仅仅在实践的过程中知道,音频播放和创建文字字体的时候,如果没有init就会报错。

今天我在安装我的新的电脑环境的时候,因为不知道电脑的型号,所以并没有特意去搜索和安装电脑对应的驱动。结果在安装完python之后,安装pygame(wheel也要安装)之后,运行常规的测试函数pygame.init()返回的数字是(5,1)

排除问题的方法就是把已知可以init()的子模块都先运行掉。经过排查,发现pygame无法调用声卡驱动。剩下的事情就好办很多了,重新安装一下声卡驱动,重启之后就可以正常init了。

但是在这个过程中,我可以得出比以前更加接近实际的一个结论:

pygame.init()在做的,其实就是检查,电脑上一些需要的硬件调用接口、基础功能是否有问题。如果有,他会在程序运行之前就反馈给你,方便你进行排查和规避。

说了这么多,它到底init了哪些子模块

>>> import pygame
>>> pygame.init()
(6, 0)
>>> pygame.display.init()
>>> pygame.font.init()
>>> pygame.joystick.init()
>>> pygame.mixer.init()
>>> pygame.freetype.init()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'pygame' has no attribute 'freetype'
>>> pygame.midi.init()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'pygame' has no attribute 'midi'
>>> pygame.cdrom.init()
>>> pygame.scrap.init()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pygame.error: No display mode is set

我把pygame官网上面的doc里介绍的所有带有init的子模块都运行了一遍。其中midi和freetype这两个模块已经没有了(吐槽一下官方的文档吧,都没了还放着嘛)。最后一个scrap初始化是因为没有窗口。这样的话,其实已经有5个模块是被初始化了。但是scrap在没有窗口的情况下会报错,到底算不算一个init。还需要后面再仔细看看文档和源码吧。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,211评论 4 16
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,694评论 0 3
  • 自2016年9月1日,摩拜单车正式投入市场以后,ofo也紧随其后,从校园正式转入大街小巷。顺着共享经济的趋势,借助...
    摇钱草阅读 335评论 1 0
  • 昨晚梦到了那个记忆中眉目灿烂的少年。画面定格在他朝我笑的那个瞬间,再也忘不掉。从此,我爱的人都像他,可惜不是他。 ...
    任笙歌阅读 180评论 0 0
  • 博为峰小博老师: [方法调用] Java支持两种调用方法的方式,根据方法是否返回值来选择。 当程序调用一个方法时,...
    博为峰51Code教研组阅读 152评论 0 0