请解释以下代码的工作原理和下面提到的一些问题
Please explain the working of following code and some questions mentioned below
import keyboard
def fun1(r):
print(r.name)
keyboard.on_press(fun1)
代码是一个简单的键盘记录器,这里到底发生了什么?
目前我理解的是:
- 进口
- 函数定义
- keyboard.on_press被称为
请说明以下内容
keyboard.on_press(fun1)
传递给 fun1()
的究竟是什么
- 为什么参数对 fun1 很重要
- 如果我不想做一个函数只是想把我的代码放在
[keyboard.on_press("here")]
中怎么办,为什么不可能。
还有几个问题
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
- 这里的“with”语句是怎么回事?
- 什么
.join()
{将它加入主线程是什么意思}
- 我们在哪里写的
on_press=on_press
{为什么不只写一次}
我不知道这个查询是否依赖于 python 的版本或模块的版本。
我正在使用所有最新版本。
到目前为止,我阅读了有关的文档
https://pynput.readthedocs.io/en/latest/keyboard.html
并用谷歌搜索了我所有的问题,但找不到简单的解释。
下面是一些带有注释的代码,有助于解释语法:
import keyboard
def somefunc(msg):
print(msg) # here
def fun1(r): # r is keyboard event
print(type(r)) # <class 'keyboard._keyboard_event.KeyboardEvent'>
print(r.name) # key text
somefunc("here") # call some other function
keyboard.on_press(fun1) # pass a reference to the other function (on_press will call whatever function we pass), other function must have single parameter
while True: pass # keep script running
With
关键字只是确保对象正确关闭,即使出现错误也是如此。
with keyboard.Listener(
on_press=on_press, # named parameter is on_press, we are passing a reference to function on_press
on_release=on_release) as listener: # named parameter is on_release, we are passing a reference to function on_release
listener.join() # wait for listener thread to finish
# Is shortcut syntax for:
listener = keyboard.Listener(on_press=on_press, on_release=on_release)
try:
........
finally:
listener.stop() # always do this, even if error
listener.join()
关于双变量。这看起来很奇怪,我知道。该代码使用命名参数。
# sample function
def myfunc(x): # the parameter name is x
print(x)
# We can call myfunc several ways:
myfunc(1) # pass value directly
myfunc(x=1) # specify parameter to assign
x=1 # local variable
myfunc(x) # pass the local variable as parameter
myfunc(x=x) # specify parameter to assign, pass local variable # this is the double text you're seeing
关于回调函数,可以将一个函数引用传递给另一个函数。
def MyCallback(a,b): # custom function
print(a,b)
def SomeEventHandler(f): # parameter is reference to another function
f(1,2) # call passed in function, it must have these parameters
SomeEventHandler(MyCallback) # pass custom function to handler
我希望这能让事情更清楚一些。
import keyboard
def fun1(r):
print(r.name)
keyboard.on_press(fun1)
代码是一个简单的键盘记录器,这里到底发生了什么?
目前我理解的是:
- 进口
- 函数定义
- keyboard.on_press被称为
请说明以下内容
keyboard.on_press(fun1)
传递给fun1()
的究竟是什么
- 为什么参数对 fun1 很重要
- 如果我不想做一个函数只是想把我的代码放在
[keyboard.on_press("here")]
中怎么办,为什么不可能。
还有几个问题
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
- 这里的“with”语句是怎么回事?
- 什么
.join()
{将它加入主线程是什么意思} - 我们在哪里写的
on_press=on_press
{为什么不只写一次}
我不知道这个查询是否依赖于 python 的版本或模块的版本。 我正在使用所有最新版本。 到目前为止,我阅读了有关的文档 https://pynput.readthedocs.io/en/latest/keyboard.html 并用谷歌搜索了我所有的问题,但找不到简单的解释。
下面是一些带有注释的代码,有助于解释语法:
import keyboard
def somefunc(msg):
print(msg) # here
def fun1(r): # r is keyboard event
print(type(r)) # <class 'keyboard._keyboard_event.KeyboardEvent'>
print(r.name) # key text
somefunc("here") # call some other function
keyboard.on_press(fun1) # pass a reference to the other function (on_press will call whatever function we pass), other function must have single parameter
while True: pass # keep script running
With
关键字只是确保对象正确关闭,即使出现错误也是如此。
with keyboard.Listener(
on_press=on_press, # named parameter is on_press, we are passing a reference to function on_press
on_release=on_release) as listener: # named parameter is on_release, we are passing a reference to function on_release
listener.join() # wait for listener thread to finish
# Is shortcut syntax for:
listener = keyboard.Listener(on_press=on_press, on_release=on_release)
try:
........
finally:
listener.stop() # always do this, even if error
listener.join()
关于双变量。这看起来很奇怪,我知道。该代码使用命名参数。
# sample function
def myfunc(x): # the parameter name is x
print(x)
# We can call myfunc several ways:
myfunc(1) # pass value directly
myfunc(x=1) # specify parameter to assign
x=1 # local variable
myfunc(x) # pass the local variable as parameter
myfunc(x=x) # specify parameter to assign, pass local variable # this is the double text you're seeing
关于回调函数,可以将一个函数引用传递给另一个函数。
def MyCallback(a,b): # custom function
print(a,b)
def SomeEventHandler(f): # parameter is reference to another function
f(1,2) # call passed in function, it must have these parameters
SomeEventHandler(MyCallback) # pass custom function to handler
我希望这能让事情更清楚一些。