我設法使用 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)
該函式沒有錯誤訊息。
對此有何見解?謝謝!
uj5u.com熱心網友回復:
不要那樣使用locals,只需在函式內部創建字典return,然后將其分配給呼叫站點的變數。像這樣的東西:
def create_dict(sub):
data = {} # no need for locals
# ...
return data
msc01 = create_dict('01')
# proceed to use msc01
如果你想為不同的sub值創建和使用多個字典,也可以考慮使用另一個字典:
msc = {}
for value in ('01', '02', '03'):
msc[value] = create_dict(value)
# now you have msc['01'] etc.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/342968.html
