2011-10-10 32 views
6


Sto imparando Python. Ho una funzione readwrite (nome file, elenco). nomefile è di tipo stringa. lista è una lista contenente stringhe da scrivere nel file.Funzioni di Python Confusione

Ho una semplice chiamata di funzione come questa:

fname = 'hello.txt' 
readwrite('xx'+fname, datalist) 

sto affrontando problema che quando stampo il valore argomento filename all'interno della definizione di funzione, ottengo ciao.txt piuttosto che xxHello.txt - un cosa strana che non mi aspettavo
quando faccio lo stesso da commadline, per una funzione di esempio, funziona bene. Mi chiedo cosa mi manca laggiù.

Qui s il codice:

def readwrite(fileName, list): 
    print 'arg file=',filename 
    curdir = os.getcwd(); 
    fullpath = os.path.join(curdir, filename); 
    print('full path calculated as: '+fullpath); 
    fileExist = os.path.exists(fullpath); 
    if(fileExist): 
     print 'file exists and opening in \'arw\'mode' 
     fiel = open(fileName, 'arw') # valid only if exists 
    else: 
     print "file doesnt exist; opening in \'w\'mode" 
     fiel = open(fileName, 'w')  # if it doesnt exist, we cant open it for reading as nothing to read. 

    for line in list: 
     fiel.write('\n'+line) 

    print 'position of new pointer = ', fiel.tell() 

- codice principale chiamando la funzione:

filename = 'put.txt' 
strList = ['hello', 'how', 'are', 'you'] 
readwrite(('xx'+filename), strList); 

- seconda linea in fn def di stampa 'file di arg =', il nome del file stampe ciao.txt anziché xxHello.txt
Questa è la mia confusione sul perché si sta comportando in modo imprevisto o sto facendo qualcosa di sbagliato.

+2

Non utilizzare 'list' come nome di variabile. In questo modo si sta sovrascrivendo il riferimento alla 'lista' della classe incorporata. – rplnt

+0

@aix ha già risposto sulla sensibilità del caso, vorrei solo aggiungere che "elenco" è una funzione incorporata e di solito non è una buona idea usarlo come nome per argomenti o variabili. – fortran

+0

grazie per il tuo feedback big gyz – Abhinav

risposta

12

Python fa distinzione tra maiuscole e minuscole. Le due linee di seguito sono riferiti a due diverse variabili (notare capitale "N" nel primo):

def readwrite(fileName, list): 
    print 'arg file=',filename 

Quello che sta succedendo è che la seconda linea preleva la variabile globale chiamata filename posto dell'argomento funzione chiamata fileName.

+1

+1 grazie mille. Non posso fare +1 perché non ho 15 reputazione sentirsi stupido sul mio errore. – Abhinav

+3

@abhinav: Ma puoi accettare la risposta facendo clic sul segno di spunta alla sua sinistra. Instant +2 rep per te. Inoltre, non è uno sbaglio stupido, e hai scritto una buona domanda. Peccato, non posso revocarlo più di una volta. Non molti nuovi arrivati ​​sanno come scrivere una buona domanda. Quindi non preoccuparti, presto avrai abbastanza reputazione. –

+1

Benvenuto nella community! Inoltre, tutti i punti e virgola alle estremità delle linee non sono necessari in Python, ed è normale lasciarli fuori. Sono brutti :) Anche 'fiel' sembra imbarazzante; i nomi tipici sono 'f' e' a_file'. –