Рассматривая предыдущие оставшиеся вопросы, общая тема является фундаментальной проблемой с пониманием того, как использовать функции в Python, которые не рассматриваются. Я попытаюсь разблокировать часть этого, чтобы предотвратить возникновение подобных вопросов. Я предполагаю, что вы пришли с научной работы, такой как я, поэтому я буду придерживаться этого.
Вы никогда не передаете аргументы своим функциям, только self
. Вместо этого вы пытаетесь ссылаться на глобальные значения внутри функции, но нет необходимости, и это путает. Например, у меня может быть уравнение y = x^2 + 3x + 5
, которое является и математической функцией и может быть функцией python.
def quadratic(value_of_x):
y = (value_of_x **2) + (3*value_of_x) + 5
return y
eg_1 = quadratic(5)
print (eg_1)
eg_2 = quadratic(3)
print (eg_2)
# But this will fail
#print (y)
y
существует только внутри функции Python в качестве локальной переменной и разрушается, как только вы покидаете def/return
блок. В этом случае eg_1
, eg_2
принимают значение y
в конце функции, а value_of_x
принимает значение, которое я положил в скобки в вызове функции (аргумент/переменная). В этом суть функций, их можно использовать снова и снова.
Я также могу передать несколько аргументов функции.
def new_quadratic(value_of_x, coefficient):
y = coefficient*(value_of_x **2) + (3*value_of_x) + 5
return y
eg_3 = new_quadratic(5, 2)
print (eg_3)
Не только я не могу получить значение для y
внешней области видимости функции, а функция ничего не делает, если она не называется. Это ничего не делает; это эквивалент знать формулу в вашей голове, но никогда не запускать число через нее - вы просто определяете ее как нечто, что ваш сценарий может использовать.
starting_number = 5
def modify_starting_number(starting_number):
starting_number = starting_number * 2
return starting_number
print (starting_number)
Принимая во внимание, что это делает то, что вы ожидали от этого. Вы вызываете функцию, то есть передаете число по формуле.
starting_number = 5
def modify_starting_num(starting_num):
starting_num = starting_num * 2
return starting_num
starting_number = modify_starting_num(starting_number) # Calling the function
print (starting_number)
С учетом этого, на ваш вопрос.
import csv
files = ['file_1', 'file_2']
def running_number_in_csv(filename_list):
""" running_number resets every time the function is called, but is
remembered within the function itself"""
running_number = 1
for individual_file in filename_list:
new_rows = [] # Make something to hold row + extra column
# Read contents of each row and append the running number to the list
with open(individual_file + '.csv', 'r') as infile:
reader = csv.reader(infile)
for row in reader:
row.append(running_number)
new_rows.append(row)
running_number += 1 # Increments every row, regardless of file name number
# Write the list containing the extra column for running number
with open(individual_file + '.csv', 'w') as outfile: # Might need 'wb' in Windows
writer = csv.writer(outfile)
writer.writerows(new_rows)
get_running_number = running_number_in_csv(files) # CALL THE FUNCTION :)
Что такое 'файлы'? Как 'range (0,1)' (который только 0) открывает 3 файла? Кроме того, ваши заявления 'print' после' return' и поэтому никогда ничего не печатают. Именование файла 'file' - встроенный python - не является хорошей практикой. Существует ряд проблем, но недостаточно информации, чтобы указать вам в правильном направлении в настоящее время. – roganjosh
Я в процессе написания более подробного ответа на этот вопрос, поскольку я рассмотрел ваши предыдущие вопросы. Предыдущие вопросы, скорее всего, должны были быть закрыты, но это не означает, что вы не получаете ответа, а ваш основной вопрос (непонимание функций) продолжает возникать. Если вы хотите ответить на мои комментарии, пожалуйста, сделайте это «добавьте комментарий» и напишите мне «@roganjosh» и, пожалуйста, не отвечайте на ответы, написав новый ответ. Никто не увидит его, и он загромождает формат сайта. – roganjosh