Navigation

    蓝鲸ROS机器人论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    ROS Python 代码风格说明

    技术交流
    ros教程
    1
    1
    937
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • weijiz
      weijiz last edited by 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 Reply Last reply Reply Quote 0
      • First post
        Last post
      Copyright © 2015-2021 BlueWhale community