如何以最有效的方式编写和构建代码?
How do I write and structure code in most efficient way possible?
几周前我需要一个用于数据收集和排序的爬虫,所以我开始学习 python。
同一天我写了一个简单的爬虫,但代码看起来很难看。主要是因为我不知道如何做某些事情,也不知道如何正确地 google 它们。
例子:
我没有在一行中删除 [ ] 和 '
extra_nr = extra_nr.replace("'", '')
extra_nr = extra_nr.replace("[", '')
extra_nr = extra_nr.replace("]", '')
extra_nr = extra_nr.replace(",", '')
因为我不能做任何事情来列出对象,当我做 str(list object) 时它看起来像 ['this','and this']。
现在我正在创建 discord 机器人,它将我提供给它的数据上传到 google 电子表格。代码又长又丑。启动机器人需要 2-3 秒(idk 如果这是正常的,我认为我写的越多,启动它所需的时间就越多,这让我觉得代码是垃圾)。有时有效,有时无效。
我的问题是我怎么知道我写的东西好?如果我只是继续添加示例中的内容,它将如何影响我的程序?如果我有一个很长的代码,我是否将它拆分并仅在需要时调用它的部分或者它是如何工作的?
通过阅读(或收听)Python 资源中的最佳实践,您肯定会快速进步,例如 Real Python and Talk Python To Me。
与此同时,我建议开始使用一些代码分析器,例如 pylint and bandit 作为您常规工作流程的一部分。
无论如何,欢迎来到 Python 的世界,尽情享受吧! :-)
tl;dr 擅长 Python 并编写好的代码,编写大量 Python 并阅读其他人的代码。了解针对不同问题类型的多种方法,并了解使用哪种方法以及何时使用。随着时间的推移,需要大量练习。至于资源,我强烈推荐这本书“用 Python 自动化无聊的东西”。
至于您的代码示例,您可以为此使用 translate
:
def strip(my_string):
bad_chars = [*"[],'"]
return my_string.translate({ord(c): None for c in bad_chars})
translate
对给定翻译 table 的字符串进行逐字符翻译,因此您创建一个小翻译 table,将您不想设置的字符设置为 None
.
您不需要的字符列表是通过解包(展开)字符字符串创建的。
>>> [*"abc"] == ["a", "b", "c"]
True
另一种选择是使用理解:
def strip(my_string):
bad_chars = [*"[],'"]
return "".join(c for c in my_string if c not in bad_chars)
这里我们使用理解格式 [x for x in y]
从 y
构建一个新的 x
列表,只是指定删除出现在 bad_chars
中的字符.然后我们将剩余的字符列表连接到一个没有指定字符的字符串中。
您可以使用 maketrans() 定义要删除的字符(第 3 个参数):
def clean(S): return S.translate(str.maketrans("","","[],'"))
clean("A['23']") # 'A23'
几周前我需要一个用于数据收集和排序的爬虫,所以我开始学习 python。 同一天我写了一个简单的爬虫,但代码看起来很难看。主要是因为我不知道如何做某些事情,也不知道如何正确地 google 它们。 例子: 我没有在一行中删除 [ ] 和 '
extra_nr = extra_nr.replace("'", '')
extra_nr = extra_nr.replace("[", '')
extra_nr = extra_nr.replace("]", '')
extra_nr = extra_nr.replace(",", '')
因为我不能做任何事情来列出对象,当我做 str(list object) 时它看起来像 ['this','and this']。 现在我正在创建 discord 机器人,它将我提供给它的数据上传到 google 电子表格。代码又长又丑。启动机器人需要 2-3 秒(idk 如果这是正常的,我认为我写的越多,启动它所需的时间就越多,这让我觉得代码是垃圾)。有时有效,有时无效。
我的问题是我怎么知道我写的东西好?如果我只是继续添加示例中的内容,它将如何影响我的程序?如果我有一个很长的代码,我是否将它拆分并仅在需要时调用它的部分或者它是如何工作的?
通过阅读(或收听)Python 资源中的最佳实践,您肯定会快速进步,例如 Real Python and Talk Python To Me。
与此同时,我建议开始使用一些代码分析器,例如 pylint and bandit 作为您常规工作流程的一部分。
无论如何,欢迎来到 Python 的世界,尽情享受吧! :-)
tl;dr 擅长 Python 并编写好的代码,编写大量 Python 并阅读其他人的代码。了解针对不同问题类型的多种方法,并了解使用哪种方法以及何时使用。随着时间的推移,需要大量练习。至于资源,我强烈推荐这本书“用 Python 自动化无聊的东西”。
至于您的代码示例,您可以为此使用 translate
:
def strip(my_string):
bad_chars = [*"[],'"]
return my_string.translate({ord(c): None for c in bad_chars})
translate
对给定翻译 table 的字符串进行逐字符翻译,因此您创建一个小翻译 table,将您不想设置的字符设置为 None
.
您不需要的字符列表是通过解包(展开)字符字符串创建的。
>>> [*"abc"] == ["a", "b", "c"]
True
另一种选择是使用理解:
def strip(my_string):
bad_chars = [*"[],'"]
return "".join(c for c in my_string if c not in bad_chars)
这里我们使用理解格式 [x for x in y]
从 y
构建一个新的 x
列表,只是指定删除出现在 bad_chars
中的字符.然后我们将剩余的字符列表连接到一个没有指定字符的字符串中。
您可以使用 maketrans() 定义要删除的字符(第 3 个参数):
def clean(S): return S.translate(str.maketrans("","","[],'"))
clean("A['23']") # 'A23'