在python中区分函数(action)和变量(option)的命名约定

时间:2018-02-28 14:39:57

标签: python naming-conventions

通常我会做一些小功能。例如save_csv(),show_plot(),然后是更大的函数,它们可以执行大量的操作并可选择调用小函数。什么是一个合适的命名惯例,以区分例如save_csv()作为函数,save_csv作为标志? 在C等中,使用匈牙利表示法并使用'b'作为'boolean'为变量添加前缀并不罕见。但我不认为这是非常pythonic。而且我已经尝试了'do_'前缀的标志,它有点工作,但也是丑陋和混乱。我想知道是否有任何约定?

我在pep8中看不到任何东西。 https://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles

e.g。

def foo(..., b_resample, b_save_csv, b_save_plot, b_show_plot, b_compare):

    # do some stuff

    if b_resample:
        # do more stuff
        resample(...)

    if b_show_plot:
        # do more stuff
        show_plot(...)

    if b_compare:
        # do more stuff
        compare(...)

    # do more stuff

    if b_save_csv:
        # do more stuff
        save_csv(...)

更新: 考虑到该功能的论点是面向公众的,我希望它们“体面”,这就是为什么我不喜欢匈牙利表示法或在这种情况下引导下划线。然而,我正在考虑转向下面,公众面临的args是人类可读的,而在内部他们有领先的下划线。这是常见做法吗?

def foo(..., **kwargs):
    _resample = kwargs.get('resample', False)
    _show_plot = kwargs.get('show_plot', False)
    _save_plot = kwargs.get('save_plot', True)
    _compare = kwargs.get('compare', True)
    _save_csv = kwargs.get('save_csv', True)

    # do some stuff

    if _resample:
        # do more stuff
        resample(...)

    if _show_plot:
        # do more stuff
        show_plot(...)

    if _compare:
        # do more stuff
        compare(...)

    # do more stuff

    if _save_csv:
        # do more stuff
        save_csv(...)

3 个答案:

答案 0 :(得分:1)

直接从PEP8

  

函数名称应为小写,并根据需要用下划线分隔,以提高可读性。

     

变量名称遵循与函数名称相同的约定。

所以我不认为那里有一个" pythonic"约定将函数与共享相同名称的变量区分开来的约定。我认为这更像是个人选择,因此,我个人使用名为has_save_csvis_save_csv的变量(正如Ramazan Polat已经提到的那样)。

更新是的,当您计划在内部使用变量时,最好让变量以前导下划线开头。你可以阅读更多关于这个优秀的article的内容,它简明扼要地总结了下划线的含义。

答案 1 :(得分:0)

您可以使用SaveCSV作为方法名称,使用save_csv作为属性名称,但我不推荐使用。因为通常的方法是做'对象的某种东西,而属性只是对象的状态。

在您的情况下,我建议您使用save_csv()作为方法名称,使用is_save_csv作为属性名称。

答案 2 :(得分:0)

理想情况下,布尔标识符应以形容词结尾,因此我会使用类似"想要&#34 ;;的后缀。例如 plot_wanted