ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
ROS Python 代码风格说明
-
此文翻译自ROS wiki
本文定义了一个在开发ROS Python程序时应当遵循的代码风格指南。这个适用于所有的ROS代码,无论是核心还是非核心代码。
- 代码风格
Python的代码应当遵循PEP8标准。PEP8并不是一个严格的代码风格标准。它对于代码可读性的要求要高于标准的一致性。所以在写代码的时候要灵活对待这个标准。下面是PEP8的一个简单总结
- package_name
- ClassName
- method_name
- field_name
- _private_something
- self.__really_private_field
- _global
- 4 space indentation
-
load
这里只是对于使用 rosbuild/rosmake的软件包有效。如果你使用c的是catkin则不能使用roslib,load_manifest
(鉴于现在大家基本都在使用catkin,这一段略过) -
软件包和模块的命名规则(
__init__.py
文件)
所有的Python代码必须被放置在一个模块命名空间(module namespace). ROS会把你的Python代码文件夹导出到你的依赖路径里面。所以一定要小心不能和其他人引用的软件包相冲突。我们非常建议你的软件包名称和你的ROS包名称一致。
下面是两种推荐的代码文件布局风格
没有消息或服务的小模块
packagename |- src/ |- packagename.py |- scripts/ |- non-exported python files
有消息和服务的模块
packagename |- src/ |- packagename/ |- __init__.py |- yourfiles.py |- scripts/ |- non-exported python files
如果你不了解什么是
__init__.py
, 我们推荐你看看这篇文章由于 Python的 消息和服务生成程序需要在你的软件包里面生成文件,所以这个更复杂的文件布局是需要的。
在一些罕见的情况下,你不能把你的代码放入
/src
文件夹内(比如 第三方代码),你需要通过修改你的Mainfest文件来覆盖Python的导出路径。- 节点文件
在ROS中,节点的类型和节点文件的名称一样。一般情况下,这意味着在你的文件代码的头部添加
#!/usr/bin/env python
, 同时文件名为节点的名字。如果你的节点很简单,一个文件可能就包含了所有的代码。否则很有可能要在代码中引入其他代码。
注意: 我们努力把和ROS相关的代码与能够重用的和通用的代码分开。 把节点文件和放置在src/packagename文件夹内文件分开能够很好的实现这个目的。
- Python的功能和版本
我们的目标环境是Python 2.5, 尽管我们希望代码能够在Python 2.6,Python2.7 以及Python3K等等环境使用。这意味着:
- 使用新式风格的class
- 不要使用reduce() sum(),在大多数情况下for的效率更高
- 避免使用map() filter(),使用list作为替代
- 不要用反引号代替repr
- 不要用<>代替 “!=”
- 如果你需要真的除法运算(默认是整除) 使用 from future import division
- 使用subprocess , 不要使用popen2, os.popen
- 不要使用 dict.has_key() 用 key in dict
- 不要使用 zip(),range(), map(),filter()因为在以后的版本中会返回迭代器
- 不要使用string.{atoi|atof|…}(),使用int(), float()
- 不要使用 print >> f, “Message”. 使用f.write(“Message\n”)
以各条的的原因
- 不能兼容Python 2.5
- 在Python 3000中被限制使用
- 代码风格