newbie question

Steve Holden steve at holdenweb.com
Mon Dec 20 10:50:24 CET 2004


Doug Holton wrote:

> David Wurmfeld wrote:
> 
>> I am new to python; any insight on the following would be appreciated, 
>> even if it is the admonition to RTFM (as long as you can direct me to 
>> a relevant FM)
>>
>> Is there a standard approach to enumerated types? I could create a 
>> dictionary with a linear set of keys, but isn't this overkill? There 
>> is afterall a "True" and "False" enumeration for Boolean.
> 
> 
> To actually answer your question, no, there is no standard for enums in 
> python.  There are custom hacks for it that you can search for.
> 
> Boo, a programming language that is virtually identical to python, does 
> have standard enums:
> 
> enum Color:
>     Red
>     Green
>     Blue
> 
> See http://boo.codehaus.org/
> 
> In fact, since not many seem to be aware of its existence, I encourage 
> everyone here to check out boo as an alternative to python.
> 
> 
>> Is there a way to ignore case in string comparisons? I want 'Oranges' 
>> to equal 'oranges' when using the evaluation operator (==). I don't 
>> care about string inequalities (<, >)
> 
> 
> No, not with the == operator, unless you use:
> s1.lower() == s2.lower()
> 
> Visual Basic is the only language I am aware of that has 
> case-insensitive strings.
> 
> 
>> Finally, (for now at least) consider the following list.
>>
>> myList = [apple, 13, plum, cherry, 'Spam', tomato, 3.35]
>>
>> Exactly how does the "for x in myList" work?
>> If the list is a heterogeneous list of disparate types, the == 
>> operator works fine, independent of type.
>> For example, (if x == 'spam') evaluates as false if the item in the 
>> list is an integer. But if I try to do this: (if x.__abs()__) throws 
>> an exception if x "pulls" a non integer from the list. Wouldn't you 
>> think that an iterative would have the "sense" to understand that in 
>> this limited scope if a method didn't apply to the iterator just 
>> "fail" (i.e. evaluate to False) the evaluation and move along? Do I 
>> have to manually interrogate each iteration for the proper type before 
>> I test?
>> Think about it; the interpreter has to evaluate disparate types for 
>> equality. How exactly does the it "know" that for this iteration, x is 
>> an integer, and the evaluation (if x == 'spam') is False, and doesn't 
>> throw an exception for a type mismatch?
> 
> 
> Because python is a strongly typed.  If you want to perform a type 
> specific operation like abs() or string.lower(), but the object's type 
> may not be the right type, then you have to check its type first.
> 
> In boo, we have an "isa" operator for this purpose:
> 
> if x isa string:
>     ....
> 
> or:
> for item in myList:
>     given typeof(item):
>         when string:
>             print item.ToLower()
>         when int:
>             print Math.Abs(item)

It appears you should read your own remarks from the "Web forum (made by 
python)" thread :-)

whereas-my-ego-couldn't-be-smaller-ly yr's  - steve
-- 
Steve Holden               http://www.holdenweb.com/
Python Web Programming  http://pydish.holdenweb.com/
Holden Web LLC      +1 703 861 4237  +1 800 494 3119



More information about the Python-list mailing list