如何将一个Python脚本导入另一个Python脚本中

481 阅读2分钟

5/5 - (1票)

在这篇文章中,你将学习如何将一个Python脚本导入另一个Python脚本。

问题的提出和解决方案概述

为了使问题更有趣,我们有以下的运行场景。

你在Finxter学院的老板要求你为他们的用户创建五(5)个定制的登录问候语。为了保持代码的简洁,你决定将这些函数放在一个新的Python文件中,greetings.py

💡注意:在这篇文章中,我们将使用虚构的Finxter学院用户cdriver

greetings.py文件的内容

def greeting_am(user):
    return f"Good Morning {user}."
def greeting_lunch(user):
    return f"Enjoy Lunch {user}."
def greeting_break():
    return f"You need a break."
def greeting_aft(user):
    return f"Good Afternoon {user}."
def greeting_pm(user):
    return f"Good Evening {user}."

💬 问题。我们如何写Python代码将一个Python脚本导入到另一个Python脚本中?

我们可以通过下面的一个方案来完成这个任务。

  • 方法1:从另一个Python文件中导入一个单一函数
  • 方法 2: 从另一个 Python 文件中导入 2 个函数
  • 方法3:从另一个Python文件中导入所有函数
  • 方法4:使用 read() 来读入另一个Python文件
  • 奖励脚本

准备工作

在每个代码片断的顶部添加以下代码。这个代码段将使本文中的代码无错误地运行。

import datetime

方法1:从另一个Python文件中导入单个函数

如果一个Finxter用户在规定的范围内登录(today.hour >= 1 and today.hour < 12),这段代码就会假定它是早上,并显示greeting_am 消息。

from greetings import greeting_am
today = datetime.datetime.now()
if (today.hour >= 1 and today.hour < 12):
    from greetings import greeting_am
    print(greeting_am('cdriver'))

这段代码通过使用以下方法来获取当前日期 [datetime.datetime.now()](https://docs.python.org/3/library/datetime.html)并将其保存到today

接下来,该 if语句检索当前的小时 (today.hour)。如果这个值在规定的范围内,有一个(1)函数从greetings.py:greeting_am 中被调用并执行。

其结果是输出到终端。

输出

早上好,cdriver。

方法2:从另一个Python文件中导入两个函数

如果一个Finxter用户在规定的范围(today.hour >= 12 and today.hour <= 13) 之间登录,这段代码假定这是用户的午餐时间,并显示greeting_lunchgreeting_break() 消息。

from greetings import greeting_lunch, greeting_break
today = datetime.datetime.now()
if (today.hour >= 12 and today.hour <= 13):
    from greetings import greeting_lunch, greeting_break
    print(greeting_lunch('cdriver'))
    print(greeting_break())

这段代码通过使用以下方法来检索当前日期 [datetime.datetime.now()](https://docs.python.org/3/library/datetime.html)并将其保存到today

接下来,该 if语句检索当前的小时(today.hour)。如果这个值在规定的范围内,将从greetings.pygreeting_lunchgreeting_break ,并执行两个(2)函数。

其结果是输出到终端。

输出

享受午餐cdriver。
你需要休息一下。

💡注意:如果你的代码只需要从外部 Python 文件中的几个函数,可能最好只调用你需要的那些。


方法 3:从另一个 Python 文件中导入所有函数

如果一个Finxter用户在规定的范围内登录(today.hour > 13 and today.hour < 17) ,这段代码就假定它是下午,并显示greeting_aft

from greetings import *
today = datetime.datetime.now()
if (today.hour > 13 and today.hour < 17):
    from greetings import *
    print(greeting_aft('cdriver'))

这段代码通过使用以下方法检索当前日期 [datetime.datetime.now()](https://docs.python.org/3/library/datetime.html)并将其保存到today

接下来,该 if语句检索当前的小时(today.hour)。如果这个值在规定的范围内,greetings.py 中的全部内容被调用(from greetings import *),greeting_aft 执行。

其结果是输出到终端。

输出

下午好,cdriver。

方法4:使用read()来导入另一个Python文件

如果一个Finxter用户在规定的范围(today.hour > 17 and today.hour < 24) 之间登录,这段代码假定是晚上,并显示greeting_pm 消息。

today = datetime.datetime.now()
if (today.hour > 17 and today.hour < 24):
   with open('greetings.py', 'r') as fp:
        exec(fp.read())
        print(greeting_pm('cdriver'))

这段代码通过使用""来检索当前日期,并将其保存到。 [datetime.datetime.now()](https://docs.python.org/3/library/datetime.html)并将其保存到today

然后if语句检索出当前的小时数(today.hour)。如果这个值在规定的范围内,则读入greetings.py 的全部内容(fp.read()),允许访问这个文件的所有内容。对于这个例子,greeting_pm 执行。

最后,我们使用(危险的!)函数来执行该文件。 [exec()](https://blog.finxter.com/python-exec/)函数来执行文件。

🌍 了解更多Python exec() - 一个危险函数的黑客指南

Python 的exec() 函数会执行你作为字符串或可执行对象参数传递的 Python 代码。

这被称为 动态执行因为,与普通的静态 Python 代码不同,你可以在运行时生成代码并执行它。

这样,你可以运行以程序方式创建的Python代码。

其结果是输出到终端。

输出

晚上好,cdriver。

奖励脚本

利用greetings.py 文件和上面的例子,这段代码将其精简为一个简洁的文件。

import datetime
from greetings import *

today = datetime.datetime.now()

if (today.hour >= 1 and today.hour < 12):
    print(greeting_am('cdriver'))
elif (today.hour >= 12 and today.hour <= 13):
    print(greeting_lunch('cdriver'))
    print(greeting_break())
elif (today.hour > 13 and today.hour < 17):
    print(greeting_aft('cdriver'))
else:    
    print(greeting_pm('cdriver'))

⚡Finxter挑战。修改greetings.py文件。


摘要

这五(5)种将Python脚本导入另一个Python文件的方法应该给你足够的信息来选择符合你编码要求的最佳方法。

祝您好运,编码愉快!