python中的is()函数是什么

Haz*_*yed 0 python opencv

我已经使用 python 几年了,从未见过is关键字在 if 条件下用作函数。我遇到了这段代码。它按预期工作,但我不知道 is() 的作用。

def face_ext(img):
    gray = frame
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=5)

    if faces is():
        return None

    for(x, y, w, h) in faces:
        cropped_face = img[y:y+h, x:x+w]

    return cropped_face
Run Code Online (Sandbox Code Playgroud)

删除is()代码时会产生以下错误:

[INFO] Initializing face capture. Look the camera and wait ...
Traceback (most recent call last):
  File "c:\Users\smoke\miniconda3\envs\skyhawk\Scripts\skyhawk-script.py", line 33, in <module>
    sys.exit(load_entry_point('skyhawk', 'console_scripts', 'skyhawk')())
  File "c:\Users\smoke\miniconda3\envs\skyhawk\lib\site-packages\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "c:\Users\smoke\miniconda3\envs\skyhawk\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "c:\Users\smoke\miniconda3\envs\skyhawk\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "c:\Users\smoke\miniconda3\envs\skyhawk\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "c:\Users\smoke\miniconda3\envs\skyhawk\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\Users\smoke\miniconda3\envs\skyhawk\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "c:\Users\smoke\miniconda3\envs\skyhawk\lib\site-packages\click\decorators.py", line 21, in new_func    
    return f(get_current_context(), *args, **kwargs)
  File "c:\users\smoke\documents\dev\python\skyhawk-cli\skyhawk\commands\cmd_capture.py", line 21, in color    
    result = capture.Capture.color()
  File "c:\users\smoke\documents\dev\python\skyhawk-cli\skyhawk\services\capture.py", line 41, in color        
    if face_ext(frame) is not None:
  File "c:\users\smoke\documents\dev\python\skyhawk-cli\skyhawk\services\capture.py", line 31, in face_ext     
    if faces:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()        
[ WARN:0] terminating async callback
Run Code Online (Sandbox Code Playgroud)

完整的代码文件在此链接中给出。

AKX*_*AKX 6

它根本不是一个函数,它是恒等比较运算符

\n
\n

对象\xe2\x80\x99s 身份的运算符is和测试:当且仅当 x 和 y 是同一对象时才为 true。is notx is y

\n
\n

该声明

\n
if faces is():\n
Run Code Online (Sandbox Code Playgroud)\n

应格式化为

\n
if faces is ():\n
Run Code Online (Sandbox Code Playgroud)\n

即“这正是faces这个空元组对象的身份吗?”。

\n

(这可能永远不会;比较应该是if faces == ():,或者可能只是if not faces:)。

\n