Python函数内列表访问及坐标生成函数重复执行问题咨询
要访问函数内部生成的列表,核心是让函数把这个列表“暴露”出来,推荐两种实用方法:
让函数返回列表(最稳妥的方式):在函数内部生成列表后,用
return语句把它返回,外部调用函数时将结果赋值给变量,就能随意使用这个列表了。示例代码:def generate_inner_list(): # 函数内部生成坐标列表 inner_list = [[1, 2], [3, 4]] return inner_list # 外部调用函数,获取内部生成的列表 my_coords = generate_inner_list() print(my_coords) # 输出: [[1, 2], [3, 4]]使用全局变量(不推荐):如果特殊场景需要,可以把列表定义为全局变量,但这种方式容易让代码逻辑混乱,不利于维护,所以除非必要不建议用。示例代码:
global_coords = [] def generate_inner_list(): global global_coords global_coords = [[1, 2], [3, 4]] generate_inner_list() print(global_coords) # 输出: [[1, 2], [3, 4]]
首先要给你点个赞,你的推测方向完全正确!核心问题就是**co-ordinates_generator()被调用了不止一次**,才会出现列表重复打印的情况。不过具体细节和你想的略有不同:
在for point in co-ordinates_generator()这个循环里,Python只会调用一次co-ordinates_generator()来获取完整的坐标列表,之后才会遍历这个列表。但如果你的代码中还有其他地方(比如place_coords()内部的其他位置,或者测试时同时调用了co-ordinates_generator()和place_coords())再次触发了这个函数,就会导致两次打印。
修复方法(完全保留你的遍历逻辑)
最省心的解决方式是先把co-ordinates_generator()的结果保存到变量里,之后遍历这个变量即可,这样函数只会被调用一次,既解决重复打印的问题,又能复用你之前写的所有遍历逻辑。修改后的代码如下:
def place_coords(): # 先调用一次生成函数,把结果存到变量中 coords_list = co-ordinates_generator() # 遍历已保存的列表,原有的逻辑完全不用改 for point in coords_list: if point[0] == '1': place_pin() # 你的其他遍历逻辑(直接保留即可)
这样调整后,co-ordinates_generator()只会执行一次,列表只会打印一次,也不会出现‘pin未定义’这类问题。另外,首次提问格式有点小问题完全没关系,不用在意~
内容的提问来源于stack exchange,提问作者Varattican

