无法理解python中的语法

2024-09-29 23:24:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手,我分析了一些代码片段来了解我已经走了多远,来检查我是否错过了python的一些关键概念,我被困在这里(键盘记录程序的一部分)。你知道吗

def OnKeyboardEvent(event):
    #statements...
    return True

hookMgr = pyHook.HookManager()       
hookMgr.KeyDown = OnKeyboardEvent     # stuck here!

OnKeyboardEvent是函数的标识符,对吗?要调用函数,我们应该这样做:

hookMgr.KeyDown = OnKeyboardEvent(some_argument) 

我的问题是为什么没有使用括号和参数?这是我不知道的另一个概念吗?你知道吗

我甚至试着分析发生了什么:

def foo(var):
  return True

ires = foo
if ires == True:
  print 'done'

它是印刷的没什么。所以呢这是否意味着标识符'foo'作为函数和'foo'作为变量是不同的?你知道吗


Tags: 函数代码true概念returnfoodef标识符
3条回答

是的,OnKeyboardEvent是对函数本身的引用,而OnKeyboardEvent()是对调用函数的结果的引用。hookMgr.KeyDown = OnKeyboardEventhookMgr.KeyDown连接到给定函数,类似于tkinter.Button(command=myfunction)将函数(而不是函数调用返回的值)连接到Tkinter按钮的方式。你知道吗

我将向您展示一些示例,我相信这些示例将帮助您理解Python的特性。你知道吗

def calc(func, a, b):
    return func(a, b)

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

print(calc(add, 2, 2))  # 4
print(calc(sub, 42, 1))  # 41

就这样。你可以传递某个函数作为另一个函数的参数,或者把它存储在某个变量中然后调用它等等。这确实很有用,但有点不寻常。你知道吗

顺便说一句,我最喜欢使用这个特性:用dictionary代替(missing)switch .. case操作符。像这样:

def get_serialized_value(obj):
    serializer = {
        Article: article_brief_serialize,
        RichTextArticle: rich_text_article_brief_serialize,
        Gallery: gallery_serialize
    }.get(type(obj))
    return serializer(obj).data if serializer else None

# what was replaced by the code above..
def get_serialized_value(obj):
    if type(obj) == Article:
        return article_brief_serialize(obj)
    elif type(obj) == RichTextArticle:
        return rich_text_article_brief_serialize(obj)
    elif type(obj) == Gallery:
        return gallery_serialize(obj)
    else:
        return None

python的一个优点是函数和类本身就是对象,因此可以作为变量传递。例如,将另一个函数作为参数的函数可以是

def foo(bar):
    bar()

在其中,您可以调用它并输入任何函数的名称,它将调用您输入的函数而不带任何参数。这通常在事件处理程序模型中使用,在该模型中,您将向对象传递对函数的引用,当事件发生时,对象将调用您的函数,这就是在被调用对象中发生的情况。你知道吗

相关问题 更多 >

    热门问题