python,if/elif/else 语法按注释拆分



我把这个函数写成我试图在pygame中制作的滚动面板的一部分。该函数是称为 slot 的类的一部分,该类是面板类的一部分,插槽是面板上包含字符串或数据的条形图。此方法将插槽绘制到屏幕上,如果屏幕位于插槽之间,则仅绘制插槽的一部分。if/elif/else 语法让我感到困惑:

    def mydraw(self,my_pygame,scrn,panel_x,panel_y,scroll_at,window_size,virtual_size):
        if((self.y<(scrollat+window_size))or((self.e_y)>scrollat)):
            onscreensy = (self.y-scrollat)+panel_y
            onscreeney = onscreensy + self.dim_y
            """the top case"""
            if(onscreensy<panel_y):
                onscrnwidth = (onscreensy+self.dim_y)-panel_y
                onbitmapwidth = self.dim_y-onscrnwidth
                holder = self.bitmap.subsurface(0,onbitmapwidth-1,self.dim_x,onbitmapwidth-1)
                scrn.blit(holder,(panel_x,panel_y))
            """end top case"""
            """the normal case"""
            elif(onscreeney<(panel_y+window_size)):  #### right here ####
                scrn.blit(self.bitmap,(panel_x,onscreensy))
            """end normal case"""
            """the bottom case"""
            else:
                onscrnwidth = (panel_y+window_size)-self.y
                onbitmapwidth = self.dim_y-onscrnwidth
                holder = self.bitmap.subsurface(0,0,self.dim_x,onbitmapwidth-1)
                scrn.blit(holder,(panel_x,onscreensy))
            """end bottom case"""
        if(self.has_next==True):
            self.next.mydraw(my_pygame,scrn,panel_x,panel_y,scroll_at,window_size,virtual_size)

错误:

me$ python testscrolling3.py
  File "testscrolling3.py", line 164
    elif(onscreeney<(panel_y+window_size)):
       ^
SyntaxError: invalid syntax

这些不是评论。它们是字符串,并且是普通的可执行语句(即使它们实际上不执行任何操作)。

Python 中的注释以 # 开头。

正如

@Daniel_Roseman指出的那样,它们是字符串。它们可以保留在函数中。实际上他们可以做一些事情(而不是什么都不做),考虑下面的例子do_sth3(),其中函数声明后面的stringdocstring

但是,如果我们想将它们保留在函数中,缩进必须正确。比较:do_sth1()do_sth2()

In [53]:
def do_sth1():
    if 1==1:
        print 'Ok'
    '''Comment goes here'''
    else:
        print 'Not Ok'
  File "<ipython-input-53-fada2ba2e658>", line 5
    else:
       ^
SyntaxError: invalid syntax

In [54]:
def do_sth2():
    if 1==1:
        print 'Ok'
        '''Comment goes here'''
    else:
        print 'Not Ok'
In [55]:
def do_sth3():
    '''usage: just a test function'''
    print 'Ok'
In [56]:
do_sth3.__doc__
Out[56]:
'usage: just a test function'

最新更新