Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计数执行不同参数的函数的次数,然后在按ENTER键时重置计数_Python_Python 3.x_Counter_Decorator_Turtle Graphics - Fatal编程技术网

Python 计数执行不同参数的函数的次数,然后在按ENTER键时重置计数

Python 计数执行不同参数的函数的次数,然后在按ENTER键时重置计数,python,python-3.x,counter,decorator,turtle-graphics,Python,Python 3.x,Counter,Decorator,Turtle Graphics,我希望能够计算执行需要不同参数的定义函数的次数,然后每次按ENTER键时将计数器重置为0。我希望能够通过以下定义的功能使用此操作: def draw(x): global drawing q.put(x) process = False drawingLock.acquire() if not drawing: process = True drawing = True drawingLock.release()

我希望能够计算执行需要不同参数的定义函数的次数,然后每次按ENTER键时将计数器重置为0。我希望能够通过以下定义的功能使用此操作:

def draw(x):
    global drawing
    q.put(x)
    process = False
    drawingLock.acquire()
    if not drawing:
        process = True
        drawing = True
    drawingLock.release()
    if process:
        if not q.empty():
            x()
        drawingLock.acquire()
        drawing = False
        drawingLock.release()
此函数是一个
队列
,它接受函数参数并逐个执行,此函数的参数是在海龟图形窗口中绘制字母的函数。此外,此函数由对应于所绘制字母的特定字母的按键调用。例如:

onkey(lambda: draw(draw_A), "a") 
# This draws an "A" in the Turtle Graphics window when "a" is pressed on the keyboard
# If multiple "A"s pressed, it draws them one by one

如何计算用户在turtle图形窗口中执行此
draw()
函数的次数,然后在每次按下ENTER键时将其重置?我曾尝试为此创建一个装饰器,但我创建的装饰器不会返回任何海龟图形,并且似乎无法处理参数可能随用户选择的参数而变化的函数。非常感谢您在这个问题上提供的任何帮助!:)

函数允许属性:

def draw(x):
    if not hasattr(draw, 'counter'):
         draw.counter = 0
    draw.counter += 1
    #  body
捕获来自用户的输入:

def handle_enter():
    draw.counter = 0

onkey(handle_enter, 'Enter') 
了解它被调用了多少次:

print('`draw` has been called {} times'.format(draw.counter))

尽管尝试失败,但您可以使用装饰器解决此问题。顺便说一下:考虑在异常发生时你的函数的路径。要仅在特定范围内设置标志,请使用
try
finally
或使用所谓的“上下文管理器”。