【发布时间】:2021-10-27 21:21:08
【问题描述】:
我设法使用 for 循环来创建一个嵌套函数。这是我的代码:
sub="01"
locals()['MSC' + sub] = {}
seeds = ["aHPC", "pHPC", "FPl", "FPm", "ERC", "PHC", "PRC", "46"]
masks = ["whole", "ERC", "PFl", "FPm"]
hemispheres = ["R", "L"]
sessions = ["01", "02"]
for hemi in hemispheres:
for seed in seeds:
for mask in masks:
current_pair = hemi + "_" + seed + "_" + mask
locals()['MSC' + sub][current_pair] = {}
for ses in sessions:
input_dir = "/1D_fc/" + sub + "_" + ses + "/"
mean_fn = input_dir + "R.Fim." + hemi + "_" + seed + "_" + mask + ".nii.gz"
try:
mean_brain=nib.load(mean_fn)
#control_brain=nib.load(control_fn)
except:
"couldn't load"
mean_data = mean_brain.get_data() # 3D array; get the dimensions; type(mean_control_data)
meanDataVector = mean_data.ravel()
locals()['MSC'+sub][current_pair][ses] = meanDataVector
当将所有这些代码放入一个函数中时,该函数请求子变量作为字符串。它没有返回我需要的嵌套字典。
def CreateDict(sub):
subject=sub
locals()['MSC' + sub] = {}
seeds = ["aHPC", "pHPC", "FPl", "FPm", "ERC", "PHC", "PRC", "46"]
masks = ["whole", "ERC", "PFl", "FPm"]
hemispheres = ["R", "L"]
sessions = ["01", "02"]
for hemi in hemispheres:
for seed in seeds:
for mask in masks:
current_pair = hemi + "_" + seed + "_" + mask
locals()['MSC' + sub][current_pair] = {}
for ses in sessions:
input_dir = "/1D_fc/" + sub + "_" + ses + "/"
mean_fn = input_dir + "R.Fim." + hemi + "_" + seed + "_" + mask + ".nii.gz"
try:
mean_brain=nib.load(mean_fn)
except:
"couldn't load"
mean_data = mean_brain.get_data() # 3D array; get the dimensions; type(mean_control_data)
meanDataVector = mean_data.ravel()
locals()['MSC'+sub][current_pair][ses] = meanDataVector
return locals()['MSC' + subject]
sub="01"
CreateDict(sub)
函数没有错误信息。
对此有何见解?谢谢!
【问题讨论】:
-
在此处使用
locals()是对该功能的滥用,请考虑改用字典。 -
locals()的使用是您问题的很大一部分。请记住,函数中的locals()实际上是函数的本地函数。当函数退出时,locals()中的所有内容都会消失,因此不会有MSC01变量。只需在函数中创建一个局部变量并返回该局部变量。如果调用者想存储它,调用者会存储它。 -
你好蒂姆,这很有帮助!
标签: python function dictionary