2011-10-10 31 views
6


Estoy aprendiendo Python. Tengo una función readwrite (nombre de archivo, lista). nombre de archivo es de tipo cadena. lista es una lista que contiene cadenas para ser escritas en el archivo.Funciones de Python Confusión

que tienen una simple llamada de función como esta:

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

Estoy frente a un problema que al imprimir el valor del argumento de nombre de archivo dentro de la definición de la función, me sale hola.txt en lugar de xxHello.txt - una Lo extraño es que no esperaba
cuando hago lo mismo desde commadline, para una función de muestra, funciona bien. Me pregunto qué me estoy perdiendo allí.

Aquí es el código:

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() 

- código principal llamando a la función:

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

- segunda línea en fn def de impresión 'archivo arg =', nombre de archivo imprime hello.txt en lugar de xxHello.txt
Esta es mi confusión porque ¿por qué se está comportando de manera extraña o estoy haciendo algo mal?

+2

No use 'list' como nombre de variable. Al hacerlo, está sobrescribiendo la referencia a la 'lista' de clase incorporada. – rplnt

+0

@aix ya ha respondido sobre la sensibilidad a las mayúsculas y minúsculas, me gustaría simplemente agregar que "lista" es una función incorporada y no es una buena idea usarla como nombre para argumentos o variables. – fortran

+0

gracias por tu comentario gran gyz – Abhinav

Respuesta

12

Python distingue entre mayúsculas y minúsculas. Las dos líneas más abajo se refieren a dos variables diferentes (nótese la mayúscula "N" en el primero):

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

Lo que pasa es que la segunda línea recoge la variable global llamada filename en lugar del argumento de la función denominada fileName.

+1

+1 muchas gracias. no puedo hacer +1 ya que no tengo 15 reputación sintiéndome estúpido por mi error. – Abhinav

+3

@abhinav: pero puede aceptar la respuesta haciendo clic en la marca de verificación a la izquierda. Replica +2 instantánea para ti también. Además, no es un error estúpido, y usted escribió una muy buena pregunta. Lástima que no puedo votarlo más de una vez. No muchos recién llegados aquí saben cómo escribir una buena pregunta. Así que no te preocupes, pronto tendrás suficiente reputación. –

+1

¡Bienvenido a la comunidad! Además, por cierto, todos esos puntos y comas al final de las líneas son innecesarios en Python, y es estándar dejarlos fuera. Son feos :) 'fiel' también parece incómodo; los nombres típicos son 'f' y' a_file'. –