Python 2.7至3.x版本特性翻译概览

需积分: 9 0 下载量 91 浏览量 更新于2024-12-03 收藏 15KB ZIP 举报
资源摘要信息:"Python是一种广泛使用的高级编程语言,它以其清晰的语法和强大的代码可读性而受到开发者的青睐。自Python 2.7版本发布以来,Python经历了多个版本的迭代,直至最新的3.x系列。本次翻译内容主要关注Python从2.7版本到3.x版本的语言特性变化,并未涉及库函数的变化,因此本内容更适合于那些需要了解Python语言演进的开发者。" 知识点概述: 1. Python版本更新概览: - Python 2.7是Python 2系列的最后一个版本,它对语言做了重要的完善和调整,同时兼容之前的版本。 - Python 3.x系列从2008年开始推出,引入了大量改进和新特性,但同时也打破了向后兼容性,使得从Python 2迁移到Python 3成为了一项挑战。 2. 语言特性变化: - 打印函数升级:在Python 3中,print变成一个函数,需要使用括号。 - Unicode支持:Python 3中字符串默认为Unicode,Python 2中的str和unicode类型被合并为str。 - 整数除法:Python 3中使用/进行除法会得到浮点结果,//用于整数除法。 - 异常处理:捕获异常的语法进行了简化,例如不再需要将异常类型和变量分开声明。 - 迭代器返回值:map、filter、zip等函数返回迭代器而不是列表。 - 协程的引入:PEP 3114和PEP 342提供了对协程的支持,使得异步编程更加方便。 - 元类的改进:Python 3中元类的定义和使用更加直观。 3. 语言改进点: - 统一的import语句:Python 3中所有的import语句都使用了同样的语法规则。 - bytes类型:引入bytes类型和bytearray类型,用于处理二进制数据。 - range函数:range()函数返回的是一个range对象,它是不可变的序列类型,而不再是列表。 - dict方法:字典类型的一些方法,例如dict.keys(), dict.values(), dict.items()现在返回视图对象。 - 输入函数:input()函数在Python 3中用来获取用户输入,而原来的raw_input()函数被移除。 - 类的内建函数__future__:这些函数允许开发者在Python 2中体验Python 3的某些特性。 4. 迁移建议: - 使用工具:比如2to3工具,可以帮助自动化将Python 2代码转换为Python 3代码的过程。 - 代码审查:在迁移过程中进行代码审查,确保所有依赖的第三方库都支持Python 3。 - 逐步迁移:对于大型项目,逐步迁移代码到Python 3可以减少迁移过程中的风险和中断。 5. 不包含的变更内容: - 本翻译内容不涉及对Python内置库的变更,仅限于语言层面的更新和改进。 本翻译内容对于希望了解Python语言发展的开发者来说是一份宝贵的资料,通过对版本间语言特性变化的学习,可以加深对Python编程范式演进的理解,并指导实践中的编程工作。对于使用Python 2的开发者而言,了解这些变化将有助于他们更加顺畅地过渡到Python 3,充分利用新版本中引入的现代编程特性。

void Extract1DEdge::GetEdgePoint(int threshold, Translation traslation, Selection selection) { if (m_mInputMat.empty()) { return; } if (m_mInputMat.channels() > 1) { cvtColor(m_mInputMat, m_mInputMat, COLOR_BGR2GRAY); } double* ptr = m_mInputMat.ptr<double>(0); m_vpCandidate.clear(); m_vEdgesResult.clear(); //The theshold condition is met for (int i = 0; i < m_mInputMat.cols; i++) { double dGradient = abs(ptr[i]); if (dGradient >= threshold) { m_vpCandidate.push_back(Point2d(i, ptr[i])); } } if (m_vpCandidate.size() == 0) { return; } //The translation condition is met if (traslation == Translation::Poisitive)// from dark to light: f'(x)>0 { for (vector<Point2d>::iterator iter = m_vpCandidate.begin(); iter != m_vpCandidate.end();) { if ((*iter).y <= 0) { //cout << "Negative Edge: " << (*iter).y << endl; iter = m_vpCandidate.erase(iter); } else { iter++; } } } else if (traslation == Translation::Negative) { for (vector<Point2d>::iterator iter = m_vpCandidate.begin(); iter != m_vpCandidate.end();) { if ((*iter).y > 0) { iter = m_vpCandidate.erase(iter); } else { iter++; } } } if (m_vpCandidate.size() == 0) { return; } //The selection condition is met if (selection == Selection::Fisrt) { m_vpCandidate.erase(m_vpCandidate.begin() + 1, m_vpCandidate.end()); } else if (selection == Selection::Last) { m_vpCandidate.erase(m_vpCandidate.begin(), m_vpCandidate.end() - 1); } else if (selection == Selection::Strongest) { Point2d pdMax(0, 0); double dGradientMax = 0; for(Point2d item: m_vpCandidate) { if (abs(item.y) >= dGradientMax) { pdMax = item; dGradientMax = abs(item.y); } } m_vpCandidate.clear(); m_vpCandidate.push_back(pdMax); } else if (selection == Selection::weakest) { Point2d pdMin(0, 99999999); for (Point2d item : m_vpCandidate) { if (abs(item.y) <= pdMin.y) { pdMin.y = abs(item.y); pdMin.x = item.x; } } m_vpCandidate.clear(); m_vpCandidate.push_back(pdMin); } double dEdgex = 0, dEdgey = 0; for (Point2d item : m_vpCandidate) { if (isinf(m_dK)) { dEdgex = m_pdStart.x; dEdgey = m_pdStart.y + sin(to_radian(m_dAngle)) * item.x; } else { dEdgex = m_pdStart.x + item.x * cos(to_radian(m_dAngle)); dEdgey = m_dK * dEdgex + m_dB; } m_vEdgesResult.push_back(Edge1D_Result(Point2d(dEdgex, dEdgey), item.y)); } } 使用 OpenCvSharp4.6 编写函数 GetEdgePoint(int threshold, Translation traslation, Selection selection)

2023-06-07 上传
2024-12-04 上传