如何将Python自定义函数脚本导入另一文件并正确调用测试
Python作业问题修正方案
现有代码错误汇总
- 函数参数不符合要求:
find要求传入key和列表两个参数,你只定义了一个参数;abs要求传入单个数字,你定义的是接收列表,参数数量类型都不对。 - 递归死循环:自定义的
min/max/sum函数和Python内置函数重名,函数内部直接调用自身名称的函数会触发无限递归,程序直接崩溃。 - 缩进错误:
avg函数的定义、内部循环的缩进完全不符合Python规范,会直接报语法错误。 - 逻辑错误:
avg函数内sum += aList是把整个列表和数值相加,应该取列表的当前元素aList[i];sum函数写了死循环加自调用,完全无法运行。 - 冗余代码:myFunctions.py中生成随机列表的代码写在全局作用域,导入文件时会自动执行,这部分代码应该放到测试文件中。
修正后的myFunctions.py代码
# 严格按照作业要求的函数名和参数定义 def min(lst): # 调用内置min要指定__builtins__避免和自定义函数重名 return __builtins__.min(lst) def max(lst): return __builtins__.max(lst) def avg(lst): total = 0 for num in lst: total += num return total / len(lst) def sum(lst): total = 0 for num in lst: total += num return total def abs(num): if num >= 0: return num else: return -num def find(key, lst): return key in lst def isEven(number): return number % 2 == 0
修正后的testFunctions.py代码
# 导入整个自定义模块 import myFunctions # 也可以单独导入需要的函数:from myFunctions import min, max, avg, sum, abs, find, isEven from random import randint # 生成测试用的随机列表 x = randint(5,10) test_list = [] for i in range(x): number = randint(1,7) test_list.append(number) print("生成的测试列表:", test_list) # 逐个测试所有函数 print("列表最小值:", myFunctions.min(test_list)) print("列表最大值:", myFunctions.max(test_list)) print("列表总和:", myFunctions.sum(test_list)) print("列表平均值:", myFunctions.avg(test_list)) test_num = randint(-10, 10) print(f"测试数字{test_num}的绝对值:", myFunctions.abs(test_num)) search_key = randint(1,7) print(f"查找值{search_key}是否在列表中:", myFunctions.find(search_key, test_list)) even_test_num = randint(1,20) print(f"测试数字{even_test_num}是否为偶数:", myFunctions.isEven(even_test_num))
调用说明
- 导入模块后,用
模块名.函数名(参数)的格式调用即可,传入的参数数量、类型要和函数定义完全匹配,比如find函数必须先传要查找的key,再传目标列表。 - 如果不想每次调用都写模块名,可以用
from myFunctions import *导入所有函数,直接写函数名加参数调用即可。
内容的提问来源于stack exchange,提问作者Curry Packet
相关产品推荐
相关产品推荐

