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_lunch 和greeting_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.py :greeting_lunch 和greeting_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文件的方法应该给你足够的信息来选择符合你编码要求的最佳方法。
祝您好运,编码愉快!