вам не нужно открывать файл много раз, и вы должны закрыть файлы в конце вашей программы. Ниже я попробовал надеяться, что это сработает для вас:
d1 = {}
with open(r'classgrades.txt','r') as fp:
for line in fp:
contents = line.strip().split(' ')
# create mapping of student and his numbers
d1[contents[0]] = map(int,contents[1:])
with open(r'classscores.txt','w') as fp:
for key, item in d1.items():
biggest = min(item)
smallest = max(item)
print(biggest - smallest)
# average of all numbers
avg = sum(item)/len(item)
fp.write("%s %s\n"%(key,avg))
sp_executesql
, более вероятно, будет способствовать повторному использованию плана запросов. При использовании sp_executesql
, параметры явно определяются в подписи вызова. Эта превосходная статья descibes этот процесс .
часто процитированной ссылкой для многих аспектов динамического sql является Erland Sommarskog, должен читать: " Проклятие и Благословения Динамического SQL".
Большая вещь о SP_EXECUTESQL состоит в том, что он позволяет Вам создавать параметризированные запросы, который очень хорош, если Вы заботитесь о Внедрении SQL.