导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    ROS Python 代码风格说明

    技术交流
    ros教程
    1
    1
    1468
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • weijiz
      weijiz 最后由 weijiz 编辑

      此文翻译自ROS wiki

      本文定义了一个在开发ROS Python程序时应当遵循的代码风格指南。这个适用于所有的ROS代码,无论是核心还是非核心代码。

      1. 代码风格
        Python的代码应当遵循PEP8标准。PEP8并不是一个严格的代码风格标准。它对于代码可读性的要求要高于标准的一致性。所以在写代码的时候要灵活对待这个标准。下面是PEP8的一个简单总结
      • package_name
      • ClassName
      • method_name
      • field_name
      • _private_something
      • self.__really_private_field
      • _global
      • 4 space indentation
      1. load
        这里只是对于使用 rosbuild/rosmake的软件包有效。如果你使用c的是catkin则不能使用roslib,load_manifest
        (鉴于现在大家基本都在使用catkin,这一段略过)

      2. 软件包和模块的命名规则(__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的导出路径。

      1. 节点文件

      在ROS中,节点的类型和节点文件的名称一样。一般情况下,这意味着在你的文件代码的头部添加#!/usr/bin/env python, 同时文件名为节点的名字。

      如果你的节点很简单,一个文件可能就包含了所有的代码。否则很有可能要在代码中引入其他代码。

      注意: 我们努力把和ROS相关的代码与能够重用的和通用的代码分开。 把节点文件和放置在src/packagename文件夹内文件分开能够很好的实现这个目的。

      1. 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中被限制使用
      1 条回复 最后回复 回复 引用 0
      • 1 / 1
      • First post
        Last post
      Copyright © 2015-2023 BlueWhale community