Skip to main content

在你的项目中重复使用其他人的代码

通过将现有代码集成到项目中来提高编码效率和知识量。

开源软件的一个最大好处是能够重复使用其他人的代码。 重复使用代码有助于节省时间、发现新功能和学习其他编程风格。 重复使用代码有两种主要方法:

  • 将代码片段直接复制并粘贴到项目中。 如果你不熟悉编码,这是开始重复使用代码的最快方法。
  • 将库导入项目。 虽然此方法需要花一些时间进行学习,但最终会更加轻松高效。 这也是软件开发的基础技能。

在你的项目中使用其他人的代码片段

在学习编码时,可以将其他人的代码片段复制粘贴到项目中。 虽然使用代码片段是学习编码和节省时间的好方法,但在复制另一个开发人员的代码之前,应始终执行几个关键步骤。

1.查找和理解代码片段

第一步是选择要重复使用的代码片段。 若要查找符合条件的代码,请尝试搜索 GitHub。 可以使用搜索限定条件(如 language:YOUR-SEARCH-LANGUAGE)缩小搜索范围。

例如,假设你想要重复使用计算数字阶乘的 Python 代码。 通过在 GitHub 中搜索 factorial language:python is:repository 来查找 new2code/python-factorial 存储库,该存储库可在 factorial_finder.py 中使用以下循环实现计算器:

# Initialize the factorial result to 1
factorial = 1

# Initialize the input number to 6
number = 6

# Loop from 1 to number (inclusive) and multiply factorial by each number
for i in range(1, number + 1):
    factorial *= i

print(f"The factorial of {number} is {factorial}")

如果没有马上明白代码片段,可以要求 Copilot 提供解释。 在 factorial_finder.py 文件顶部的菜单栏中,单击 以启动有关该文件的对话,然后要求 Copilot Explain this program

屏幕截图显示文件视图顶部以深橙色框出的 Copilot 按钮。

2.了解项目许可

在可以重复使用找到的代码之前,需要了解其许可。 许可证决定了在项目中使用代码的方式,包括是否能够复制、修改和分发该代码。

可以在存储库主页的“关于”部分找到项目的许可证。 例如,可以看到 new2code/python-factorial 存储库已根据 MIT 许可证获得许可。 若要阅读许可证,请单击 “MIT 许可证”****。

new2code/python-factorial 存储库主页的屏幕截图。 在右侧边栏中,“MIT 许可证”以深橙色框出。

Note

如果要使用的代码属于其他许可证,请使用许可证中的许可证摘要来了解。

我们希望复制整个 factorial_finder.py 文件,因此 MIT 许可证指示我们应该在自己的项目中添加许可证的副本。 在 Python 文件的顶部,将许可证粘贴为注释。

3.使用和修改代码片段

了解代码及其许可后,可以将代码片段粘贴到项目中。 虽然可以按原样使用代码,但通常需要针对特定用例对其进行修改。

对于阶乘示例,假设我们想要快速计算 5、7、9 和 10 的阶乘。 我们可以将计算器移动到以参数的形式获取数字的函数中,而不是针对每个数字复制粘贴整个程序。

为了帮助我们进行这些更改,我们要求 Copilot 来建议并解释实现。 我们可以将当前代码粘贴到聊天窗口中,然后提示 Copilot Wrap the Python code above in a function。 Copilot 将生成如下所示的代码:

Python
def calculate_factorial(number):
    # Initialize the factorial result to 1
    factorial = 1

    # Loop from 1 to number (inclusive) and multiply factorial by each number
    for i in range(1, number + 1):
        factorial *= i

    return factorial

有了新函数,我们可以轻松地找到数字的阶乘,只需将以下代码添加到项目中,然后运行 Python 程序即可:

Python
print(calculate_factorial(5))
print(calculate_factorial(7))
print(calculate_factorial(9))
print(calculate_factorial(10))

祝贺你! 你已成功找到、理解和修改了示例代码片段。

在项目中使用库中的代码

使用库是开发人员的标准做法。 库本质上是其他开发人员编写的用于执行特定任务的代码集合。 可以将库导入到项目中以使用预先编写的代码,从而节省时间和精力。

在本节中,我们将继续使用上一节的 Python 阶乘计算器示例。 下面是我们的当前代码,供你参考:

Python
def calculate_factorial(number):
    # Initialize the factorial result to 1
    factorial = 1

    # Loop from 1 to number (inclusive) and multiply factorial by each number
    for i in range(1, number + 1):
        factorial *= i

    return factorial

print(calculate_factorial(5))
print(calculate_factorial(7))
print(calculate_factorial(9))
print(calculate_factorial(10))

1.查找库

在了解要添加到项目的功能后,即可使用相关代码搜索库。 Copilot Chat 是搜索库的一种简单方法,因为可以使用自然语言准确描述要查找的内容。

回到我们的阶乘计算器,查找阶乘是一个相当常见的函数,而且很有可能有人已经在现有的库中添加了这个函数。 如果我们询问 Copilot Is there a Python library with a function for calculating a factorial?,Copilot 将告诉我们阶乘函数在标准 Python 库的 math 模块中。

2.确定项目中安全性的优先级

向项目添加库或模块时,将创建所谓的依赖项。 依赖项是项目正常运行所依赖的预编写代码捆绑包,如果未仔细编写或维护,可能会在工作中引入安全漏洞。 值得庆幸的是,可以采取一些措施来为项目提供最佳保护。

热门库很有可能是安全的,因为许多开发人员都在积极维护和使用它们。 判断热门程度的一个明显的标志是存储库拥有的星标。 如果找不到依赖项的 GitHub 存储库,请尝试寻求 Copilot 的帮助。

例如,对于 math 模块,我们可以提示 Copilot Find the GitHub repository containing the code for the math module in Python. Copilot 将告诉我们 math 模块已在拥有超过 64,000 颗星的 python/cpython 中定义。

为项目启用 Dependabot alerts

如果已启用,则在 Dependabot 检测到依赖项中存在安全问题时会自动生成 Dependabot alerts,帮助你快速修复漏洞。 Dependabot 可在所有开源 GitHub 存储库上免费使用。

若要启用 Dependabot alerts,请单击项目的 GitHub 存储库的“安全性”选项卡****。 在 Dependabot alerts 旁,单击“启用 Dependabot alerts”。 可以从边栏的“Dependabot”选项卡访问 Dependabot alerts

存储库的“安全性”页面的屏幕截图。 “安全性”选项卡、“Dependabot”选项卡和“启用 Dependabot alerts”按钮均以深橙色框出。

3.从库实现代码

你已采取措施保护工作,现在需要将库导入项目,然后在代码中使用其内容。 你可以阅读该库的文档,了解如何自行执行此操作,也可以要求 Copilot 为你建议和解释实现。

对于阶乘程序,我们可以询问 Copilot 类似于 How do I use the factorial function of the math module in my Python project? 这样的问题,然后 Copilot 将建议以下版本的代码:

Python
import math

# Calculate the factorial of a number
number = 5
result = math.factorial(number)

print(f"The factorial of {number} is {result}")

将项目中的现有代码替换为上述实现后,已成功在示例项目中重复使用库中的代码!