Mit Blick auf Ihre vorherigen Fragen, die offen sind, ist das allgemeine Thema ein grundlegendes Problem mit dem Verständnis der Verwendung von Funktionen in Python, die nicht angesprochen werden. Ich werde versuchen, einen Teil davon zu entfernen, um ähnliche Fragen zu vermeiden. Ich gehe davon aus, dass Sie aus einem wissenschaftlichen Hintergrund wie ich kommen, also bleibe ich dabei.
Sie übergeben niemals Argumente an Ihre Funktionen, nur self
. Stattdessen versuchen Sie, Globals innerhalb der Funktion zu referenzieren, aber es besteht keine Notwendigkeit und es ist verwirrend. Zum Beispiel könnte ich die Gleichung y = x^2 + 3x + 5
haben, die sowohl eine mathematische Funktion als auch eine Python-Funktion sein kann.
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
existiert nur in der Python-Funktion als lokale Variable und zerstört wird, sobald Sie den def/return
Block verlassen. In diesem Fall nehmen eg_1
, eg_2
den Wert y
am Ende der Funktion an und value_of_x
nimmt den Wert an, den ich in Klammern auf den Funktionsaufruf (das Argument/die Variable) gesetzt habe. Das ist der Sinn von Funktionen, sie können immer wieder verwendet werden.
Ich kann auch mehrere Argumente an die Funktion übergeben.
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)
Nicht nur kann ich keinen Wert für y
außerhalb des Rahmens einer Funktion, aber eine Funktion tut nichts, es sei denn, es nennt. Das tut nichts; Es ist das Äquivalent, die Formel in Ihrem Kopf zu kennen, aber niemals eine Zahl durch zu führen - Sie definieren es nur als etwas, das Ihr Skript könnte verwenden.
starting_number = 5
def modify_starting_number(starting_number):
starting_number = starting_number * 2
return starting_number
print (starting_number)
Während dies tut, was Sie erwartet, es zu tun. Sie rufen die Funktion auf, d. H. Übergeben Sie die Nummer durch die Formel.
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)
Mit dem aus dem Weg, auf Ihre Frage.
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 :)
Was sind 'Dateien'? Wie öffnet 'range (0,1)' (was nur '0' ist) 3 Dateien? Außerdem sind Ihre 'print' Anweisungen nach' return' und so drucken Sie nie etwas. Das Benennen der Datei 'file' - des eingebauten Pythons - ist keine gute Übung. Es gibt eine Reihe von Problemen, aber nicht genügend Informationen, um Sie zur Zeit in die richtige Richtung zu weisen. – roganjosh
Ich bin dabei, eine ausführlichere Antwort zu schreiben, da ich Ihre vorherigen Fragen durchgegangen bin. Frühere Fragen sollten wahrscheinlich geschlossen worden sein, sind es aber nicht, was bedeutet, dass Sie Ihre Antwort nicht erhalten und Ihr zugrunde liegendes Problem (ein Missverständnis von Funktionen) immer wieder auftaucht. Wenn Sie auf meine Kommentare antworten möchten, tun Sie dies bitte durch "Kommentar hinzufügen" und verweisen Sie mich mit "@roganjosh" und bitte antworten Sie nicht auf die Antworten mit dem Schreiben einer neuen Antwort. Niemand wird es sehen und es überlagert das Format der Website. – roganjosh