root@learning ~]# cat gcdfunction.py #写一个模块,并调用此模块
def gcd(n1,n2): #之前用过的求最大公约数的代码
gcd = 1
k = 2
while k<= n1 and k<=n2:
if n1%k == 0 and n2 % k == 0:
gcd = k
k = k + 1
return gcd
[root@learning ~]# cat module.py #完整代码
from gcdfunction import gcd #调用模块
n1 = eval(input("enter a number:"))
n2 = eval(input("enter a number:"))
print ("the greatest common divisor for",n1, 'and',n2,"is",gcd(n1,n2))
[root@learning ~]# python3.11 module.py
enter a number:66
enter a number:99
the greatest common divisor for 66 and 99 is 33
参考信息:
在Linux中,Python会在一系列目录中查找模块。这些目录包括:
当前工作目录:Python首先在运行脚本的当前工作目录中搜索模块。
环境变量PYTHONPATH中定义的目录:PYTHONPATH是一个包含一个或多个目录路径的环境变量,Python会在这些目录中搜索模块。
Python的默认安装路径:Python会在默认安装路径中搜索模块,这个路径通常是/usr/lib/pythonX.Y
(其中X和Y代表Python的主版 本和次版本号)。
当然,你也可以通过在代码中使用sys.path.append(path)
来添加其他搜索路径。
至于第二个问题,任意目录下的模块并不一定都可以被调用。在使用import
语句调用模块时,Python只会搜索特定目录中的模块。如果你把自己编写的模块放在了Python搜索路径之外的目录中,你需要通过修改sys.path
或设置PYTHONPATH
来将该目录添加到Python的搜索路径中,这样才能顺利地调用该模块。
[root@learning ~]# cat timelogfunction.py #一个使用装饰器,记录运行时间,和输出日志的代码,
import time
import logging
logging.basicConfig(filename = "/tmp/123.log",level = logging.INFO)
def log(f): #可以被调用的log模块
def wrapper():
logging.info("%s is running" % f.__name__)
return f()
return wrapper
def print_run_time(f): #可以被调用的运行时间模块
def wrapper(*args, **kwargs):
local_time = time.time()
f(*args, **kwargs)
print('hanshu[%s]zhixingshijian is %.2f miao' % (f.__name__, time.time() - local_time))
#f(*args, **kwargs)
return wrapper
#@print_run_time
def test(): #可以忽略
time.sleep(0.5)
print('123')
#test()
[root@learning ~]# cat test3.py #主程序
import timelogfunction #调用上面写的模块
import time
@timelogfunction.print_run_time
def f():
print("hello, test script")
s = 1
for i in range (1, 100):
s += i
print(s)
time.sleep(0.2)
f()
[root@learning ~]# python3.11 test3.py #运行结果
hello, test script
4951
hanshu[f]zhixingshijian is 0.20 miao