-1

这个问题主要是因为我找不到任何关于如何保留主实例等的好的 Python 示例,并且我试图不养成任何坏习惯,就像我开始 PHP 时所做的那样。我大约 3 小时前开始使用 Python,一直在使用它,主要是控制台,然后我决定在观看https://www.youtube.com/watch?v=2IEePwMAb5Y&list=PL0A9588F9B2C45B3A时尝试这些列表。它主要是杀死代码看起来非常糟糕并且可能不正确。有没有什么地方可以找到一些简单的应用程序,这些应用程序编写为 Python 旨在查看和运行?

背景:我想设计一个小应用程序,让我看看我是否可以循环播放数组。所以我做了一个杂货清单组织者。

i = 0
v = []
vara = None
def view():
    indx = 1
    for i in v:
        print "Grocery #" + str(indx) + ": " + str(i)
        indx += 1
while vara != "end" and vara != "exit":
    vara = raw_input("Please enter a grocery: ")
    vara = str(vara)
    if vara == "view":
        view()
    elif vara[len(vara)-4: len(vara)] == " del":
        key = vara[0:len(vara) - 4]
        if key in v:
            v.remove(key)
            print "Deleted: " + key
        else:
            print "Error, " + key + " was not found in your list"
    elif (vara != "end" and vara != "exit") and len(vara) > 0:
        v.append(vara)
view()

对我来说更重要的是有地方可以找到一些好的例子,这是最重要的。另外,如果可以的话,我将如何创建实例来开始和结束。如果可以的话,非常感谢。

4

1 回答 1

3

要编写更好的 Python 代码,最好的方法是 1)编写大量 Python 代码 2)通过询问“如何以更 Python 的方式编写它?”来批评您自己的 Python 代码。(要了解 pythonic,请阅读http://blog.startifact.com/posts/older/what-is-pythonic.htmlhttp://www.python.org/dev/peps/pep-0020/) 3) 阅读标准库,关于列表推导和迭代工具和巧妙的技巧,所以你把它们放在脑后。Python 非常注重将所有常见操作变成一个线性/单一函数。

以下是我对您的代码的看法:

i = 0

使用错误名称初始化全局变量。变量应该有一个描述性的名称或者是一个临时的迭代变量(在这种情况下 i、j、k 等都可以)

v = []

使用错误名称初始化全局变量。什么是'v'?如果您在 3 个月后阅读您的代码,您可能还不知道它的用途。此外,应尽可能在类或函数内部初始化变量(用于 OOP 封装)。

vara = None

使用错误名称初始化全局变量。什么是'vara'?如果不需要具有全局状态,则不应在全局级别上定义它。您应该使用合适的名称定义变量的使用地点和时间。

def view():
    indx = 1
    for i in v:
        print "Grocery #" + str(indx) + ": " + str(i)
        indx += 1

不是有两个单独的迭代变量,而是enumerate()用来返回索引和项目的元组。http://docs.python.org/2/library/functions.html#enumerate

如在

def view():
    for i, item in v.iteritems():
        print "Grocery #" + str(i) + ": " + str(item)

好看多了!它(可选)此时甚至不需要它自己的方法,因为它是一个两班轮。

while vara != "end" and vara != "exit":

应该包装在一个函数中并在name == " main " 时调用。如__name__ == "__main__": 会做什么?

啊,这就是 vara 的用途。您应该将其称为更具描述性的名称 - 命令、操作、用户命令等等。vara 对我来说毫无意义。

    vara = raw_input("Please enter a grocery: ")
    vara = str(vara)

我很确定这条线是不必要的 - 无论如何,raw_input 不会只能返回一个字符串吗?

    if vara == "view":
        view()
    elif vara[len(vara)-4: len(vara)] == " del":
        key = vara[0:len(vara) - 4]

我想不出一种具体的方法来重写它,但它“闻起来”很老套。(也许是因为您正在通过子字符串和 indexofs 之类的东西来进行所有命令解析,而不是使用适当的结构化方式。但是,每个人都是这样开始的 :))

        if key in v:
            v.remove(key)
            print "Deleted: " + key
        else:
            print "Error, " + key + " was not found in your list"
    elif (vara != "end" and vara != "exit") and len(vara) > 0:
        v.append(vara)
view()
于 2013-05-01T01:03:45.067 回答