有没有办法在不传递参数的情况下调用函数?
荫信息安全新IAM试图教我自己如何建立与Python简单的键盘记录,我发现这个代码在一个网站:有没有办法在不传递参数的情况下调用函数?
import pythoncom, pyHook
def OnKeyboardEvent(event):
print 'MessageName:',event.MessageName
print 'Message:',event.Message
print 'Time:',event.Time
print 'Window:',event.Window
print 'WindowName:',event.WindowName
print 'Ascii:', event.Ascii, chr(event.Ascii)
print 'Key:', event.Key
print 'KeyID:', event.KeyID
print 'ScanCode:', event.ScanCode
print 'Extended:', event.Extended
print 'Injected:', event.Injected
print 'Alt', event.Alt
print 'Transition', event.Transition
print '---'
# return True to pass the event to other handlers
return True
# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever
pythoncom.PumpMessages()
,虽然我试图理解这个代码,我发现功能“OnKeyboardEvent”的不给调用它的参数
hm.KeyDown = OnKeyboardEvent
所以我的问题是: 有没有在Python的方式来调用一个函数,而不给它的参数?
在python中,函数名相当于存储函数的变量。换句话说:你可以定义一个名为foo
和存储功能/在第二个变量bar
引用它:
def foo():
print("foo!")
bar = foo
bar() # prints: foo!
你的情况
,您只定义功能OnKeyboardEvent(event)
并保存在hm.KeyDown
只有当您按下键盘键并在事件处理程序的hm内部调用函数调用时才会发生。并在那里事件处理程序传递一个事件对象给函数。
回答你有关不带参数调用函数的问题。 有可能为其中所有参数的默认值设置 如功能:
def foo(bar = "default string"):
print(bar)
print(foo()) # prints: default string
print(foo("hello world!")) # prints: hello world!
明白,iam非常感谢非常感谢 –
当你做hm.KeyDown = OnKeyboardEvent
你没有调用函数OnKeyboardEvent
,你只是将该函数分配给hm.KeyDown
。稍后pyHook.HookManager
会在任何KeyboardEvent发生时为您调用该方法。
非常感谢你... –
调用函数:
OnKeyboardEvent()
分配的功能,比方说,一个变量(不调用函数马上):
var = OnKeyboardEvent
和你只是将功能分配到OnKeyboardEvent pyHook.HookManager(的)的KeyDown财产
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
@AdriánKálazi –
'hm.KeyDown = OnKeyboardEvent'不是函数调用。检查[this](https://stackoverflow.com/questions/10354163/assigning-a-function-to-a-variable)出 – jacoblaw
@jacoblaw非常感谢 –