Re: Python-list Digest, Vol 92, Issue 223

2011-05-26 Thread Richard Parker
 
 On Thu, May 26, 2011 at 10:58 AM, Richard Parker
 r.richardpar...@comcast.net wrote:
 It's time to stop having flame wars about languages and embrace programmers
 who care enough about possible future readers of their code to thoroughly
 comment it. Comments are far more valuable than the actual language in which
 the code is written, IMHO.
 
 The problem with comments (and documentation in general) is that they
 are often imperfect. If the code is absolutely opaque but it has a
 comment next to it, you still have that niggling doubt: has the
 comment been updated whenever the code has? Was it even accurate in
 the first place? (Comments often say what a piece of code _ought_ to
 do, but the code might have a bug in it. And sometimes, that bug ends
 up being part of the function's definition, and people depend on it.)
 I'd rather have both - reasonably readable code AND a comment, where
 the comment explains the intent behind the code.

Gee...I absolutely agree! I have no problem with anything you said. My intent 
in writing at all was to express that comments (along with well-written code) 
are more important than the language in which the code is written. There's no 
doubt that sometimes comments aren't updated when code is changed and sometimes 
comments express what the code is attempting to implement; however, code in any 
language written without accompanying comments is much harder to understand AND 
maintain. If, given a chunk of readable Python code written by someone else 
without accompanying comments, I would be scratching my head far longer trying 
to understand, modify, or maintain it, than if it also had (even imperfect) 
accompanying comments.

So--we agree that reasonably readable code AND a comment that explains the 
intent of the code is what we should all strive to produce.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Algis Kabaila
On Thursday 26 May 2011 14:46:45 Uncle Ben wrote:
 In playing with lists of lists, I found the following:
 
 (In 3.1, but the same happens also in 2.7)
 
 list = [1,2,3]
 list.append ( [4,5,6] )
 x = list
 x   -
 [1,2,3,[4,5,6]]
 as expected.
 
 But the shortcut fails:
 
 list=[1,2,3]
 x = list.append( [4,5,6] )
 x   -
nothing
 
 Can someone explain this to me?
 
 Uncle Ben

And why do you insist on calling and instance of list, list? 
Even a human reader will confuse which is which.  What you are 
showing is an example how confusing things become when a keyword 
(list) is over-written (with  list instance).

Why don't you just say

lst = [1, 2, 3]

rather than list =...   It may be permissible, but it is not a 
good idea!

Old (practical) Al.
-- 
Algis
http://akabaila.pcug.org.au/StructuralAnalysis.pdf
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Chris Angelico
On Thu, May 26, 2011 at 2:46 PM, Uncle Ben bgr...@nycap.rr.com wrote:
 In playing with lists of lists, I found the following:

 (In 3.1, but the same happens also in 2.7)

 list = [1,2,3]

Ben Finney has already answered the main question, but as a side
point, I would generally avoid creating a variable called 'list'.
That's the name of the type (Python 2) or class (Python 3) of all
lists, so it might result in confusion if you have an actual list with
that name.

If you want the behaviour of joining two lists (or adding something to
a list) and saving the result elsewhere, you can use the plain
addition:

a=[1,2,3]
b=a+[[4,5,6]]

Note that you have to add a list, and it will append the contents of that list.

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Chris Angelico
On Thu, May 26, 2011 at 5:20 PM, Chris Angelico ros...@gmail.com wrote:

 Ben Finney has already answered the main question

Giving credit where credit's due, it was more Chris Rebert's post that
answered the question. Sorry Chris!

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Uncle Ben
On May 26, 12:46 am, Uncle Ben bgr...@nycap.rr.com wrote:
 In playing with lists of lists, I found the following:

 (In 3.1, but the same happens also in 2.7)

 list = [1,2,3]
 list.append ( [4,5,6] )
 x = list
 x   -
     [1,2,3,[4,5,6]]
 as expected.

 But the shortcut fails:

 list=[1,2,3]
 x = list.append( [4,5,6] )
 x   -
    nothing

 Can someone explain this to me?

 Uncle Ben

Thank you all.  It is wonderful to have this community as a resource.

Uncle Ben
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Hotshoting recursive function

2011-05-26 Thread Selvam
On Wed, May 25, 2011 at 2:20 PM, Gabriel Genellina
gagsl-...@yahoo.com.arwrote:

 En Sun, 22 May 2011 10:42:08 -0300, Selvam s.selvams...@gmail.com
 escribió:


  I am using  hotshot module to profile my python function.

 I used the details from (

 http://code.activestate.com/recipes/576656-quick-python-profiling-with-hotshot/
 ).

 The function I profile is a recursive one and I am getting the following
 error,

 ProfilerError: profiler already active

 I guess this is due to the recursive call to the profiling function.

 I would like to get some suggestions.


 The recursive call inside your function should call the undecorated
 function, not the decorated function again. Decorator syntax is not
 convenient anymore.

 Using the same names as in the recipe example:


 # a recursive function
 def my_slow_function(n):
  ...
  return my_slow_function(n-1)


 my_profiled_slow_function = hotshotit(my_slow_function)
 my_profiled_slow_function(n)


 This works, in the sense that it does not raise ProfileError anymore.
 Interpreting profile data is up to you...



Thanks Gabriel, it makes more sense !

 --
 Gabriel Genellina

 --
 http://mail.python.org/mailman/listinfo/python-list




-- 
Regards,
S.Selvam
SG E-ndicus Infotech Pvt Ltd.
http://e-ndicus.com/

  I am because we are 
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Chris Rebert
On Thu, May 26, 2011 at 12:23 AM, Chris Angelico ros...@gmail.com wrote:
 On Thu, May 26, 2011 at 5:20 PM, Chris Angelico ros...@gmail.com wrote:

 Ben Finney has already answered the main question

 Giving credit where credit's due, it was more Chris Rebert's post that
 answered the question. Sorry Chris!

Eh, one can't fight chronology!

I'm just surprised that the docstring doesn't explicitly state
Returns None. by this point, given that this is such a common point
of newbie confusion.

Cheers,
Chris
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Thorsten Kampe
* John Bokma (Wed, 25 May 2011 07:01:07 -0500)
 Thorsten Kampe thors...@thorstenkampe.de writes:
  * Chris Angelico (Wed, 25 May 2011 08:01:38 +1000)
  
  On Wed, May 25, 2011 at 3:39 AM, D'Arcy J.M. Cain da...@druid.net wrote:
   One of my favorite quotes (not sure if it was about Perl or APL) is 
  I
   refuse to use a programming language where the proponents of it stick
   snippets under each other's nose and say 'I bet you can't guess what
   this does.'
  
  Yes, I believe that was Perl. And an amusing quote. But most of the
  point of it comes from the fact that Perl uses punctuation for most of
  its keywords, whereas (say) Python uses English words; it's a lot more
  fun to crunch something down when you can use $| and friends than when
  you have to put x and y, complete with spaces, for a simple boolean.
  But that says nothing about which language is actually better for
  working with... [...]
 
  It does say something about readibility. And yes, readability counts. 
  And yes, readability says a lot about how good a language is for reading 
  and working with.
 
 To people used to the latin alphabet languages using a different script
 are unreadable. So readability has a lot to do with what one is used
 to.

You've made that alphabet argument more than once. Nevertheless it's 
nonsense (sorry). Perl uses the same alphabet as Python. Only the 
words Perl uses ($| for instance) are only found in a Perl 
dictionary not in a English or math dictionary like the one that Python 
uses.

That's why you can /read/ Python but you have to /decode/ Perl to 
understand the source code.

 Like I already stated before: if Python is really so much better than
 Python readability wise, why do I have such a hard time dropping Perl
 and moving on?

What kind of argument is that?

Thorsten
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Thorsten Kampe
* Steven D'Aprano (25 May 2011 21:59:58 GMT)
 On Wed, 25 May 2011 09:26:11 +0200, Thorsten Kampe wrote:
 
  Naming something in the terms of its implementation details (in this
  case recursion) is a classical WTF.
 
 *If* that's true, it certainly doesn't seem to apply to real-world 
 objects. Think about the exceptions:
 
 microwave oven
 vacuum cleaner
 oven fries
 electric car
 chain saw
 flintlock rifle
 air gun
 vulcanised rubber
 kerosene heater
 aluminium foil
 diamond saw
 gas stove
 wood stove
 four-wheel drive car
 incandescent light bulb
 electric razor
 unleaded petrol
 
 to mention only a few.
 
 Naming the thing after the implementation would often seem to be *good 
 advice*, not bad. We often do care about implementations. You really do 
 need to know whether the car you drive uses leaded or unleaded.

That's exactly the point. You don't need to know whether include sub-
directories was implemented recursively. It's absolutely pointless.

But not to digress, the /real/ problem with commands or idioms like rm 
-r is /not/ their choice of option names but that they explain these 
options in the exact same terms. No one would have a problem with -r, 
--recursive -- remove directories including all sub-directories instead 
of -r, --recursive -- remove directories and their contents 
recursively.

Thorsten
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Thorsten Kampe
* Steven D'Aprano (25 May 2011 22:58:21 GMT)
 
 On Wed, 25 May 2011 00:06:06 +0200, Rikishi42 wrote:
 
  What I mean is: I'm certain that over the years I've had more than 
one
  person come to me and ask what 'Do you wish to delete this directory
  recursively?' meant. BAut never have I been asked to explain what 'Do
  you wish to delete this directory and it's subdirs/with all it's
  contents?' meant. Never.
 
 I know many people who have no idea what a directory is, let alone a 
 subdirectory, unless it's the phone directory. They're non-computer 
 users. Once they start using computers, they quickly work out what the 
 word means in context, or they ask and get told, and then they've learned 
 a new word and never need ask again. This is a good thing.
 
 The idiom of recursively delete is no different. Of course some people 
 will have to learn a new term in order to make sense of it. So what?

It's not just a new term. It tries to describe something which could 
be easily described in the terms of what is already known.

If someone has learned what a directory or folder is, you don't have to 
explain what include sub-folders means. Instead of creating a new 
mysterious term (recursively delete), you simply explain stuff by re-
using an already existing term. It's just that simple.

Thorsten
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Steven D'Aprano
On Thu, 26 May 2011 10:48:07 +0200, Thorsten Kampe wrote:

 But not to digress, the /real/ problem with commands or idioms like rm
 -r is /not/ their choice of option names but that they explain these
 options in the exact same terms. No one would have a problem with -r,
 --recursive -- remove directories including all sub-directories instead
 of -r, --recursive -- remove directories and their contents
 recursively.

I think you are understanding the description remove directories and 
their contents recursively as a description of the *mechanism* by which 
rm removes the directory, i.e. some recursive tree-walking function that 
visits each node and deletes it.

I don't believe that's how the description is meant to be understood. I 
understand it as describing the effect, not the implementation. If the 
tree-walker was re-written to be iterative, the description would not 
need to be changed. It is meant to be understood as:

rm -r foo

* deletes foo
* deletes things inside foo
* if any of those things inside foo are directories, delete them too, in 
exactly the same way (i.e. recursively).

Notice that, strictly speaking, the description is impossible. You can't 
delete the top level directory first. But that's how the human reader 
will understand it: 

* delete the directory you point it at, plus the things inside it in the 
same way

rather than how the implementation (probably) does it:

* drill down all the way to the bottom, start deleting like mad, and work 
your way back up the stack, deleting as you go.


You're interpreting the reference to recursive as a nod to the 
implementation. I'm not, and therefore your arguments don't convince me.


-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python-list Digest, Vol 92, Issue 221

2011-05-26 Thread Steven D'Aprano
On Thu, 26 May 2011 14:06:56 +1000, Chris Angelico wrote:

 On Thu, May 26, 2011 at 10:58 AM, Richard Parker
 r.richardpar...@comcast.net wrote:
 It's time to stop having flame wars about languages and embrace
 programmers who care enough about possible future readers of their code
 to thoroughly comment it. Comments are far more valuable than the
 actual language in which the code is written, IMHO.
 
 The problem with comments (and documentation in general) is that they
 are often imperfect. 
[snip more stuff I agree with]

It's not the lack of perfection, since no code is perfect, but that 
comments are frequently missing, obsolete, incorrect, or inane: i.e. 
actively harmful rather than just imperfect.

The classic example of what not to write as a comment:

x += 1  # add one to x


One of the regulars here -- Aahz -- often has this quote as his sig:

At Resolver we've found it useful to short-circuit any doubt 
 and just refer to comments in code as 'lies'.
 -- Michael Foord paraphrases Christian Muirhead on python-dev,
2009-03-22


My experience is that comments in Python are of relatively low 
usefulness. (For avoidance of doubt: not *zero* usefulness, merely low.) 
I can name variables, functions and classes with sensible, self-
documenting names. Why write:

x = get_results(arg)  # x is a list of 1 or more results
[... much later]
for y in x:
# process each result in turn
do_something_with(y)


when I can write this?

results = get_results(arg)
[...]
for result in results:
do_something_with(result)


It's better to write self-documenting code, than code + comments.


Another use for comments is to explain *why* rather than *what*. No 
matter how readable your code is, if you don't understand why it is done, 
you can't effectively maintain it. If the why is obvious, you don't need 
a comment.

But for me, the main reason # comments are of relatively little use in 
Python for me is because I write *tons* of docstrings and doctests. Any 
comment which could be useful to know at run-time goes into the 
docstring; what's left over, if anything, becomes a # comment. Between 
self-documenting code and docstrings, I hardly write any # comments.



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python-list Digest, Vol 92, Issue 221

2011-05-26 Thread Chris Angelico
On Thu, May 26, 2011 at 8:07 PM, Steven D'Aprano
steve+comp.lang.pyt...@pearwood.info wrote:
 Another use for comments is to explain *why* rather than *what*. No
 matter how readable your code is, if you don't understand why it is done,
 you can't effectively maintain it. If the why is obvious, you don't need
 a comment.

That's what my (contrived) example was. I also often have comments
that are leftovers from the pseudocode stage; for instance, iteration
1:
//TODO: Look up foo in some table and figure out which bar should be used.

Iteration 2:
//TODO: Look up foo in the bar_foo table and figure out which bar
should be used.
legal_bar = bar_foo[foo]; bar=legal_bar[0];

Iteration 3:
//Figure out which bar should be used
legal_bar = bar_foo[foo];
... some algorithmic way of figuring out the best one ...

When it leaves TODO status, anything that's inherently obvious (Look
up foo in the bar_foo table) gets trimmed, but the statements of
purpose tend to remain. Especially if the figuring out the best one
is several lines of code, it makes sense to keep that comment. But
because of the organic growth of the code, the comment will usually
still bracket the look up foo in table part, even though the comment
doesn't have anything to do with that.

Is the comment inappropriate? I don't think so. Is it perfect?
Definitely not. But it's still generally worth keeping.

But I absolutely agree. The code ought to be self-documenting to the
greatest extent possible (but no further - don't just create
variables/constants for absolutely no reason than to embody
documentation). Docstrings and autodoc comments are superior to
general comments, although IMHO all three are pretty much the same
thing.

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Python-URL! - weekly Python news and links (May 26)

2011-05-26 Thread Cameron Laird
[This edition drafted by Gabriel Genellina.]

QOTW:  They did a study once to determine the best tool for
development.  Turns
out that the most productive tool was generally the one that the user
believed was
the most productive.  In hindsight I think that that was rather
obvious. - D'Arcy
J.M. Cain, 2011-05-24

   Python 2.6.7 release candidate 2 now available:
   http://groups.google.com/group/comp.lang.python/t/ebbd57431bb084b2/

   Amazing logic: and becomes or and or becomes and
   http://groups.google.com/group/comp.lang.python/t/b13e786438a609dd/

   Equal objects must have equal hashes - but how strong is that
requirement?
   http://groups.google.com/group/comp.lang.python/t/f23f72cf633892f9/

   Do secure systems exist?
   
http://groups.google.com/group/comp.lang.python/t/f887168ca476618f/7503714d82b1789b?#7503714d82b1789b

   os.access() returns totally useless results on Windows, always has,
and nobody
   cares:
   http://groups.google.com/group/comp.lang.python/t/aa3d9b21c77fa7d7/

   Is this PAAS Python mind-blowingly important, or pointless, or a
mix of the two?
   http://www.activestate.com/cloud

   contextlib.nested() is deprecated - and this example shows why a
custom
   implementation is hard to write well:
   http://groups.google.com/group/comp.lang.python/t/d6b090b7fd4a92c6/

   Why one startup chose Python for development:
   http://groups.google.com/group/comp.lang.python/t/17dca3bf467c9001/

   And more reasons another developer chose it:
   
http://groups.google.com/group/comp.lang.python/t/17dca3bf467c9001/83a7be235c113dac?#83a7be235c113dac

   And now, things people do *not* like about Python:
   http://groups.google.com/group/comp.lang.python/t/fff2826d44ea336/



Everything Python-related you want is probably one or two clicks away
in
these pages:

   Python.org's Python Language Website is the traditional
   center of Pythonia
   http://www.python.org
   Notice especially the master FAQ
   http://www.python.org/doc/FAQ.html

   Just beginning with Python?  This page is a great place to start:
   http://wiki.python.org/moin/BeginnersGuide/Programmers

   Planet Python:  you want to visit there:
   http://planet.python.org
   But don't confuse it with Planet SciPy:
   http://planet.scipy.org
   And don't confuse *that* with SciPyTip, a high-quality daily (!)
tip
   for the numerically-inclined:
   http://twitter.com/SciPyTip

   Python Insider is the official blog of the Python core development
   team:
   
http://pyfound.blogspot.com/2011/03/python-dev-launches-python-insider-blog.html

   The Python Software Foundation (PSF) has replaced the Python
   Consortium as an independent nexus of activity.  It has official
   responsibility for Python's development and maintenance.
   http://www.python.org/psf/
   Among the ways you can support PSF is with a donation.
   http://www.python.org/psf/donations/
   Keep up with the PSF at Python Software Foundation News:
   http://pyfound.blogspot.com

   The Python Papers aims to publish the efforts of Python
enthusiasts:
   http://pythonpapers.org/

   Doug Hellman's Module of the week is essential reading:
   http://www.doughellmann.com/PyMOTW/

   comp.lang.python.announce announces new Python software.  Be
   sure to scan this newsgroup weekly.
   http://groups.google.com/group/comp.lang.python.announce/topics

   Python411 indexes podcasts ... to help people learn Python ...
   Updates appear more-than-weekly:
   http://www.awaretek.com/python/index.html

   The Python Package Index catalogues packages.
   http://www.python.org/pypi/

   Much of Python's real work takes place on Special-Interest Group
   mailing lists
   http://www.python.org/sigs/

   Python Success Stories--from air-traffic control to on-line
   match-making--can inspire you or decision-makers to whom you're
   subject with a vision of what the language makes practical.
   http://www.pythonology.com/success

   The Summary of Python Tracker Issues is an automatically generated
   report summarizing new bugs, closed ones, and patch submissions.
   
http://search.gmane.org/?author=status%40bugs.python.orggroup=gmane.comp.python.develsort=date

   nullege is an interesting search Web application, with the
intelligence
   to distinguish between Python code and comments.  It provides what
   appear to be relevant results, and demands neither Java nor CSS be
   enabled:
   http://www.nullege.com

   Although unmaintained since 2002, the Cetus collection of Python
   hyperlinks retains a few gems.
   http://www.cetus-links.org/oo_python.html

   The Cookbook is a collaborative effort to capture useful and
   interesting recipes:
   http://code.activestate.com/recipes/langs/python/

   Many Python conferences around the world are in preparation.
   Watch this space for links to 

Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Thorsten Kampe
* Steven D'Aprano (26 May 2011 10:06:44 GMT)
 
 On Thu, 26 May 2011 10:48:07 +0200, Thorsten Kampe wrote:
 
  But not to digress, the /real/ problem with commands or idioms like rm
  -r is /not/ their choice of option names but that they explain these
  options in the exact same terms. No one would have a problem with -r,
  --recursive -- remove directories including all sub-directories instead
  of -r, --recursive -- remove directories and their contents
  recursively.
 
 I think you are understanding the description remove directories and 
 their contents recursively as a description of the *mechanism* by which 
 rm removes the directory, i.e. some recursive tree-walking function that 
 visits each node and deletes it.
 
 I don't believe that's how the description is meant to be understood. I 
 understand it as describing the effect, not the implementation.

It doesn't matter how I interprete the explanation -r = recursively 
delete. What matters is that I have to explain (interpret, translate 
the explanation.

 You're interpreting the reference to recursive as a nod to the
 implementation. I'm not, and therefore your arguments don't convince
 me.

No one understands what recursively delete means until someone 
explains (translates) it to him. This is not an argument but a simple 
fact. I experienced it many times, others here in the thread did and 
probably you, too.

recursively delete is completely unneccessary because there is already 
a simple explanation that everyone understands without translation 
(delete including subdirectories).

It's unnecessary bullshit buzzword bingo from nerds which adds or helps 
or explains nothing. It's just that simple.

Thorsten
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Charles

Thorsten Kampe thors...@thorstenkampe.de wrote in message 
news:mpg.284834d227e3acd1989...@news.individual.de...

 If someone has learned what a directory or folder is, you don't have to
 explain what include sub-folders means. Instead of creating a new
 mysterious term (recursively delete), you simply explain stuff by re-
 using an already existing term. It's just that simple.

I'm a native english speaker, and to me there is a difference between
delete directory and sub-directories (or folders and sub-folders if you
follow Microsoft's naming conventions) and recursively delete. I know
english is very ambiguous, but to me directory and sub-directories
does not necessarily imply sub-directories of sub-directories and so
on, while recursively delete does carry the connotation of deleting the
sub-directories of sub-directories and sub-directories of sub-directories
of sub-directories and so on.


Charles



-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Chris Angelico
I just conducted a rapid poll of a non-technical userbase.

(Okay, I just asked my sister who happens to be sitting here. But
she's nontechnical.)

She explained recursive as it repeats until it can't go any
further. I think that's a fair, if not perfectly accurate,
explanation.

Actually... if we accept that one iteration is deleting all files from
one depth level, then yes, the algorithm repeats that operation. And
I'm using iteration here without implying that it's an iterative
function.

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Thorsten Kampe
* Charles (Thu, 26 May 2011 20:58:35 +1000)
 Thorsten Kampe thors...@thorstenkampe.de wrote in message 
 news:mpg.284834d227e3acd1989...@news.individual.de...
 
  If someone has learned what a directory or folder is, you don't have
  to explain what include sub-folders means. Instead of creating a
  new mysterious term (recursively delete), you simply explain stuff
  by re- using an already existing term. It's just that simple.
 
 I'm a native english speaker, and to me there is a difference between
 delete directory and sub-directories (or folders and sub-folders if
 you follow Microsoft's naming conventions) and recursively delete. I
 know english is very ambiguous, but to me directory and
 sub-directories does not necessarily imply sub-directories of
 sub-directories and so on,

Are we playing word games here? You can easily improve my example to 
delete directory and all sub-directories beneath. Or delete directory 
and all sub-directories beneath and all content. Or delete directory 
and all files and directories within.

 while recursively delete does carry the connotation of deleting the
 sub-directories of sub-directories and sub-directories of
 sub-directories of sub-directories and so on.

Sure. Because you already know what it means (someone has already 
translated it to you long time ago).

Did your mom tell you to recursively clean up your room?.

Does my file manager ask me are you sure you want to recursively delete 
the folder?? No, it asks 'are you sure you want to remove folder 
folder name and all its contents?'.

Thorsten
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Chris Angelico
On Thu, May 26, 2011 at 9:20 PM, Thorsten Kampe
thors...@thorstenkampe.de wrote:
 Did your mom tell you to recursively clean up your room?.


Considering that I don't have a wardrobe with a portal to Narnia, no,
she has never had to tell me to clean up the room inside my room.

Anyway, my room's full. There's no room in it anywhere. :)

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Question about isodate

2011-05-26 Thread truongxuan quang
Hello list,

I am installing and testing istSOS wrote base on Python with its extension like 
gdal, isodate, easy istall, setuptool, psycopg. I have already installed all 
these stuff when I was using method POST the error appear is No module named 
mx.DateTime.ISO , could you please give me your command and advice.

Many thanks

Quang-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Neil Cerutti
On 2011-05-25, Matty Sarro msa...@gmail.com wrote:
 General readability is a farce. If it was true we would only
 have one section to the library. Different people enjoy
 reading, and can comprehend better in different ways. THat's
 why some people are super verbose - hell, just look at this
 here post! :)

Despite individual proclivities, there remain standards of
readability enshrined in our dictionaries and grammar handbooks.
Claiming that code readability of code is to be judged solely
subjectively by each individual absolves code of the
responsibility to communicate to more than just its author.

-- 
Neil Cerutti
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Roy Smith
In article 94709uf99...@mid.individual.net,
 Neil Cerutti ne...@norwich.edu wrote:

 On 2011-05-25, Matty Sarro msa...@gmail.com wrote:
  General readability is a farce. If it was true we would only
  have one section to the library. Different people enjoy
  reading, and can comprehend better in different ways. THat's
  why some people are super verbose - hell, just look at this
  here post! :)
 
 Despite individual proclivities, there remain standards of
 readability enshrined in our dictionaries and grammar handbooks.
 Claiming that code readability of code is to be judged solely
 subjectively by each individual absolves code of the
 responsibility to communicate to more than just its author.

Also, the purpose of source code is to transmit information (to both the 
compiler and to human readers).  That is a much narrower purpose than is 
served by books in a library, many of which are written as 
entertainment.  Sometimes, the real enjoyment (in literature) comes in 
figuring out what the author really meant.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Ben Finney
Roy Smith r...@panix.com writes:

 Also, the purpose of source code is to transmit information (to both
 the compiler and to human readers).

And the relative importance of readability for those two purposes is
often misunderstood.

Composing source code so that the *machine* will understand it is one
thing, and can be unambiguously verified.

Composing the same source code so that its meaning will be clearly
transmitted to *other humans* is quite another matter: certainly more
difficult, and arguably far more important:

“Programs must be written for people to read, and only incidentally
for machines to execute.”

—Abelson  Sussman, _Structure and Interpretation of Computer
Programs_

 Sometimes, the real enjoyment (in literature) comes in figuring out
 what the author really meant.

Right. Unlike that kind of writing, in functional code like a computer
program, ambiguity of meaning is a curse.

Programmers, if you feel the urge to be subtle and clever and nuanced,
take up poetry or literature as a separate pursuit. In your program
source code, please be as straightforward and unambiguous and
predictable as possible.

-- 
 \  “Very few things happen at the right time, and the rest do not |
  `\ happen at all. The conscientious historian will correct these |
_o__)  defects.” —Mark Twain, _A Horse's Tale_ |
Ben Finney
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Steven D'Aprano
On Thu, 26 May 2011 12:44:47 +, Neil Cerutti wrote:

 On 2011-05-25, Matty Sarro msa...@gmail.com wrote:
 General readability is a farce. If it was true we would only have one
 section to the library. Different people enjoy reading, and can
 comprehend better in different ways. THat's why some people are super
 verbose - hell, just look at this here post! :)
 
 Despite individual proclivities, there remain standards of readability
 enshrined in our dictionaries and grammar handbooks. Claiming that code
 readability of code is to be judged solely subjectively by each
 individual absolves code of the responsibility to communicate to more
 than just its author.

Bravo!

+1 Quote of the Thread


-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: List of WindowsError error codes and meanings

2011-05-26 Thread Thomas Heller

Am 20.05.2011 19:56, schrieb Andrew Berg:

This is probably somewhat off-topic, but where would I find a list of
what each error code in WindowsError means? WindowsError is so broad
that it could be difficult to decide what to do in an except clause.
Fortunately, sys.exc_info()[1][0] holds the specific error code, so I
could put in an if...elif...else clause inside the except clause if I
needed to, but I don't know what all the different errors are.


On Windows, you can use ctypes.FormatError(code) to map error codes
to strings:

 import ctypes
 ctypes.FormatError(32)
'Der Prozess kann nicht auf die Datei zugreifen, da sie von einem 
anderen Prozess verwendet wird.'



For HRESULT codes, you (unfortunately) have to subtract 2**32-1 from
the error code:

 ctypes.FormatError(0x80040005)
Traceback (most recent call last):
  File stdin, line 1, in module
OverflowError: long int too large to convert to int
 ctypes.FormatError(0x80040005 - (2**32-1))
'Kein Cache zum Verarbeiten vorhanden.'


Thomas
--
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread theg...@nospam.net

On 5/25/2011 7:52 PM, Steven D'Aprano wrote:

On Wed, 25 May 2011 17:30:48 -0400, theg...@nospam.net wrote:


On 5/24/2011 1:39 PM, D'Arcy J.M. Cain wrote: [snip]

One of my favorite quotes (not sure if it was about Perl or APL) is I
refuse to use a programming language where the proponents of it stick
snippets under each other's nose and say 'I bet you can't guess what
this does.'

I dunno. That sounds about like how most programming course exams are
written, no?
The point is that puzzling through arcane bits of code are crucial to
learning
any language. It's a valuable exercise.


You seem to miss the point that a good language shouldn't make it
possible to write arcane code that needs to be puzzled out.

You seem to be inventing a new point.
Try to stay focused please.
Perl hackers show each other arcane bits of code because such impractical
puzzle programs are good for learning.
Such puzzles can be created in any language. For example, I have had formal
coursework in a number of languages (Pascal, C++, ML, Scheme, and others)
and in each one an important exercise was to puzzle through arcane bits 
of code

in each of those languages.
The post I was replying to seemed to question the value of such
'I bet you can't guess what this does.' type challenges.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread John Bokma
Ben Finney b...@benfinney.id.au writes:

 Get a life. Or better, just fuck off and die. It will improve both the
 world and the Python community, of which you are nothing but a little,
 smelly shitstain.

 That abuse is entirely unwelcome in this community, against any person.
 Please desist.

You should have spoken up sooner, especially as the spokes person of
this community. But every bully has is fan club.

-- 
John Bokma   j3b

Blog: http://johnbokma.com/Perl Consultancy: http://castleamber.com/
Perl for books:http://johnbokma.com/perl/help-in-exchange-for-books.html
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread theg...@nospam.net

So when quora.com fails we can all say it is Python's fault?
Maybe they should have focused more on content instead of
the bits under the hood?
--
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread MRAB

On 26/05/2011 06:17, Chris Rebert wrote:

On Wed, May 25, 2011 at 9:46 PM, Uncle Benbgr...@nycap.rr.com  wrote:

In playing with lists of lists, I found the following:

(In 3.1, but the same happens also in 2.7)

list = [1,2,3]
list.append ( [4,5,6] )


Note the lack of output after this line. This indicates that
list.append([4,5,6]) returned None. Contrast this with, say,
list.pop().


x = list
x   -
[1,2,3,[4,5,6]]
as expected.

But the shortcut fails:

list=[1,2,3]
x = list.append( [4,5,6] )
x   -
   nothing

Can someone explain this to me?


The append() method does *not* return the now-appended-to list. It is
a mutator method that modifies the list object in-place; per
convention, it therefore returns None to reinforce its side-effecting
nature to the user (the interactive interpreter by default does not
display None expression results); analogous methods in other languages
return void.

list.remove(), list.sort(), and list.extend() similarly return None
rather than the now-modified list.


I'd just like to point out that it's a convention, not a rigid rule.
Sometimes it's not followed, for example, dict.setdefault.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Chris Angelico
On Fri, May 27, 2011 at 1:58 AM, MRAB pyt...@mrabarnett.plus.com wrote:
 I'd just like to point out that it's a convention, not a rigid rule.
 Sometimes it's not followed, for example, dict.setdefault.

dict.setdefault is more like dict.get but it also stores the result.
It's probably more a name issue than a protocol issue.

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Ethan Furman

John,

You say English is not your first language.  Let me assure you that the 
words you chose to use in reply to Stephen were vulgar as well as rude, 
and did more to lesson the overall friendliness of this forum than 
Stephen's adversarial style.


You usually have interesting and informative posts -- please don't 
resort to this tactic.


~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list


Re: Newbie question about SQLite + Python and twitter

2011-05-26 Thread John Nagle

On 5/25/2011 6:08 PM, Philip Semanchuk wrote:


On May 25, 2011, at 2:17 PM, Jayme Proni Filho wrote:


Helo guys,

I'm building a local application for twitter for my brother's store. I'm in
the beginning and I have some newbie problems, so:

I create a table called tb_messages with int auto increment and varchar(140)
fields;
I did three SQL funcionts, insert_tweet, delete_tweet, select_tweet

select_tweet is use for getting messages for sending them to twitter;

My problem is: How can i make my select_tweet works at the same time that
insert or delete funcions. I just got to work when I stop select function.

I would like to do my app works all the time.


Hi Jayme,
You need to provide a lot more information for us to be able to help you.


   I suspect that the original poster's problem is that he's trying to
delete items from a table while reading the results from a SELECT on
the same table.  SQL systems don't allow that.  It has the same problem
as, in Python, deleting from a dict while iterating over it.

   One way to do this properly is something like

loop
START TRANSACTION
SELECT itemid, item FROM tablename WITH ...  LIMIT 1
get one item
if no item, break
do whatever needs to be done with item
DELETE FROM tablename WHERE itemid = %s
END TRANSACTION


   Also, it sounds like he's writing a spam program for Twitter.

John Nagle
--
http://mail.python.org/mailman/listinfo/python-list


Python's super() considered super!

2011-05-26 Thread Raymond Hettinger
I just posted a tutorial and how-to guide for making effective use of
super().

One of the reviewers, David Beazley, said, Wow,  that's really
great!I see this becoming the definitive post on the subject

The direct link is:

  http://rhettinger.wordpress.com/2011/05/26/super-considered-super/

It would also be great if some of you would upvote it on HackerNews.


Raymond Hettinger
---
follow my python tips on twitter: @raymondh
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python's super() considered super!

2011-05-26 Thread Raymond Hettinger
 It would also be great if some of you would upvote it on HackerNews.


Here's a link to the super() how-to-guide and commentary:  bit.ly/
iFm8g3

Raymod
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: pyGTK identify a button

2011-05-26 Thread Alister Ware
On Wed, 25 May 2011 10:18:48 +0200, Tracubik wrote:

 Hi all,
 i'm trying to write a simple windows with two button in GTK, i need a
 way to identify wich button is pressed. Consider that:
 
 the two button are connected (when clicked) to infoButton(self, widget,
 data=None)
 
 infoButton() is something like this
 
 infoButton(self, widget, data=None):
   # discover wich button was pressed
   ...
   # say hello to the button
   if button1pressed:
   print Hi, button1!
   else:
   print Hi, button2!
 
 so, how can I know wich button was pressed without using data and
 without reading the label of the button (i could have buttons with the
 same label)
 
 If data is needed, can someone pls tell me how to set it properly in
 glade 3.8
 
 thanks
 Nico

This looks similar to a question I posted about 2 weeks ago

In gtk 2.1.6 (i think)  earlier you could use widget.get_name() to 
return the id of the widget.
this no-longer works since 2.1.7
the pygtk forum suggests this is because widget id's are not necessarily 
unique  caused problems elsewhere, to be honest most of the explanation 
went above my head.
I did find a work around  that was to use gtk.buildable.get_name(widget)
but is is probably cleaner to use a discrete callback for each button.


-- 
Disco is to music what Etch-A-Sketch is to art.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python's super() considered super!

2011-05-26 Thread Dotan Cohen
On Thu, May 26, 2011 at 19:39, Raymond Hettinger pyt...@rcn.com wrote:
 It would also be great if some of you would upvote it on HackerNews.


 Here's a link to the super() how-to-guide and commentary:  bit.ly/
 iFm8g3


Is that the same link as in the OP? I don't click on blind links, so
if it isn't then please post a direct link. Thanks.

-- 
Dotan Cohen

http://gibberish.co.il
http://what-is-what.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread John Ladasky
On May 25, 9:46 pm, Uncle Ben bgr...@nycap.rr.com wrote:

 list = [1,2,3]

Somewhat unrelated, but... is it a good idea to name your list
list?  Isn't that the name of Python's built-in list constructor
method?

Shadowing a built-in has contributed to more than one subtle bug in my
code, and I've learned to avoid it.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python's super() considered super!

2011-05-26 Thread Ian Kelly
On Thu, May 26, 2011 at 12:13 PM, Dotan Cohen dotanco...@gmail.com wrote:
 On Thu, May 26, 2011 at 19:39, Raymond Hettinger pyt...@rcn.com wrote:
 It would also be great if some of you would upvote it on HackerNews.


 Here's a link to the super() how-to-guide and commentary:  bit.ly/
 iFm8g3


 Is that the same link as in the OP? I don't click on blind links, so
 if it isn't then please post a direct link. Thanks.

It's a link to ycombinator:

http://news.ycombinator.com/item?id=2588262
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Terry Reedy

On 5/26/2011 3:18 AM, Algis Kabaila wrote:


And why do you insist on calling an instance of list, list? Even a
human reader will confuse which is which. What you are showing is an
example how confusing things become when a keyword (list) is
over-written (with list instance).


(Minor note: 'list' is not a keyword (if it were, it could not be 
over-ridden) but it is a builtin.) You are correct, it is confusing. 
Such usage will also lead to bugs if one ever tries to access the class 
as 'list' later in the program.


Here is a legitimate usage of builtins masking:

import builtins
def list(iterable):
print('building list from {}: {}'.format(type(iterable),iterable))
return builtins.list(iterable)

a = list((1,2,3))
b = list({1,2,3})
###
building list from class 'tuple': (1, 2, 3)
building list from class 'set': {1, 2, 3}

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list


The worth of comments

2011-05-26 Thread Richard Parker
On May 26, 2011, at 4:28 AM, python-list-requ...@python.org wrote:

 My experience is that comments in Python are of relatively low 
 usefulness. (For avoidance of doubt: not *zero* usefulness, merely low.) 
 I can name variables, functions and classes with sensible, self-
 documenting names. Why write:
 
 x = get_results(arg)  # x is a list of 1 or more results
 [... much later]
 for y in x:
# process each result in turn
do_something_with(y)

(It occurred to me that I should use a specific subject for this discussion.)

I'm less inclined to use comments on each line, or selected lines, but rather 
use block comments instead. They require more thought and time to write; 
however, the intended functionality of the code that follows can be described 
in full.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python's super() considered super!

2011-05-26 Thread Dotan Cohen
On Thu, May 26, 2011 at 21:38, Ian Kelly ian.g.ke...@gmail.com wrote:
 It's a link to ycombinator:

 http://news.ycombinator.com/item?id=2588262


Thanks.

-- 
Dotan Cohen

http://gibberish.co.il
http://what-is-what.com
-- 
http://mail.python.org/mailman/listinfo/python-list


python urllib2 data post over https

2011-05-26 Thread miamia
hello, I am using this code to send data over https with post method:

params='tieto data idu na sevrer\n'
kamodoslat = https://domena.tld/script.php;
req = urllib2.Request(kamodoslat)
req.add_header('User-Agent', 'agent')
resp = urllib2.urlopen(req, params)

how can I make sure that data were really sent over secured protocol
https and all communcation went through https?
-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Puzzled by list-appending behavior

2011-05-26 Thread Prasad, Ramit
 And why do you insist on calling an instance of list, list? Even a
 human reader will confuse which is which. What you are showing is an
 example how confusing things become when a keyword (list) is
 over-written (with list instance).

 (Minor note: 'list' is not a keyword (if it were, it could not be 
over-ridden) but it is a builtin.) You are correct, it is confusing. 
Such usage will also lead to bugs if one ever tries to access the class 
as 'list' later in the program.


An example of overriding built-ins you *really* do not want to happen (python 
2.6.4): 
 True = False
 True == False
True
 print True
False

From what I can tell, this does not work in Python 3.x (at least not in Python 
3.1.1)



Ramit



Ramit Prasad | JPMorgan Chase Investment Bank | Currencies Technology
712 Main Street | Houston, TX 77002
work phone: 713 - 216 - 5423


This communication is for informational purposes only. It is not
intended as an offer or solicitation for the purchase or sale of
any financial instrument or as an official confirmation of any
transaction. All market prices, data and other information are not
warranted as to completeness or accuracy and are subject to change
without notice. Any comments or statements made herein do not
necessarily reflect those of JPMorgan Chase  Co., its subsidiaries
and affiliates.

This transmission may contain information that is privileged,
confidential, legally privileged, and/or exempt from disclosure
under applicable law. If you are not the intended recipient, you
are hereby notified that any disclosure, copying, distribution, or
use of the information contained herein (including any reliance
thereon) is STRICTLY PROHIBITED. Although this transmission and any
attachments are believed to be free of any virus or other defect
that might affect any computer system into which it is received and
opened, it is the responsibility of the recipient to ensure that it
is virus free and no responsibility is accepted by JPMorgan Chase 
Co., its subsidiaries and affiliates, as applicable, for any loss
or damage arising in any way from its use. If you received this
transmission in error, please immediately contact the sender and
destroy the material in its entirety, whether in electronic or hard
copy format. Thank you.

Please refer to http://www.jpmorgan.com/pages/disclosures for
disclosures relating to European legal entities.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Terry Reedy

On 5/26/2011 11:36 AM, John Bokma wrote:

Ben Finneyb...@benfinney.id.au  writes:


 [impolite comment not quoted]

Get a life. Or better, just fuck off and die. It will improve both the
world and the Python community, of which you are nothing but a little,
smelly shitstain.


That abuse is entirely unwelcome in this community, against any person.
Please desist.


You should have spoken up sooner, especially as the spokes person of
this community. But every bully has is fan club.


I agree that the original impolite comment was just that -- impolite -- 
and perhaps enough so that it should have been spoken out against. But I 
also agree that the quoted response is at least three times as bad, 
enough so to understandably push someone to respond. Both comments are 
atypical here.


--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list


Re: Python's super() considered super!

2011-05-26 Thread Terry Reedy

On 5/26/2011 2:13 PM, Dotan Cohen wrote:

On Thu, May 26, 2011 at 19:39, Raymond Hettingerpyt...@rcn.com  wrote:

It would also be great if some of you would upvote it on HackerNews.



Here's a link to the super() how-to-guide and commentary:  bit.ly/
iFm8g3



Is that the same link as in the OP? I don't click on blind links, so
if it isn't then please post a direct link. Thanks.


It is a link to HackerNews
http://news.ycombinator.com/item?id=2588262

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Karim

On 05/26/2011 10:03 PM, Terry Reedy wrote:

On 5/26/2011 11:36 AM, John Bokma wrote:

Ben Finneyb...@benfinney.id.au  writes:


 [impolite comment not quoted]

Get a life. Or better, just fuck off and die. It will improve both the
world and the Python community, of which you are nothing but a little,
smelly shitstain.


That abuse is entirely unwelcome in this community, against any person.
Please desist.


You should have spoken up sooner, especially as the spokes person of
this community. But every bully has is fan club.


I agree that the original impolite comment was just that -- impolite 
-- and perhaps enough so that it should have been spoken out against. 
But I also agree that the quoted response is at least three times as 
bad, enough so to understandably push someone to respond. Both 
comments are atypical here.




Original one impolite perhaps but only truth could cause such hatred.

Cheers


--
http://mail.python.org/mailman/listinfo/python-list


Re: The worth of comments

2011-05-26 Thread Patty


- Original Message - 
From: Richard Parker r.richardpar...@comcast.net

To: python-list@python.org
Sent: Thursday, May 26, 2011 11:50 AM
Subject: The worth of comments



On May 26, 2011, at 4:28 AM, python-list-requ...@python.org wrote:


My experience is that comments in Python are of relatively low
usefulness. (For avoidance of doubt: not *zero* usefulness, merely low.)
I can name variables, functions and classes with sensible, self-
documenting names. Why write:

x = get_results(arg)  # x is a list of 1 or more results
[... much later]
for y in x:
   # process each result in turn
   do_something_with(y)


(It occurred to me that I should use a specific subject for this 
discussion.)


I'm less inclined to use comments on each line, or selected lines, but 
rather use block comments instead. They require more thought and time to 
write; however, the intended functionality of the code that follows can be 
described in full.


--
http://mail.python.org/mailman/listinfo/python-list




Hello Richard - I was recently complimented in a phone screen interview for 
including comment blocks exactly as you describe above.


Regards,

Patty 


--
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Daniel Kluev
On Wed, May 25, 2011 at 3:10 AM, Octavian Rasnita orasn...@gmail.com wrote:
 Once again. Suppose we have array of key-value pairs (two-dimensional
 array),

 This is a forced example to fit the way Python can do it with a clean syntax, 
 but I don't think there are cases in which somebody wants to create 
 hashes/dictionaries where the key is not a plain string but an array.

 This is not a rare case, but a case that probably nobody needs, ever.

This is far more popular case than converting flat lists into dicts in
Python world. In fact, I *never* had need to convert flat list instead
of properly structured one. Thats why we have both lists and tuples,
after all.
Sure, since perl does not support it at all, perl programmers do not
use it and resort to idea of guess which values are keys by index
due to lack of better approach, with need of obscure =
pseudo-syntax to cover it up.

-- 
With best regards,
Daniel Kluev
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Terry Reedy

On 5/26/2011 11:58 AM, MRAB wrote:

On 26/05/2011 06:17, Chris Rebert wrote:

list.remove(), list.sort(), and list.extend() similarly return None
rather than the now-modified list.



I'd just like to point out that it's a convention, not a rigid rule.
Sometimes it's not followed, for example, dict.setdefault.


The rule for builtin collections is that mutation methods do not return 
the collection. If there is a member of the collection to return, they 
return that. Otherwise they return None.


list/set.pop and dict.popitem are other mutation methods that have a 
(former) member to return.


The rule applies to special methods like __getitem__ (returns an item) 
and __setitem__ (returns None). Since a.append(item) is *conceptually* 
equivalent to a.__setitem(len(a), item) (I know, it raises) and 
*actually* defined as a.__setitem(len(a):len(a), item), it should not be 
surprising that all three return None.


I think the above should be better documented.
http://bugs.python.org/issue12192
has some proposals. Comments there welcome.

In another post
On 5/26/2011 4:09 AM, Chris Rebert wrote:
 I'm just surprised that the docstring doesn't explicitly state
 Returns None. by this point, given that this is such a common point
 of newbie confusion.

I never noticed. After reading the above, I added this to the proposal 
above.




--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread sal migondis
On Thu, May 26, 2011 at 12:28 PM, sal migondis salmi...@gmail.com wrote:
 From: Thorsten Kampe thors...@thorstenkampe.de
 Subject: Re: English Idiom in Unix: Directory Recursively
 Date: Thu, 26 May 2011 12:46:58 +0200
 To: python-list@python.org

 * Steven D'Aprano (26 May 2011 10:06:44 GMT)

 On Thu, 26 May 2011 10:48:07 +0200, Thorsten Kampe wrote:

  But not to digress, the /real/ problem with commands or idioms like rm
  -r is /not/ their choice of option names but that they explain these
  options in the exact same terms. No one would have a problem with -r,
  --recursive -- remove directories including all sub-directories instead
  of -r, --recursive -- remove directories and their contents
  recursively.

 I think you are understanding the description remove directories and
 their contents recursively as a description of the *mechanism* by which
 rm removes the directory, i.e. some recursive tree-walking function that
 visits each node and deletes it.

 I don't believe that's how the description is meant to be understood. I
 understand it as describing the effect, not the implementation.

 It doesn't matter how I interprete the explanation -r = recursively
 delete. [..]

Quite the contrary.. and that's the whole issue: your superficial
knowledge of the English language..  :-)

 You're interpreting the reference to recursive as a nod to the
 implementation. I'm not, and therefore your arguments don't convince
 me.

 No one understands what recursively delete means

... _We_ do.. :-)

 until someone explains (translates) it to him. This is not an argument
 but a simple fact. I experienced it many times, others here in the thread
 did and probably you, too.

 recursively delete is completely unneccessary because there is already
 a simple explanation that everyone understands without translation
 (delete including subdirectories).

.. which is very poor 'style' indeed.

Style is not a matter of aesthetics. It's all about clarity and expressiveness.
It's about effectively communicating your thoughts to your audience. When
I hear or read 'delete recursively', I immediately 'get the idea' and I can
move on..

Now, if I heard 'delete including subdirectories', my first reaction would be..
ouch, I bet that hurts.. or ugh.. how ugly.. See, I'm distracted already.

But it doesn't stop there.. After the initial jolt to my attention, I'd start
thinking along the lines of.. hm. subdirectories.. now what about
sub sub directories.. etc. not seriously, perhaps.. but by the time I got
over it and was able to focus again on what was being said (or what
I was reading) I would have lost the thread.

This is why the author of the document puts paid to all the  nonsense
and instinctively uses 'recursively delete', not going into irrelevant
details.

It's that simple.

 It's unnecessary bullshit buzzword bingo from nerds which adds or helps
 or explains nothing. It's just that simple.

This has nothing to do with buzzwords whatsoever.

Despite polite hints from several other posters, the problem is that (like
the OP) you are not a native speaker of English but you will not listen and
still think you are qualified to make recommendations regarding usage and
abusage in the English language.

Sorry pal, but right here, you are like the kellet teaching the fishes to swim.

Sal.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Xah Lee
On May 26, 4:20 am, Thorsten Kampe thors...@thorstenkampe.de wrote:
 Did your mom tell you to recursively clean up your room?.

that had me L O L!

i think i'll quote in my unix hating blogs sometimes, if you don't
mind. ☺

 Xah
-- 
http://mail.python.org/mailman/listinfo/python-list


bug in str.startswith() and str.endswith()

2011-05-26 Thread Ethan Furman

I've tried this in 2.5 - 3.2:

-- 'this is a test'.startswith('this')
True
-- 'this is a test'.startswith('this', None, None)
Traceback (most recent call last):
  File stdin, line 1, in module
TypeError: slice indices must be integers or None or have an __index__ 
method


The 3.2 docs say this:

str.startswith(prefix[, start[, end]])
Return True if string starts with the prefix, otherwise return False. 
prefix can also be a tuple of prefixes to look for. With optional start, 
test string beginning at that position. With optional end, stop 
comparing string at that position


str.endswith(suffix[, start[, end]])
Return True if the string ends with the specified suffix, otherwise 
return False. suffix can also be a tuple of suffixes to look for. With 
optional start, test beginning at that position. With optional end, stop 
comparing at that position.


Any reason this is not a bug?

~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list


Re: bug in str.startswith() and str.endswith()

2011-05-26 Thread MRAB

On 27/05/2011 00:27, Ethan Furman wrote:

I've tried this in 2.5 - 3.2:

-- 'this is a test'.startswith('this')
True
-- 'this is a test'.startswith('this', None, None)
Traceback (most recent call last):
File stdin, line 1, in module
TypeError: slice indices must be integers or None or have an __index__
method

The 3.2 docs say this:

str.startswith(prefix[, start[, end]])
Return True if string starts with the prefix, otherwise return False.
prefix can also be a tuple of prefixes to look for. With optional start,
test string beginning at that position. With optional end, stop
comparing string at that position

str.endswith(suffix[, start[, end]])
Return True if the string ends with the specified suffix, otherwise
return False. suffix can also be a tuple of suffixes to look for. With
optional start, test beginning at that position. With optional end, stop
comparing at that position.

Any reason this is not a bug?


Let's see: 'start' and 'end' are optional, but aren't keyword
arguments, and can't be None...

I'd say bug.
--
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-26 Thread Thorsten Kampe
* sal migondis (Thu, 26 May 2011 17:50:32 -0400)
 On Thu, May 26, 2011 at 12:28 PM, sal migondis salmi...@gmail.com
 wrote:
  From: Thorsten Kampe thors...@thorstenkampe.de
  It's unnecessary bullshit buzzword bingo from nerds which adds or
  helps or explains nothing. It's just that simple.
 
 This has nothing to do with buzzwords whatsoever.
 
 Despite polite hints from several other posters, the problem is that (like
 the OP) you are not a native speaker of English but you will not listen and
 still think you are qualified to make recommendations regarding usage and
 abusage in the English language.

*sigh* there is nothing in recursively delete which would be specific 
to English. It would be the same in French, Spanish, Italian or German 
(rekursiv löschen).

Thorsten
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread RainyDay
On May 26, 5:33 pm, Daniel Kluev dan.kl...@gmail.com wrote:
 On Wed, May 25, 2011 at 3:10 AM, Octavian Rasnita orasn...@gmail.com wrote:
  Once again. Suppose we have array of key-value pairs (two-dimensional
  array),

  This is a forced example to fit the way Python can do it with a clean 
  syntax, but I don't think there are cases in which somebody wants to create 
  hashes/dictionaries where the key is not a plain string but an array.

  This is not a rare case, but a case that probably nobody needs, ever.

 This is far more popular case than converting flat lists into dicts in
 Python world. In fact, I *never* had need to convert flat list instead
 of properly structured one. Thats why we have both lists and tuples,
 after all.

I agree that it's almost never needed to convert flat
lists. I've used python for over 10 years and I remember
exactly one time when I needed to do that. It turned out
that it's a bit tricky and hacky to do in python, in
the sense that it's hard to remember if I'll ever need
it again, but it will only take minutes to google it.

For example, in one piece of code I did recently I
created a dict of range tuples and counts from a sequential list, like
so:

ranges = [(x*width, (x+1)*width) for x in range(y)]
data = dict((x,0) for x in ranges)

A perl programmer would instead create a flat list
and then convert it to dict. And if he were new to
python he'd create a flat list and then be annoyed
that there's no quick and easy way to make it into
a dict.

Python way in this case is more structured and
disciplined, and the only flaw I can see is that
it doesn't meet expectations of perl programmers.

 -Rainy
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Link errors embedding Python 3.2

2011-05-26 Thread Chris Angelico
Still trying to sort this out, trying various things. If I configure
--enable-shared, I get a different ImportError: 'libpython3.3m.so.1.0:
cannot open shared object file: No such file or directory'. That file
exists in ~/cpython, but sudo make install doesn't put it anywhere
else. Pointing LD_LIBRARY_PATH to there causes my program to segfault
with thread context errors.

Am I asking this in the wrong forum? Would it be more appropriate in python-dev?

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: bug in str.startswith() and str.endswith()

2011-05-26 Thread Carl Banks
On Thursday, May 26, 2011 4:27:22 PM UTC-7, MRAB wrote:
 On 27/05/2011 00:27, Ethan Furman wrote:
  I've tried this in 2.5 - 3.2:
 
  -- 'this is a test'.startswith('this')
  True
  -- 'this is a test'.startswith('this', None, None)
  Traceback (most recent call last):
  File stdin, line 1, in module
  TypeError: slice indices must be integers or None or have an __index__
  method
 
  The 3.2 docs say this:
 
  str.startswith(prefix[, start[, end]])
  Return True if string starts with the prefix, otherwise return False.
  prefix can also be a tuple of prefixes to look for. With optional start,
  test string beginning at that position. With optional end, stop
  comparing string at that position
 
  str.endswith(suffix[, start[, end]])
  Return True if the string ends with the specified suffix, otherwise
  return False. suffix can also be a tuple of suffixes to look for. With
  optional start, test beginning at that position. With optional end, stop
  comparing at that position.
 
  Any reason this is not a bug?
 
 Let's see: 'start' and 'end' are optional, but aren't keyword
 arguments, and can't be None...
 
 I'd say bug.

I also say bug.  The end parameter looks pretty useless for .startswith() and 
is probably only present for consistency with other string search methods like 
.index().  Yet on .index() using None as an argument works as intended:

 cbcd.index(c,None,None)
0

So it's there for consistency, yet is not consistent.


Carl Banks
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: bug in str.startswith() and str.endswith()

2011-05-26 Thread Mel
Ethan Furman wrote:

 I've tried this in 2.5 - 3.2:
 
 -- 'this is a test'.startswith('this')
 True
 -- 'this is a test'.startswith('this', None, None)
 Traceback (most recent call last):
File stdin, line 1, in module
 TypeError: slice indices must be integers or None or have an __index__
 method
 
 The 3.2 docs say this:
 
 str.startswith(prefix[, start[, end]])
 Return True if string starts with the prefix, otherwise return False.
 prefix can also be a tuple of prefixes to look for. With optional start,
 test string beginning at that position. With optional end, stop
 comparing string at that position
 
 str.endswith(suffix[, start[, end]])
 Return True if the string ends with the specified suffix, otherwise
 return False. suffix can also be a tuple of suffixes to look for. With
 optional start, test beginning at that position. With optional end, stop
 comparing at that position.
 
 Any reason this is not a bug?

It's a wart at the very least.  The same thing happened in Python2 with 
range and xrange; there seemed no way to explicitly pass default 
arguments.

Mel.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: bug in str.startswith() and str.endswith()

2011-05-26 Thread Roy Smith
In article mailman.2136.1306451668.9059.python-l...@python.org,
 Ethan Furman et...@stoneleaf.us wrote:

 -- 'this is a test'.startswith('this')
 True
 -- 'this is a test'.startswith('this', None, None)
 Traceback (most recent call last):
File stdin, line 1, in module
 TypeError: slice indices must be integers or None or have an __index__ 
 method
[...]
 Any reason this is not a bug?

+1 for it being a bug.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python's super() considered super!

2011-05-26 Thread Ben Finney
Raymond Hettinger pyt...@rcn.com writes:

 I just posted a tutorial and how-to guide for making effective use of
 super().

Thanks very much! We need articles like this.

Raymond Hettinger pyt...@rcn.com writes:

 Here's a link to the super() how-to-guide and commentary:  bit.ly/
 iFm8g3

We also, though, need *real* URLs. Blind URLs through obfuscation
services have their uses, but surely not in a forum like this. The real
URL is URL:http://news.ycombinator.com/item?id=2588262.

-- 
 \“… it's best to confuse only one issue at a time.” —Brian W. |
  `\Kernighan and Dennis M. Ritchie, _The C programming language_, |
_o__) 1988 |
Ben Finney
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The worth of comments

2011-05-26 Thread Ben Finney
Richard Parker r.richardpar...@comcast.net writes:

 On May 26, 2011, at 4:28 AM, python-list-requ...@python.org wrote:

  My experience is that comments in Python are of relatively low
  usefulness. (For avoidance of doubt: not *zero* usefulness, merely
  low.) I can name variables, functions and classes with sensible,
  self- documenting names.

I am largely in agreement with this position (including the “not *zero*
usefulness” caveat).

 I'm less inclined to use comments on each line, or selected lines, but
 rather use block comments instead. They require more thought and time
 to write; however, the intended functionality of the code that follows
 can be described in full.

This I disagree with. If a section of code is interesting enough to
deserve an explanation, then it is better to capture it in a
helpfully-named function with its doc string having the explanation.

-- 
 \“If this is your first visit to the USSR, you are welcome to |
  `\  it.” —hotel room, Moscow |
_o__)  |
Ben Finney
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Steven D'Aprano
On Thu, 26 May 2011 11:27:35 -0700, John Ladasky wrote:

 On May 25, 9:46 pm, Uncle Ben bgr...@nycap.rr.com wrote:
 
 list = [1,2,3]
 
 Somewhat unrelated, but... is it a good idea to name your list list? 
 Isn't that the name of Python's built-in list constructor method?
 
 Shadowing a built-in has contributed to more than one subtle bug in my
 code, and I've learned to avoid it.

Agreed. However, there are good reasons for sometimes shadowing built-
ins, and namespaces make it safe to do so if you are sufficiently careful.

E.g. I have a module stats.sum() which shadows the built-in, but only in 
that module, which is exactly the behaviour I want. 

(If you do from stats import sum, then you're responsible for whatever 
happens next.)

Or you might isolate the shadow to a function small enough that you can 
be sure that it won't cause any problems, e.g.:

def get(list, object):
Append object to a copy of list and return it.
return list + [object]

For one or two line functions, I think that's perfectly reasonable. 
Anything more than that, I'd be getting nervous.


-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The worth of comments

2011-05-26 Thread Roy Smith
In article mailman.2126.1306435826.9059.python-l...@python.org,
 Richard Parker r.richardpar...@comcast.net wrote:

 On May 26, 2011, at 4:28 AM, python-list-requ...@python.org wrote:
 
  My experience is that comments in Python are of relatively low 
  usefulness. (For avoidance of doubt: not *zero* usefulness, merely low.) 
  I can name variables, functions and classes with sensible, self-
  documenting names. Why write:
  
  x = get_results(arg)  # x is a list of 1 or more results
  [... much later]
  for y in x:
 # process each result in turn
 do_something_with(y)
 
 (It occurred to me that I should use a specific subject for this discussion.)
 
 I'm less inclined to use comments on each line, or selected lines, but rather 
 use block comments instead. They require more thought and time to write; 
 however, the intended functionality of the code that follows can be described 
 in full.

Over the years, my use of comments has evolved.  I was taught, You 
should comment your code.  Eventually, I came to realize that the real 
mandate is, You should make it easy to understand your code.  Comments 
are just one possible tool to help achieve that goal.

Some things that help code be understandable are:

* Using good data structures

* Using good algorithms

* Breaking the code up into manageable pieces (i.e. functions, classes, 
methods), each of which encapsulates a single concept

* Using descriptive names for variables (and functions, classes, 
methods, etc)

All of those fall under the self-documenting code umbrella.  But, 
while those things help, I find it's almost always a good idea to 
document interfaces, i.e. functions.  What the arguments are (not just 
their types, but valid value ranges, and what they mean).  What the 
function returns.  What error conditions are possible.  And, in general, 
what the dang thing does.  In other words, enough information to use 
(and test) the function to its fullest extent without ever having to 
look at the source code.  This stuff tends to go in a big block comment 
at the beginning of the function.

Now, what makes Python interesting in this regard is that the big block 
comment becomes a doc string.  You write exactly the same stuff, except 
now things like help() can get at it, and things like doctest can do 
even more interesting things with it (I don't actually use doctest, but 
I do appreciate its coolness).

Comments scattered throughout the code tend to be warnings about tricky 
stuff, references to classic algorithms, references to ticket tracking 
systems, and the like.  Sometimes it's an explanation of what the next 
bunch of lines of code are doing, although if you've got a lot of those, 
that's a hint that maybe you need to be refactoring instead.  Sometimes 
I'll drop in suggestions to future maintainers like, consider 
refactoring with with perform_frobnitz_action(), or even, Don't change 
this without first talking to Fred!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Link errors embedding Python 3.2

2011-05-26 Thread Ned Deily
In article BANLkTim=j9wzzv7owppmawxz52u2aop...@mail.gmail.com,
 Chris Angelico ros...@gmail.com wrote:
 Still trying to sort this out, trying various things. If I configure
 --enable-shared, I get a different ImportError: 'libpython3.3m.so.1.0:
 cannot open shared object file: No such file or directory'. That file
 exists in ~/cpython, but sudo make install doesn't put it anywhere
 else. Pointing LD_LIBRARY_PATH to there causes my program to segfault
 with thread context errors.
 
 Am I asking this in the wrong forum? Would it be more appropriate in 
 python-dev?

The discussion in http://bugs.python.org/issue4434 might be of some help.

-- 
 Ned Deily,
 n...@acm.org

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: bug in str.startswith() and str.endswith()

2011-05-26 Thread Terry Reedy

On 5/26/2011 7:27 PM, Ethan Furman wrote:

I've tried this in 2.5 - 3.2:

-- 'this is a test'.startswith('this')
True
-- 'this is a test'.startswith('this', None, None)
Traceback (most recent call last):
File stdin, line 1, in module
TypeError: slice indices must be integers or None or have an __index__
method

The 3.2 docs say this:

str.startswith(prefix[, start[, end]])
Return True if string starts with the prefix, otherwise return False.
prefix can also be a tuple of prefixes to look for. With optional start,
test string beginning at that position. With optional end, stop
comparing string at that position


To me, that says pretty clearly that start and end have to be 
'positions', ie, ints or other index types. So I would say that the 
error message is a bug. I see so reason why one would want to use None 
rather that 0 for start or None rather than nothing for end.


--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Steven D'Aprano
On Thu, 26 May 2011 16:03:58 -0400, Terry Reedy wrote:

 On 5/26/2011 11:36 AM, John Bokma wrote:
 Ben Finneyb...@benfinney.id.au  writes:
 
   [impolite comment not quoted]
 Get a life. Or better, just fuck off and die. It will improve both
 the world and the Python community, of which you are nothing but a
 little, smelly shitstain.

 That abuse is entirely unwelcome in this community, against any
 person. Please desist.

 You should have spoken up sooner, especially as the spokes person of
 this community. But every bully has is fan club.
 
 I agree that the original impolite comment was just that -- impolite --
 and perhaps enough so that it should have been spoken out against. 

Okay, I've stayed silent while people criticize me long enough. What 
exactly did I say that was impolite? 

Is this one of those things where it is impolite to say certain things 
in public even though in private everyone knows they are true?

We all know that some people have adversarial views of all sorts of 
things, including computer languages. My language of choice is better 
than your language of choice. Most of us can probably name examples, or 
if not, it wouldn't take much effort on Google to find them.

If we're honest to ourselves, we'd realise that we're all at least a 
*little bit* adversarial. XKCD's famous cartoon about People are WRONG 
on the Internet! is funny because we can so often relate to it. We 
really do think some languages are better than others, in objective ways 
as well as subjective, and want to support our language. That's partly 
why we're here, to give back to the language that we enjoy using. We're 
just more nuanced about our opinion than the trolls.

And we also know that people keep going back to their language of choice 
for all sorts of reasons that aren't objective. Why do I keep going back 
to Pascal instead of C? I'll give you all sorts of objective reasons why 
I think Pascal is a better designed language, but the real reason is 
because it makes me comfortable. It was the first language I learned.

Objectively, I should just drop it and move on, but I'm going to keep 
tilting at those windmills hoping to turn the tide of popular opinion and 
see a mass migration of C coders to Pascal...

*cough*

John threw down a distinct challenge:

if Python is really so much better than Python [sic] 
readability wise, why do I have such a hard time dropping
Perl and moving on?

Am I really the only one who can hear the oh yeah smart guy at the 
start of that sentence?

If this is one of those lines you're not allowed to cross, where 
everybody knows that people invest self-image in their job or choice of 
language (dammit, I'm a *Python coder*, I'd never stoop to writing 
COBOL! sort of thing) but you mustn't mention it because that would be 
impolite, well, screw that for a game of soldiers. Sometimes politeness 
is the grease that keeps society's wheels turning, and sometimes it's 
just blinkers that stops us from understanding ourselves and others.

If I got it wrong about John, oh well, I said it was a guess, and trying 
to get inside someone else's head is always a chancy business. But the 
fact that he responded so aggressively instead of saying Ha, Freudian 
projection, much? hints that maybe I hit a button. Or maybe I just ran 
into him on a bad day.

Projection? Yes, I cheerfully admit it. *My* self-image is partly I am a 
Python coder, not an enterprise Java suit or a VB code monkey. It's more 
complicated than that, of course, but let's remember also that the Perl 
community is *full* of people who self-identify as Just Another Perl 
Hacker.

John, I'd apologise if I thought I said something rude or nasty to you, 
but I don't, so I don't believe I have anything to apologise for. But I 
will say that I regret that you took it as an attack, and assure you that 
it was not meant that way.



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Chris Angelico
On Fri, May 27, 2011 at 11:59 AM, Steven D'Aprano
steve+comp.lang.pyt...@pearwood.info wrote:
 def get(list, object):
    Append object to a copy of list and return it.
    return list + [object]

 For one or two line functions, I think that's perfectly reasonable.
 Anything more than that, I'd be getting nervous.

But even for something that short, why do it? Why not call the
parameter 'lst' or something? Shadowing with something completely
different is seldom going to give major advantage, and has the
potential to be quite confusing.

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: bug in str.startswith() and str.endswith()

2011-05-26 Thread Steven D'Aprano
On Thu, 26 May 2011 23:00:32 -0400, Terry Reedy wrote:

[...] 
 To me, that says pretty clearly that start and end have to be
 'positions', ie, ints or other index types. So I would say that the
 error message is a bug. I see so reason why one would want to use None
 rather that 0 for start or None rather than nothing for end.

def my_string_function(source, x, y, z, start, end):
if source.startswith(x+y+z, start, end): 
...

I want sensible defaults for start and end. What should I set them to?

def my_string_function(source, x, y, z, start=0, end=None):
if end is None:
flag = source.startswith(x+y+z, start)
else:
flag = source.startswith(x+y+z, start, end)
if flag:
...

Yuck. Perhaps a better alternative is:

def my_string_function(source, x, y, z, start=0, end=None):
t = (start,) if end is None else (start, end)
if source.startswith(x+y+z, *t):
...

but that's still pretty icky.


-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Why did Quora choose Python for its development?

2011-05-26 Thread Gregory Ewing

John Bokma wrote:


A Perl programmer will call this line noise:

double_word_re = re.compile(r\b(?Pword\w+)\s+(?P=word)(?!\w),
re.IGNORECASE)
for match in double_word_re.finditer(text):
print ({0} is duplicated.format(match.group(word))


Actually, Python programmers would tend to call the RE part
of that line noise, too.

It's for that reason that we tend to avoid using REs when
possible, reaching for them only as a tool of last resort.

--
Greg
--
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Steven D'Aprano
On Fri, 27 May 2011 13:24:24 +1000, Chris Angelico wrote:

 On Fri, May 27, 2011 at 11:59 AM, Steven D'Aprano
 steve+comp.lang.pyt...@pearwood.info wrote:
 def get(list, object):
    Append object to a copy of list and return it. return list +
    [object]

 For one or two line functions, I think that's perfectly reasonable.
 Anything more than that, I'd be getting nervous.
 
 But even for something that short, why do it? Why not call the parameter
 'lst' or something? Shadowing with something completely different is
 seldom going to give major advantage, and has the potential to be quite
 confusing.

Because lst is not a real word. To native readers of languages derived 
from Latin or Germany, such as English, it is quite a strange word 
because it has no vowel. In addition, it looks like 1st (first).

We use naming conventions like my_list list_ lst alist etc. to avoid 
shadowing the built-in list, not because they are good to use in and of 
themselves. (E.g. we don't write my_tree because there's no tree to 
shadow.) All of these are ugly to some extent, which is to say, they 
cause some small, or not so small, additional cognitive load to the 
reader. We don't use the name list_ because we like trailing 
underscores! We do it because it avoids the cost of shadowing a built-in.

But in a small function, there's no real cost to shadowing, so why 
bother? Any hypothetical confusion caused is no greater than, and 
probably less than, the increased difficulty in reading any of the 
alternatives.

Either way, we're talking micro-optimizations in readability here. Don't 
get hung up over the choice of a name. If you'd rather never shadow, I'm 
fine with that too. I just think never shadow is unnecessarily strict. 
Sometimes shadowing is harmless, and sometimes it's useful.

If you're writing a tutorial for beginners, shadowing a built-in without 
explanation will cause confusion, but for production code, I think it 
reasonable to assume the reader knows Python well enough not to stumble 
over that choice.



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Puzzled by list-appending behavior

2011-05-26 Thread Chris Angelico
On Fri, May 27, 2011 at 1:52 PM, Steven D'Aprano
steve+comp.lang.pyt...@pearwood.info wrote:
 Because lst is not a real word. To native readers of languages derived
 from Latin or Germany, such as English, it is quite a strange word
 because it has no vowel. In addition, it looks like 1st (first).

Contrived examples are always awkward; in real examples, there's often
an alternative based on the list's purpose, which can then be used to
offer a name.

 Sometimes shadowing is harmless, and sometimes it's useful.

Agreed on both those halves; and obviously, the times where it's
useful are very much important. I have to say, I do like Python's lack
of keywords for these things; the ability to shadow is a flexibility
that means that, for the most part, new builtins can be added to the
language without breaking existing code.

ChrisA
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: bug in str.startswith() and str.endswith()

2011-05-26 Thread Stefan Behnel

Roy Smith, 27.05.2011 03:13:

  Ethan Furman wrote:


--  'this is a test'.startswith('this')
True
--  'this is a test'.startswith('this', None, None)
Traceback (most recent call last):
File stdin, line 1, inmodule
TypeError: slice indices must be integers or None or have an __index__
method

[...]

Any reason this is not a bug?


+1 for it being a bug.


Meaning that the right thing to do at this point is to file a bug report.

Stefan

--
http://mail.python.org/mailman/listinfo/python-list


Re: The worth of comments

2011-05-26 Thread Chris Angelico
On Fri, May 27, 2011 at 12:08 PM, Roy Smith r...@panix.com wrote:
  Sometimes
 I'll drop in suggestions to future maintainers like, consider
 refactoring with with perform_frobnitz_action()

Usually, I address future-me with comments like that (on the
assumption that there's nobody in the world sadistic enough to want to
maintain my code). But I never name future-me, the comments will be
addressed to the subsequent maintainer or somesuch. I do assume,
though, that future-me has forgotten everything about the code, and
since past-me left some comments that current-me has read, I think the
assumption is fairly accurate. (Did I *really* write that code? It has
my name on it.)

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


[issue12182] pydoc.py integer division problem

2011-05-26 Thread Nick Coghlan

Changes by Nick Coghlan ncogh...@gmail.com:


--
assignee:  - ncoghlan
nosy: +ncoghlan

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12182
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12174] Multiprocessing logging levels unclear

2011-05-26 Thread Nick Coghlan

Changes by Nick Coghlan ncogh...@gmail.com:


--
nosy: +jnoller, ncoghlan

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12164] str.translate docstring doesn't mention that 'table' can be None

2011-05-26 Thread Petri Lehtinen

Changes by Petri Lehtinen pe...@digip.org:


--
keywords: +patch
nosy: +petri.lehtinen
Added file: http://bugs.python.org/file22122/str_translate_docstring.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12164
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue11109] socketserver.ForkingMixIn leaves zombies, also fails to reap all zombies in one pass

2011-05-26 Thread Justin Warkentin

Justin Warkentin justin.warken...@gmail.com added the comment:

Sorry, I haven't had a chance to look at this in a couple days. I've been very 
busy with work. I'm not sure exactly how to write the test for this, so I don't 
know that I'd be much help there.

One last thing, I was just looking through the commits and I noticed in the 
NEWS update (http://hg.python.org/cpython/rev/3e3cd0ed82bb/) you have my name 
as Justin Wark. The last name is actually Warkentin, I just didn't have 
anything showing that. That's my fault, sorry. I just updated my profile to 
show my full name.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue11109
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12157] join method of multiprocessing Pool object hangs if iterable argument of pool.map is empty

2011-05-26 Thread Petri Lehtinen

Changes by Petri Lehtinen pe...@digip.org:


--
nosy: +petri.lehtinen

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12157
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12161] StringIO AttributeError instead of ValueError after close..

2011-05-26 Thread Petri Lehtinen

Petri Lehtinen pe...@digip.org added the comment:

I tested the patch on current 2.7 tip. It works and looks good to me.

--
nosy: +benjamin.peterson, petri.lehtinen, pitrou, stutzbach

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12161
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue11969] Can't launch multiproccessing.Process on methods

2011-05-26 Thread Ram Rachum

Ram Rachum cool...@cool-rr.com added the comment:

Why is this still marked as test needed?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue11969
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue11969] Can't launch multiproccessing.Process on methods

2011-05-26 Thread Ezio Melotti

Ezio Melotti ezio.melo...@gmail.com added the comment:

The test should be a diff against Lib/test/test_multiprocessing.py that adds a 
unit test.

--
nosy: +ezio.melotti

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue11969
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12082] Python/import.c still references fstat even with DONT_HAVE_FSTAT/!HAVE_FSTAT

2011-05-26 Thread Petri Lehtinen

Petri Lehtinen pe...@digip.org added the comment:

Should the .pyc/.pyo file writing be disabled altogether if stat() and/or 
fstat() is not available. In this case, there's no way to check mtimes, right?

--
nosy: +brett.cannon, ncoghlan, petri.lehtinen
versions: +Python 3.1, Python 3.2, Python 3.3

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12082
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread Petri Lehtinen

Petri Lehtinen pe...@digip.org added the comment:

IMO it should be explained in a comment why getattr is used instead of just 
self._child_created. Otherwise the patch looks good and useful.

--
nosy: +petri.lehtinen

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread STINNER Victor

STINNER Victor victor.stin...@haypocalc.com added the comment:

We can use a class attribute to set the attribute before calling __init__:

diff --git a/Lib/subprocess.py b/Lib/subprocess.py
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -664,6 +664,8 @@ _PLATFORM_DEFAULT_CLOSE_FDS = object()
 
 
 class Popen(object):
+_child_created = False
+
 def __init__(self, args, bufsize=0, executable=None,
  stdin=None, stdout=None, stderr=None,
  preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,

--
nosy: +haypo

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread Petri Lehtinen

Petri Lehtinen pe...@digip.org added the comment:

STINNER Victor wrote:
 We can use a class attribute to set the attribute before calling __init__:

True, this is clever. Will you commit?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread STINNER Victor

STINNER Victor victor.stin...@haypocalc.com added the comment:

 True, this is clever. Will you commit?

I'm not sure that it's the pythonic way to solve such problem. Can you work on 
a patch including a test?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread Petri Lehtinen

Petri Lehtinen pe...@digip.org added the comment:

 I'm not sure that it's the pythonic way to solve such problem. Can you work 
 on a patch including a test?

Yeah, getattr() might be more Pythonic indeed.

How can this be tested? According to the initial report, exceptions raised in 
__del__ seem to be ignored.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12082] Python/import.c still references fstat even with DONT_HAVE_FSTAT/!HAVE_FSTAT

2011-05-26 Thread STINNER Victor

STINNER Victor victor.stin...@haypocalc.com added the comment:

Does your filesystem store the modification time? Why don't you have/want 
fstat()? Do you have stat() or a similar function?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12082
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12182] pydoc.py integer division problem

2011-05-26 Thread Roundup Robot

Roundup Robot devnull@devnull added the comment:

New changeset 7724b53510c4 by Victor Stinner in branch '2.7':
Close #12182: Fix pydoc.HTMLDoc.multicolumn() if Python uses the new (true)
http://hg.python.org/cpython/rev/7724b53510c4

--
nosy: +python-dev
resolution:  - fixed
stage:  - committed/rejected
status: open - closed

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12182
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12182] pydoc.py integer division problem

2011-05-26 Thread STINNER Victor

STINNER Victor victor.stin...@haypocalc.com added the comment:

Patch applied, thanks for your patch!

--
nosy: +haypo

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12182
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12171] Reset method of the incremental encoders of CJK codecs calls the decoder reset function

2011-05-26 Thread Walter Dörwald

Walter Dörwald wal...@livinglogic.de added the comment:

+1 on the documentation changes.

--
nosy: +doerwalter

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12171
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12185] Decimal documentation lists first and second arguments, should be self and other

2011-05-26 Thread Eric V. Smith

New submission from Eric V. Smith e...@trueblade.com:

http://docs.python.org/library/decimal.html

In 9.4.2, Decimal objects, some of the methods mention the first and second 
parameters, when really it should be self and the argument, usually named 
other and sometimes something more specific. These include:

compare_total
copy_sign
next_toward
quantize (argument is exp)
rotate
scaleb
shift

It looks this is left over from where the same-named functions are described in 
the Context objects section.

--
assignee: docs@python
components: Documentation
messages: 136947
nosy: docs@python, eric.smith
priority: normal
severity: normal
status: open
title: Decimal documentation lists first and second arguments, should be 
self and other
versions: Python 2.7

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12185
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread Oleg Oshmyan

Oleg Oshmyan chor...@inbox.lv added the comment:

 We can use a class attribute to set the attribute before calling __init__

Ah, yes, I thought about adding a class attribute as well, but the class 
currently does not have any and initializes instance attributes to default 
values in __init__, so I chose getattr.

 How can this be tested? According to the initial report, exceptions raised in 
 __del__ seem to be ignored.

Exceptions raised in __del__ are printed to sys.stderr, even if it has been 
reassigned by Python code:

 import sys, io, subprocess
 sys.stderr = io.StringIO()
 subprocess.Popen(fdsa=1)
 sys.stderr.getvalue()
'Exception AttributeError: \'Popen\' object has no attribute 
\'_child_created\' in bound method Popen.__del__ of subprocess.Popen object 
at 0x1006ee710 ignored\nTraceback (most recent call last):\n  File stdin, 
line 1, in module\nTypeError: __init__() got an unexpected keyword argument 
\'fdsa\'\n'

test_generators.py already uses this trick in a test similar to what would be 
needed for this issue around line 1856.

Should I attempt to modify my patch to include a comment and a test?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread STINNER Victor

STINNER Victor victor.stin...@haypocalc.com added the comment:

 Should I attempt to modify my patch to include a comment and a test?

Yes please, you can use support.captured_stderr() tool.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread Petri Lehtinen

Petri Lehtinen pe...@digip.org added the comment:

Oleg Oshmyan wrote:
 Should I attempt to modify my patch to include a comment and a test?

Absolutely, go ahead if it's not too much trouble.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12186] readline.replace_history_item still leaks memory

2011-05-26 Thread stefanholek

New submission from stefanholek ste...@epy.co.at:

This is a continuation of issue #9450.

The 'data' element of a history entry may point to an undo list for the entry. 
When freeing the entry the associated undo list must be freed as well, and 
'free(data)' alone does not cut it. I have not found any other use of the 
'data' element in all of GNU Readline, so it is safe to assume it is either 
NULL or an undo list.

diff --git a/rl/readline.c b/rl/readline.c
index 26ac1e2..c8efd5b 100644
--- a/rl/readline.c
+++ b/rl/readline.c
@@ -541,8 +541,18 @@
 static void
 _py_free_history_entry(HIST_ENTRY *entry)
 {
-   histdata_t data = free_history_entry(entry);
-   free(data);
+   UNDO_LIST *undo_list;
+   UNDO_LIST *release;
+
+   /* A history entry may have an undo_list attached */
+   undo_list = (UNDO_LIST *)free_history_entry(entry);
+   while (undo_list) {
+   release = undo_list;
+   undo_list = undo_list-next;
+   if (release-what == UNDO_DELETE)
+   free(release-text);
+   free(release);
+   }
 }

--
components: Library (Lib)
messages: 136951
nosy: stefanholek
priority: normal
severity: normal
status: open
title: readline.replace_history_item still leaks memory
type: resource usage

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12186
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12085] subprocess.Popen.__del__ raises AttributeError if __init__ was called with an invalid argument list

2011-05-26 Thread Oleg Oshmyan

Oleg Oshmyan chor...@inbox.lv added the comment:

Here is a new patch; please take a look. Do I understand correctly that I 
should now remove the old one?

--
Added file: http://bugs.python.org/file22123/_child_created_2.diff

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12085
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12184] socketserver.ForkingMixin collect_children routine needs to collect only it's children

2011-05-26 Thread Charles-François Natali

Charles-François Natali neolo...@free.fr added the comment:

In the common case, I don't think that the os.waitpid(0, 0) is the hot spot, 
but rather this:

for child in self.active_children:
os.waitpid(child, os.WNOHANG)

It's called every time, and it's O(number of active children).

os.waitpid(0, 0) is only called when max_children (40) is reached. Also, I'm 
not sure why it's called without WNOHANG, because that means that we will block 
until active_children falls below max_children. That's an arbitrary limit, 
especially since it's not documented.

I've written a first draft patch using process group, that removes 
active_children and max_children.
The only slightly tricky part is the call to setpgid from the child and from 
the parent, to avoid a race where the child could try to join a stale PGID.
Note that I assume that setpgid is available on every Unix, since according to 
http://pubs.opengroup.org/onlinepubs/007908799/xsh/setpgid.html , it's Derived 
from the POSIX.1-1988 standard.
Also, according to buildbots' configure logs, it's available everywhere.

--
keywords: +patch
Added file: http://bugs.python.org/file22124/ss_wait_group.diff

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12184
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12006] strptime should implement %V or %u directive from libc

2011-05-26 Thread Erik Cederstrand

Erik Cederstrand e...@1calendar.dk added the comment:

Uploaded patch adding unit tests for %V and %u. Patch is against python2.7

--
Added file: http://bugs.python.org/file22125/test_strptime.py.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12006
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12006] strptime should implement %V or %u directive from libc

2011-05-26 Thread Erik Cederstrand

Erik Cederstrand e...@1calendar.dk added the comment:

Patch by aganders3 doesn't compile. Added comments in review of his patch. 
Adding a patch against python2.7 with my changes, which pass all unit tests 
posted previously.

--
Added file: http://bugs.python.org/file22126/_strptime.py.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12006
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



  1   2   >