【Python学习笔记】关于if __name__ == '__main__'

本文介绍Python中if __name__ == '__main__'的作用,此语句用于判断当前文件是否作为主程序运行,而非被导入到其他模块中。通过这种方式,可以将一些仅在直接运行脚本时才执行的代码片段隔离出来。

关于if name == ‘main


Python脚本和模块都是一个以.py结束的文件,那程序是如何判断一个.py文件是作为脚本还是模块呢?关键是一个名为name的变量,如果它的值是main,则不能作为模块,只能作为脚本直接运行。所以在很多脚本的最后都有一段类似下面的语句,限制只能以脚本方式运行,不作为模块:

if __name__ == '__main__':
    main()

最近一直在学习用python,因为遇到过几次 if name == “main” 表达式,当时没当作回事,其实这个作用挺大的,因此写下来记录一下备忘。python的语法我就不在此描述了,因为相关文档很多。

def test():
    print "test is running"

if __name__ == "__main__":#自运行时调用该程序块
    print "test main is working"

if __name__ == "test":#import时调用该程序块
    print "test is invoked"

执行效果:
这里写图片描述
import执行效果如图:
这里写图片描述
执行test()方法效果如图:
这里写图片描述

通过这个例子,python应用模块的自测试程序都放在 if name == “main” 条件块下是多么方便。

### Python OpenCV 面部识别代码中的常见语法和逻辑问题分析 #### 1. 条件语句 `if __name__ == '__main__':` 的作用 在 Python 中,`if __name__ == '__main__':` 是一种常见的模式,用于区分模块被直接运行还是作为导入的库使用。当脚本直接执行时,变量 `__name__` 将设置为 `'__main__'`;但如果它是作为一个模块被其他文件导入,则 `__name__` 将等于模块名[^3]。 因此,在面部识别程序中,如果没有正确编写这一部分,可能会导致某些功能无法正常启动或调试困难。例如: ```python if __name__ == "__main__": main_function() # 这里应该调用实际的功能函数 ``` 如果遗漏了这行或者错误地定义了入口点,可能导致代码不会按预期运行。 --- #### 2. OpenCV 函数兼容性问题(版本差异) 根据已知信息,“cv2.cv 不再存在于 OpenCV 3.0 及以上版本中”,这意味着旧版教程中的许多写法可能不再适用[^1]。例如,颜色空间转换常量从 `CV_BGR2HSV` 改成了 `COLOR_BGR2HSV`。同样地,`cv2.face.createLBPHFaceRecognizer()` 在较新的 OpenCV 版本中已被移除,取而代之的是独立安装的扩展包 `opencv-contrib-python`[^4]。 解决办法是在项目初始化阶段确认所使用的 OpenCV 库版本,并相应调整 API 调用方式。可以通过以下命令检查当前环境下的 OpenCV 版本号: ```python import cv2 print(cv2.__version__) ``` --- #### 3. `cv2.VideoCapture` 和摄像头访问失败的情况 在涉及实时视频流的应用场景下,经常会出现由于设备索引配置不当而导致捕获不到帧的问题。比如下面这段代码片段尝试打开默认摄像机(通常是笔记本内置相机),但假如系统中有多个外接装置则需指定确切编号来匹配目标硬件资源。 ```python cap = cv2.VideoCapture(0) # 参数 '0' 对应第一个可用摄像头 while True: ret, frame = cap.read() if not ret: break # 若读取出错退出循环 ... ``` 另外需要注意释放 VideoCapture 对象以避免内存泄漏现象发生。 ```python finally: cap.release() cv2.destroyAllWindows() ``` --- #### 4. 关键点检测模型集成引发的新挑战 现代计算机视觉解决方案往往融合传统方法与深度学习框架的优势共同完成任务。正如提到过的提交成果那样成功集成了 OpenCV 的基础人脸定位能力以及自训卷积神经网络(CNNs)提取更精细特征的能力[^2]。然而这种混合架构也带来了额外维护负担——确保两套体系间数据格式一致性和同步更新频率至关重要。 假设我们希望利用 TensorFlow/Keras 训练好的关键点预测模型配合 OpenCV 处理图像预处理工作流程如下: ```python from tensorflow.keras.models import load_model model = load_model('path/to/model.h5') def preprocess_image(image): resized_img = cv2.resize(image, (96, 96)) # CNN 输入尺寸标准化 normalized_img = resized_img / 255 # 归一化像素值至 [0,1] reshaped_img = np.expand_dims(normalized_img, axis=0) return reshaped_img roi_gray = ... # ROI 截取后的灰度图 keypoints = model.predict(preprocess_image(roi_gray))[0] ``` 这里强调要特别留意各环节之间的衔接细节以免引入不必要的偏差误差影响最终效果评估准确性. --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值