Python返回整数的函数输出可否作为数组索引 随机函数多次调用值是否一致
问题解答
1. 多int返回值是否可以用作数组索引,G[func()[0]]写法是否可行?
完全可行。Python中返回多个值的函数本质是返回一个存储了对应值的元组,只要你取到的元素是符合数组索引要求的int类型(非负、且不超过对应维度的最大索引值),就可以直接用作numpy数组/矩阵的索引。
示例代码:
import numpy as np # 返回两个int的示例函数 def func(): return 1, 3 G = np.array([10, 20, 30, 40]) # 写法合法,输出为G[1]的值:20 print(G[func()[0]])
注意如果返回的int超出数组索引范围,会触发IndexError。
2. 函数内部包含随机生成逻辑时,每次调用返回值是否会不同?
默认情况下每次调用返回值都会不同:你每调用一次函数,内部的随机生成逻辑都会重新执行一次,生成新的随机值,对应的返回结果自然会变化。
如果需要固定返回结果,可以在调用函数前手动固定随机数种子:
import random # 固定随机种子 random.seed(123) # 如果用numpy的随机数则使用:np.random.seed(123) def random_func(): return random.randint(0,3), random.randint(0,3) # 固定种子后多次调用返回值一致 print(random_func()) print(random_func())
额外提醒:如果你的代码里写了两次func()调用(比如G[func()[0]]和G[func()[1]]),两次调用会各自执行随机逻辑,拿到的两个索引不属于同一组计算结果,大概率不符合你的预期。
3. 如何在单次函数调用中提取所有返回值?
直接用多变量解包语法即可,只调用一次函数,就可以把所有返回值分别赋值给对应变量:
# 单次调用解包所有返回值 winner, loser = func() # 后续直接用变量作为索引即可 print(G[winner], G[loser])
这种写法既减少了不必要的重复函数调用,也完全规避了多次调用带随机逻辑的函数带来的结果不一致问题。
内容的提问来源于stack exchange,提问作者Hopfield
相关产品推荐
相关产品推荐

