首页 > 其他 > 详细

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

时间:2014-09-16 08:07:50      阅读:338      评论:0      收藏:0      [点我收藏+]

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

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

今天,再补一课:星号表达式(*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'}
>>>

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

原文:http://blog.csdn.net/lawme/article/details/39276485

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!