You asked for the traceback. All I get is this:
---------------------

python a2.py
  File "a2.py", line 20
    titles = [title in myFile if title not in ["\n",""]]
                                                                           ^
SyntaxError: invalid syntax

----------------------
(In case the spaces don't come through in this email, the carrot ^ is pointing 
to the last ])
The function was this:
----------------------

def getTitleList():
    """ Makes a list of all the lines in a file """
    
    filename = raw_input("Name and Extension of File: ")
    
    myFile = open( filename )
                            
    titles = [title in myFile if title not in ["\n",""]]

    return titles

----------------------
Rachel





On May 25, 2011, at 6:29 PM, Wayne Werner wrote:

> On Wed, May 25, 2011 at 3:59 PM, Rachel-Mikel ArceJaeger 
> <arcejae...@gmail.com> wrote:
> Thank you so much for taking the time to comment this all out. It was very 
> very helpful and showed me improvements to some coding styles I have been 
> doing for years. I have a couple of questions, though:
> 
> 1. I tried the following line:  titles = [title in myFile if title not in 
> ["\n",""]]
> as you suggested, but I'm getting a syntax error pointing to the last ]. 
> Later on I ended up changed titles from a list to a dict, so I'm not sure if 
> this is even applicable anymore, but since I use this sort of structure a 
> lot, I'm curious as to why it is not working.
> 
> You'll have to copy/paste the traceback, and the code snippet - otherwise 
> it's just a guess!
>  
> 2. I am curious as to how the amended for-loop (for titles in myFile) knows 
> to assign title to a line of text. I can see that it does, but I'm not sure 
> why it acts that way.
>  
> It's magic! Well, not really. In C-style languages, your for loop usually 
> takes the form of 
> 
> for(int x = 0; x < sizeOfSomething; x++){
>     somehow_use(something[x]);
> }
> 
> But x is usually unused - what you really want to say is "for each item in 
> this collection, do something with that item". So Guido Van Rossum, in his 
> Dutch-y wisdom, blessed us with this type called an iterable. Which is 
> basically anything that you can think of in separate parts. Letters in a 
> string, lines in a file, items in a list, and so on and so forth. Rather than 
> wasting the extra "int x = 0; x < size; x++", you simply have to tell the 
> loop what variable you want to use, and what iteratble you want to iterate 
> over, and Python takes care of the details. 
> 
> Iterables really allow for some super neat programming.
>  
> 3. I've never used zip before and I'm a little confused about why your 
> amended for-loop works the way it does. As far as I can tell, 
> 
> a = [1,2,3]
> b = ['a','b','c']
> d = zip(a,b)
> 
> means d is [(1, 'a'), (2, 'b'), (3, 'c')]
> 
> So how is it that if I say
> 
> for c,d in zip(a,b):
> ...     print [c,d]
> 
> I get:
> 
> [1, 'a']
> [2, 'b']
> [3, 'c']
> 
> It seems to me we should have to unzip the zipped list or something to get 
> the tuple first, but it immediately gets the elements of the tuple. Why?
> 
> This looks like magic, but it really isn't. Consider the following:
> >>> a = (1,2)
> >>> x, y = a
> >>> x
> 1
> >>> y
> 2
> >>> b = [(4,5), (6,7)]
> >>> x, y = b[0]
> >>> x
> 4
> >>> y
> 5
> 
> Python has this nifty little feature called unpacking, that allows you to use 
> a collection of data on the right side and a collection of variables on the 
> left side, and if the numbers of arguments match, then assignment happens. As 
> for what happens when the numbers don't match up, I'll leave that experiment 
> to you ;)
>  
> 
> 4. Regarding my previous question about passing in arguments, is the 
> following surmise correct?: When python takes in arguments to a function, it 
> passes in the entire object, so any modifications made to that object will be 
> retained after the function terminates without you having to explicity return 
> the object. You only have to return an object if it wasn't passed in as an 
> argument to the function and you need to use in in another function. 
> 
> No. It might appear that way at times, but that surmise is based on an 
> incorrect premise. If you read this paper: 
> http://effbot.org/zone/python-objects.htm it explains what Python objects 
> really are. Then read http://effbot.org/zone/call-by-object.htm and it 
> explains how Python passes arguments.
>  
> HTH,
> Wayne

R.M. ArceJaeger
Author/Publisher, Platypus Press

Contact: arcejae...@gmail.com
Website: http://rmarcejaeger.com

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to