代码工作正常,但如果将整个代码放入def()函数中,则无法完全工作

2024-10-03 02:43:31 发布

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

GITHUB REPO:https://github.com/sunnysinghnitb/color_detector

区别:两个文件中的代码相同。但是,color\u detection1.py(70行)和color\u detection2.py(75行)之间的唯一区别在于,第二个文件中的整个代码都已放入def colo()函数中。颜色检测2.py的第1、73、75行的变化

所需输出:只需运行颜色检测1.py并在输出图像上双击。这将显示该特定像素的RGB值

问题:颜色检测1.py文件运行正常,双击即可生成所需输出(RGB值),而颜色检测2.py则无法生成所需输出。为什么会这样?为什么颜色检测2.py颜色检测1的工作原理不同

编辑:假设以下是一些工作正常的python代码(color\u detection1.py):

.....
...
..
.....

现在,将此代码放入函数中(color\u detection2.py):

def colo():
    ..... 
    ...
    ..
    .....
    return
colo()

问题是两种代码的工作方式不同。代码1按预期工作,而代码2部分工作。为什么会这样


Tags: 文件函数代码pyhttpsgithub颜色def
1条回答
网友
1楼 · 发布于 2024-10-03 02:43:31

你的问题是范围问题。在这里设置全局

def draw_function(event, x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        global b,g,r,xpos,ypos, clicked
        clicked = True
        xpos = x
        ypos = y
        b,g,r = img[y,x]
        b = int(b)
        g = int(g)
        r = int(r)

这一切都很好,但一旦将函数定义放在另一个函数中,您就将需要访问它的范围从global更改为nonlocal

把它改成这个应该行得通

def draw_function(event, x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        nonlocal b,g,r,xpos,ypos, clicked
        clicked = True
        xpos = x
        ypos = y
        b,g,r = img[y,x]
        b = int(b)
        g = int(g)
        r = int(r)

调试的第一步应该是确定程序的进度。一点日志记录可以走很长的路

if (clicked):中放置一个记录器会向您显示clicked永远不会是True,即使您尝试在函数中设置is

if语句外部和函数内部放置一个将显示它是在函数中定义的,而不是在函数外部定义的

这使您可以进一步缩小问题的范围,并且可以发布可复制的代码段

相关问题 更多 >