PyQt挖地雷游戏学习笔记(6)

来源:互联网 发布:京瓷网络扫描设置 编辑:程序博客网 时间:2024/05/01 18:00

学习别人的作品,有一大好处,可以反观自己的不足。

自己的不足,往往是基础知识有欠缺,基本功不扎实。

今天,再补一课:星号表达式(*expression)。

挖地雷程序中,有2处用到星号表达式。一是在main.py,另一处在game_scene.py。

先看第一处的情况:

@pyqtSlot()def on_action_Setup_triggered(self):    result = setup.getSetup()    if not result: return    self.scene.setMap(*result)    self.scene.start()

这里的result,从setup.py返回,是这个样子:

def getSetup():    if SetupDlg().exec_() != QDialog.Accepted: return    return (conf.w, conf.h), conf.mines

即,result = ((conf.w, conf.h), conf.mines)

再看用星号(*)解析result的样子。调用函数self.scene.setMap(*result)之后,

在game_scene.py中:

def setMap(self, size, mines):        self.setup = size, mines        self.map_size = size        self.mines = mines

可见,*result解析的结果,成为2个对象,一个是元组size,另一个是整数mine。

如果不用*result解析,函数setMap的头部参数为result一个对象,还需再做解析。

下面的函数new_func,是第二处用到星号表达式的,也是常见的情形:

def inGame(func):    """    check if this game is running    """    def new_func(self, *args, **kw):        if self.status != RUNNING: return        return func(self, *args, **kw)    return new_func

注意!第一,星号表达式只能用在函数头部,否则,是语法错误;

第二,重要的是星号,不是参数名称;

第三,星号意味着,参数属于iterable性质的,即可用函数len()测量其长度。

以下是简单的例子:

>>> def func(*S,**K):print(S,'\n',K)...>>> func(1,[2,3],a=5,b='6',c='asd')(1, [2, 3]) {'a': 5, 'c': 'asd', 'b': '6'}>>>

                                             
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 觉得自己性无能不敢谈对象怎么办 护士面试时被问到病人坠床怎么办 三次元仪器坏了怎么办 运动同手同脚怎么办 狗狗突然害怕不敢走路怎么办 一岁半宝宝因为害怕不敢走路怎么办 猫把背拱起来怎么办 穿猫跟鞋走路不稳怎么办 狗狗后腿内八字怎么办 快走后小腿粗了怎么办? 猫的嘴巴烂了怎么办 苹果8丢了已关机怎么办 肚子吃多了难受怎么办 喝水喝的肚子胀怎么办 肚子吃撑了难受怎么办 肚子撑得想吐怎么办 吃饭吃的太饱怎么办 吃饭吃的太撑怎么办 跑步迈不开步子怎么办 踏步走步子反了怎么办 微信不支持计步怎么办 肝癌二次介入后头晕心慌怎么办 跑步跑得胃疼怎么办 如果世界上的猪都死了怎么办 我和我老婆吵架怎么办 我和我老婆吵架了怎么办 智障人士父母死后怎么办 依赖性太强的人怎么办 高考只有一门写准考证号怎么办 ps做动画不流畅怎么办 ff15引擎剑卖了怎么办 fgo从者满了怎么办 游泳池的水喝了怎么办 月球没有水怎么办秒懂 请了新财神旧的怎么办 报警校体检没过怎么办 ae中建立了文本打不出字怎么办 宝宝3岁内八字怎么办 一岁半宝宝走路内八字怎么办 一岁宝宝走路内八字怎么办 宝宝1岁了内八字怎么办