pytest-xdist-1.10 released (distributed testing plugin)

2014-01-30 Thread holger krekel
Hi all,

also released pytest-xdist-1.11 with some little improvements 
and speedups regarding overheads for distributing tests
(maybe 10%, not too much).

Install it with:

pip install -U pytest-xdist

and checkout the pypi page:

https://pypi.python.org/pypi/pytest-xdist

best,
holger

1.10
-

- add glob support for rsyncignores, add command line option to pass
  additional rsyncignores. Thanks Anatoly Bubenkov.

- fix pytest issue382 - produce pytest_runtest_logstart event again
  in master. Thanks Aron Curzon.

- fix pytest issue419 by sending/receiving indices into the test
  collection instead of node ids (which are not neccessarily unique
  for functions parametrized with duplicate values)

- send multiple to test indices in one network message to a slave
  and improve heuristics for sending chunks where the chunksize
  depends on the number of remaining tests rather than fixed numbers.
  This reduces the number of master - node messages (but not the
  reverse direction)


-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


tox-1.7.0: many bug fixes and little improvements

2014-01-30 Thread holger krekel

Just released tox-1.7.0 (finally), the generic virtualenv-based test runner
for Python.  It contains a lot of fixes and improvements although there 
are some bugs remaining.  While a lot of pull requests are thankfully offered
i could use some more co-maintaining/reviewing to allow for some 
faster progress.

Anyway, to install to 1.7.0 :

pip install -U tox


and to look at the docs:

https://testrun.org/tox/latest/

have fun,
holger

1.7.0
-

- don't lookup pip-script anymore but rather just pip on windows 
  as this is a pip implementation detail and changed with pip-1.5.  
  It might mean that tox-1.7 is not able to install a different pip 
  version into a virtualenv anymore.

- drop Python2.5 compatibility because it became too hard due
  to the setuptools-2.0 dropping support.  tox now has no 
  support for creating python2.5 based environments anymore
  and all internal special-handling has been removed.

- merged PR81: new option --force-dep which allows to 
  override tox.ini specified dependencies in setuptools-style.
  For example --force-dep 'django1.6' will make sure
  that any environment using django as a dependency will 
  get the latest 1.5 release.  Thanks Bruno Oliveria for 
  the complete PR.
  
- merged PR125: tox now sets PYTHONHASHSEED to a random value
  and offers a --hashseed option to repeat a test run with a specific seed.
  You can also use --hashsheed=notset to instruct tox to leave the value
  alone.  Thanks Chris Jerdonek for all the work behind this.

- fix issue132: removing zip_safe setting (so it defaults to false)
  to allow installation of tox
  via easy_install/eggs.  Thanks Jenisys.

- fix issue126: depend on virtualenv=1.11.2 so that we can rely
  (hopefully) on a pip version which supports --pre. (tox by default
  uses to --pre).  also merged in PR84 so that we now call virtualenv
  directly instead of looking up interpreters.  Thanks Ionel Maries Cristian.
  This also fixes issue140.

- fix issue130: you can now set install_command=easy_install {opts} {packages}
  and expect it to work for repeated tox runs (previously it only worked
  when always recreating).  Thanks jenisys for precise reporting. 

- fix issue129: tox now uses Popen(..., universal_newlines=True) to force 
  creation of unicode stdout/stderr streams.  fixes a problem on specific
  platform configs when creating virtualenvs with Python3.3. Thanks
  Jorgen Schäfer or investigation and solution sketch.

- fix issue128: enable full substitution in install_command,
  thanks for the PR to Ronald Evers

- rework and simplify commands parsing and in particular posargs
  substitutions to avoid various win32/posix related quoting issues.

- make sure that the --installpkg option trumps any usedevelop settings
  in tox.ini or

- introduce --no-network to tox's own test suite to skip tests
  requiring networks

- introduce --sitepackages to force sitepackages=True in all
  environments.   

- fix issue105 -- don't depend on an existing HOME directory from tox tests.

-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


pytest-2.5.2: fixes, plugin index, contribution guide

2014-01-30 Thread holger krekel
pytest-2.5.2: fixes, plugin page, contribution guide
===

pytest is a mature Python testing tool with more than a 1000 tests 
against itself, passing on many different interpreters and platforms.  

The 2.5.2 release fixes a few bugs with two maybe-bugs remaining and
actively being worked on (and waiting for the bug reporter's input).
We also have a new contribution guide thanks to Piotr Banaszkiewicz
and an improved 3rd party plugin overview (including py2/py3 tests)
page thanks to Bruno Oliveira.

See docs at:

http://pytest.org

As usual, you can upgrade from pypi via::

pip install -U pytest

Thanks to the following people who contributed to this release:

Anatoly Bubenkov 
Ronny Pfannschmidt
Floris Bruynooghe
Bruno Oliveira 
Andreas Pelme 
Jurko Gospodnetić
Piotr Banaszkiewicz 
Simon Liedtke 
lakka 
Lukasz Balcerzak 
Philippe Muller 
Daniel Hahler 

have fun,
holger krekel

2.5.2
---

- fix issue409 -- better interoperate with cx_freeze by not
  trying to import from collections.abc which causes problems 
  for py27/cx_freeze.  Thanks Wolfgang L. for reporting and tracking it down.

- fixed docs and code to use pytest instead of py.test almost everywhere.
  Thanks Jurko Gospodnetic for the complete PR.  

- fix issue425: mention at end of py.test -h that --markers
  and --fixtures work according to specified test path (or current dir)

- fix issue413: exceptions with unicode attributes are now printed
  correctly also on python2 and with pytest-xdist runs. (the fix
  requires py-1.4.20)

- copy, cleanup and integrate py.io capture
  from pylib 1.4.20.dev2 (rev 13d9af95547e)
  
- address issue416: clarify docs as to conftest.py loading semantics

- fix issue429: comparing byte strings with non-ascii chars in assert
  expressions now work better.  Thanks Floris Bruynooghe.

- make capfd/capsys.capture private, its unused and shouldnt be exposed

-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


execnet-1.2 released: gevent/eventlet support, many improvements

2014-01-30 Thread holger krekel
Hi all,

just released execnet-1.2, the tool for writing distributed zero-install
python programs.  The release contains lots of improvements and fixes.  
Most notably execnet now supports to use gevent/eventlet models on each of
the initiating side and the remote side (configurable separately).
See the changelog below for details.

Install it via:

pip install -U execnet

Read the docs here:

http://codespeak.net/execnet/

have fun playing,
holger


1.2


- fix issue22 -- during interpreter shutdown don't throw
  an exception when we can't send a termination sequence
  anymore as we are about to die anyway.

- fix issue24 -- allow concurrent creation of gateways
  by guarding automatic id creation by a look.
  Thanks tlecomte.

- majorly refactor internal thread and IO handling.
  execnet can now operate on different thread models,
  defaults to thread but allows for eventlet and
  gevent if it is installed.

- gateway.remote_exec() will now execute in multiple
  threads on the other side by default.  The previous
  neccessity of running gateway.remote_init_threads()
  to allow for such concurrency is gone.  The latter
  method is now a no-op and will be removed in future
  versions of execnet.

- fix issue20: prevent AttributError at interpreter shutdown
  by not trying to send close/last_message messages if the
  world around is half destroyed.

- fix issue21: allow to create local gateways with sudo aka
  makegateway(popen//python=sudo python).
  Thanks Alfredo Deza for the PR. 

- streamline gateway termination and simplify proxy
  implementation. add more internal tracing.

- if execution hangs in computation, we now try to 
  send a SIGINT to ourselves on Unix platforms
  instead of just calling thread.interrupt_main()
  
- change license from GPL to MIT

- introduce execnet.dump/load variants of dumps/loads
  serializing/unserializing mechanism.

- improve channel.receive() communication latency on python2
  by changing the default timeout of the underlying Queue.get
  to a regular None instead of the previous default -1 
  which caused an internal positive timeout value
  (a hack probably introduced to allow CTRL-C to pass
  through for python2.5 versions).

- extended ssh-syntax to allow passing of command line args, 
  e.g.  ssh= -p 50 hostname. The options are passed to 
  the underlying ssh client binary.  Thanks tundish.

- fix issue15: interoperability with inspect.getstack().
  Thanks Peter Feiner.

- fix issue10 : skip PYTHONDONTWRITEBYTECODE test if 
  it we are running with PYTHONDONTWRITEBYTECODE set.

- dont try the jython pid fixup on a RemoteIO

- avoid accidentally setting exc_info() in gateway_base.py
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


A day of free Python Django talks tutorials, Cardiff (UK)

2014-01-30 Thread D.M. Procida
Django Weekend Cardiff https://djangoweekend.org/ is completely sold
out.

Our open day remains open however, and you're invited to attend the
numerous talks, tutorials and demonstrations in the programme. They'll
all be held at Cardiff University.

https://djangoweekend.org/tutorials-demonstrations/

There are fifteen different sessions in the open day programme, on all
kinds of subjects - from medicine to robotics - and at various levels of
technical complexity.

One of the key audiences for the open day is developers who want to
learn more about Python and Django  so if that's you, you're especially
welcome.

Another key audience is A-level science pupils and teachers, and we have
a number of talks that have been devised with them in mind - so if you
know any, please point them in our direction, as we'll be very pleased
to see them.

All the sessions are free, and refreshments will be provided.

Registration is required so we know how many people to expect, and
places in the tutorials will be limited.

The sooner you register the better it is for us, because we have to plan
catering, access and other practicalities - so please do it as soon as
you can!

Register: https://djangoweekend-open-day.eventbrite.co.uk

And finally, do pass on details of the open day to anyone else whom you
think might be interested.

Thanks,

Daniele
-- 
Django Weekend Cardiff, the first-ever Django conference in the UK
Three days of Django/Python talks, tutorials and code sprints

https://djangoweekend.org/
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


Re: pytz question: GMT vs. UTC

2014-01-30 Thread wxjmfauth
Le jeudi 30 janvier 2014 04:27:54 UTC+1, Chris Angelico a écrit :
 On Thu, Jan 30, 2014 at 1:40 PM, MRAB pyt...@mrabarnett.plus.com wrote:
 
  How cruel... I suspect the smack at 0degC is much more painful
 
  than one
 
  at room temperature G
 
 
 
  It's the 21st century; you should be making use of Unicode: 0°C.
 
 
 
 I started to read that and thought you were going to advocate the use of 
 0°K...
 
 

==

The temperature unit is the Kelvin, not the Degree Kelvin.
One writes: 0 K, 275.15 K

It can also be the Degree Celsius, not the Celsius.
One writes: -273.15 °C, 0 °C



 import unicodedata as ud
 for c in '\u2109\u212a\u2103\u00b0':
... print(ud.name(c))
... 
DEGREE FAHRENHEIT
KELVIN SIGN
DEGREE CELSIUS
DEGREE SIGN


jmf

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


Re: Python shell wont open IDLE or an exisiting .py files

2014-01-30 Thread Terry Reedy

On 1/29/2014 11:16 PM, Ben Finney wrote:

Terry Reedy tjre...@udel.edu writes:


On 1/29/2014 6:26 PM, shangonich...@sbcglobal.net wrote:

   If I launch the Python GUI it opens a Python Shell fine. But as
   soon as I try to open a file (including a new file), it closes
   the Shell.


This I do not. What is 'Python GUI'? What is 'Python Shell'?


Those are (part of) the names of menu entries created by the Python
installer for MS Windows. I am not sure exactly what programs they
invoke.


One entry is 'IDLE (Python GUI)'. I have never seen Idle referred to as 
'Python GUI' as the later is non-specific and could refer to wxpython or 
pyqt or some other Python GUI.


Idle open a window called Python x.y.z Shell (until recently just Shell).

The other menu entry is 'Python (Command line)' and I am guessing that 
the paragraph above has nothing to do with this entry.


--
Terry Jan Reedy

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


Re: buggy python interpretter or am I missing something here?

2014-01-30 Thread Terry Reedy

On 1/30/2014 12:13 AM, Gregory Ewing wrote:

Steven D'Aprano wrote:

On Mon, 27 Jan 2014 12:22:22 -0800, Rick Johnson wrote:


Why do we even need an input function anyway if all it is going to do
is read from stdin?


That's not all it does.


What else it does is print a prompt before reading and to strip off the 
trailing newline.



For example, it handles backspacing, so that typing H E L O O
BACKSPACE BACKSPACE L O gives HELLO rather than HELOO\x7f\x7fO.


No, it doesn't -- that's handled at a lower level.
Any other method of reading from stdin, as long
as it hasn't been redirected away from the console,
has the same behaviour.

I typed some backspaces in the input to each of the
following experiments, and they didn't end up in the
data:

  import sys
  x = sys.stdin.readline()
HELLO
  x
'HELLO\n'
  import os
  f = os.fdopen(0)
  y = f.readline()
adsxx
  y
'adsxx\n'

So input() really is a pure convenience function.
(That doesn't mean it's not worth having, though!)


It is equivalent to

def input(prompt):
  sys.stdout.write(prompt)
  return sys.stdin.read(one line)[:-1]

There was once an eval around the return, but that was determined to be 
a bad idea.


--
Terry Jan Reedy

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


Re: pytz question: GMT vs. UTC

2014-01-30 Thread Christian Heimes
On 30.01.2014 04:27, Chris Angelico wrote:
 On Thu, Jan 30, 2014 at 1:40 PM, MRAB pyt...@mrabarnett.plus.com wrote:
 How cruel... I suspect the smack at 0degC is much more painful
 than one
 at room temperature G

 It's the 21st century; you should be making use of Unicode: 0°C.
 
 I started to read that and thought you were going to advocate the use of 
 0°K...

It's 0 K. The SI-unit 'Kelvin' has no degree (although Lord Kelvin was a
professor). *g*


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


Re: pytz question: GMT vs. UTC

2014-01-30 Thread Chris Angelico
On Thu, Jan 30, 2014 at 8:49 PM, Christian Heimes christ...@python.org wrote:
 On 30.01.2014 04:27, Chris Angelico wrote:
 On Thu, Jan 30, 2014 at 1:40 PM, MRAB pyt...@mrabarnett.plus.com wrote:
 How cruel... I suspect the smack at 0degC is much more painful
 than one
 at room temperature G

 It's the 21st century; you should be making use of Unicode: 0°C.

 I started to read that and thought you were going to advocate the use of 
 0°K...

 It's 0 K. The SI-unit 'Kelvin' has no degree (although Lord Kelvin was a
 professor). *g*

That thing.  I knew that, honest I did. My brain's just not working
properly at the moment, something to do with consecutive hours awake.
But later on I'll be 0K.

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


Re: pytz question: GMT vs. UTC

2014-01-30 Thread wxjmfauth
Le jeudi 30 janvier 2014 10:49:11 UTC+1, Christian Heimes a écrit :
 On 30.01.2014 04:27, Chris Angelico wrote:
 
  On Thu, Jan 30, 2014 at 1:40 PM, MRAB pyt...@mrabarnett.plus.com wrote:
 
  How cruel... I suspect the smack at 0degC is much more painful
 
  than one
 
  at room temperature G
 
 
 
  It's the 21st century; you should be making use of Unicode: 0°C.
 
  
 
  I started to read that and thought you were going to advocate the use of 
  0°K...
 
 
 
 It's 0 K. The SI-unit 'Kelvin' has no degree (although Lord Kelvin was a
 
 professor). *g*


Glad, that you read (received?) my previous post!

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


Work on Call for Participation for EuroPython 2015 has started

2014-01-30 Thread M.-A. Lemburg
[Please help spread the word by forwarding to other relevant mailing lists,
 user groups, etc.; thanks :-)]

The EuroPython Society (EPS) has started work on preparing the
Call for Participation (CFP) for organizing the EuroPython 2015
conference:

http://www.europython-society.org/

For 2015, we are setting up a new structure for the conference
organization, which is focused on local and distributed work groups
that are closely integrated with the EuroPython Society.

We hope to greatly reduce the work load for the local teams, attract
community members that want to get involved and to streamline the
whole process of transitioning from one location to the next, making
the conference organization a lot easier for everyone.

If you are interested in potentially signing up as local team or
participating in the work groups, please subscribe to one of
our communication channels:

 * Tumblr
   http://www.tumblr.com/follow/europythonsociety

 * RSS
   http://www.europython-society.org/rss

 * Twitter
   https://twitter.com/europythons

 * EuroPython Mailing List
   https://mail.python.org/mailman/listinfo/europython

We are aiming for end of February as announcement date for the CFP 2015.

Enjoy,
-- 
Marc-Andre Lemburg
Director
EuroPython Society
http://www.europython-society.org/
-- 
https://mail.python.org/mailman/listinfo/python-list


fseek In Compressed Files

2014-01-30 Thread Ayushi Dalmia
Hello,

I need to randomly access a bzip2 or gzip file. How can I set the offset for a 
line and later retreive the line from the file using the offset. Pointers in 
this direction will help.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: fseek In Compressed Files

2014-01-30 Thread Peter Otten
Ayushi Dalmia wrote:

 I need to randomly access a bzip2 or gzip file. How can I set the offset
 for a line and later retreive the line from the file using the offset.
 Pointers in this direction will help.

with gzip.open(filename) as f:
f.seek(some_pos)
print(f.readline())
f.seek(some_pos)
print(f.readline())

seems to work as expected. Can you tell a bit more about your usecase (if it 
isn't covered by that basic example)?

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


1 0 == True - False

2014-01-30 Thread Thibault Langlois
Hello,

$ python
Python 2.7.4 (default, Sep 26 2013, 03:20:26) 
[GCC 4.7.3] on linux2
Type help, copyright, credits or license for more information.
 1  0 == True
False
 (1  0) == True
True
 1  (0 == True)
True


What am I missing here ?

T.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Thomas Mlynarczyk

Thibault Langlois schrieb:

1  0 == True

False
What am I missing here ?


This, perhaps:
http://www.primozic.net/nl/chaining-comparison-operators-in-python/

Greetings,
Thomas

--
Ce n'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!
(Coluche)
--
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Jussi Piitulainen
Thibault Langlois writes:

 Hello,
 
 $ python
 Python 2.7.4 (default, Sep 26 2013, 03:20:26) 
 [GCC 4.7.3] on linux2
 Type help, copyright, credits or license for more information.
  1  0 == True
 False
  (1  0) == True
 True
  1  (0 == True)
 True
 
 
 What am I missing here ?

One or both of the following:

0 == True
   False
True and False
   False
1  0
   True

Or the fact that (1  0 == True) means ((1  0) and (0 == True)),
where each expression in such a chain is evaluated once, though in
this case it really does not matter since 0 is a literal.

Hm, I don't know if the evaluation short-circuits. I think not, but
I've never needed to know, and I don't need to know now.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: pytz question: GMT vs. UTC

2014-01-30 Thread MRAB

On 2014-01-30 08:45, wxjmfa...@gmail.com wrote:

Le jeudi 30 janvier 2014 04:27:54 UTC+1, Chris Angelico a écrit :

On Thu, Jan 30, 2014 at 1:40 PM, MRAB pyt...@mrabarnett.plus.com wrote:

 How cruel... I suspect the smack at 0degC is much more painful

 than one

 at room temperature G



 It's the 21st century; you should be making use of Unicode: 0°C.



I started to read that and thought you were going to advocate the use of 0°K...




==

The temperature unit is the Kelvin, not the Degree Kelvin.
One writes: 0 K, 275.15 K


Not that long ago I saw a science fiction film in which one of the
scientists said degrees Kelvin. The rest of the science was
somewhat dubious too...


It can also be the Degree Celsius, not the Celsius.
One writes: -273.15 °C, 0 °C




import unicodedata as ud
for c in '\u2109\u212a\u2103\u00b0':

... print(ud.name(c))
...
DEGREE FAHRENHEIT
KELVIN SIGN
DEGREE CELSIUS
DEGREE SIGN






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


Re:fseek In Compressed Files

2014-01-30 Thread Dave Angel
 Ayushi Dalmia ayushidalmia2...@gmail.com Wrote in message:
 Hello,
 
 I need to randomly access a bzip2 or gzip file. How can I set the offset for 
 a line and later retreive the line from the file using the offset. Pointers 
 in this direction will help.
 

Start with the zlib module. Note that it doesn't handle all
 possible compression types, like compress and pack.
 

I don't imagine that seeking to a line in a compressed text file
 would be any easier than a non compressed one. Try using
 gzip.open in a text mode to get a handle,  then loop through it
 line by line.  If you save all the offsets in a list,  you
 should
subsequently be able to seek to a remembered offset. But
 realize it'll be horribly slow,  compared to a non compressed
 one. 

Consider using readlines and referencing the lines from there.  Or
 building a temp file if too big for ram.

If this is not enough,  tell us your Python version and your os, 
 and show what you've tried and what went wrong. 

-- 
DaveA

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


Re:Try-except-finally paradox

2014-01-30 Thread Dave Angel
 Jessica Ross deathwea...@gmail.com Wrote in message:
 I found something like this in a StackOverflow discussion.
 def paradox():
 ... try:
 ... raise Exception(Exception raised during try)
 ... except:
 ... print Except after try
 ... return True
 ... finally:
 ... print Finally
 ... return False
 ... return None
 ... 
 return_val = paradox()
 Except after try
 Finally
 return_val
 False
 
 I understand most of this.
 What I don't understand is why this returns False rather than True. Does the 
 finally short-circuit the return in the except block?
 

The finally has to happen before any return inside the try or the
 except.  And once you're in the finally clause you'll finish it
 before resuming the except clause.  Since it has a return,  that
 will happen before the other returns. The one in the except block
 will never get reached. 

It's the only reasonable behavior., to my mind. 

-- 
DaveA

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


Re: 1 0 == True - False

2014-01-30 Thread Peter Otten
Jussi Piitulainen wrote:

 Thibault Langlois writes:
 
 Hello,
 
 $ python
 Python 2.7.4 (default, Sep 26 2013, 03:20:26)
 [GCC 4.7.3] on linux2
 Type help, copyright, credits or license for more information.
  1  0 == True
 False
  (1  0) == True
 True
  1  (0 == True)
 True
 
 
 What am I missing here ?
 
 One or both of the following:
 
 0 == True
False
 True and False
False
 1  0
True
 
 Or the fact that (1  0 == True) means ((1  0) and (0 == True)),
 where each expression in such a chain is evaluated once, though in
 this case it really does not matter since 0 is a literal.
 
 Hm, I don't know if the evaluation short-circuits. I think not, but
 I've never needed to know, and I don't need to know now.

It is easy to check though:

 def zero():
... print(zero)
... return 0
... 
 def one():
... print(one)
... return 1
... 
 def true():
... print(true)
... return True
... 
 one()  zero() == true()
one
zero
true
False
 zero()  one() == true()
zero
one
False

So yes, evaluation does short-curcuit.


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


Re: 1 0 == True - False

2014-01-30 Thread Jussi Piitulainen
Peter Otten writes:

 Jussi Piitulainen wrote:
 
  Thibault Langlois writes:
  
  Hello,
  
  $ python
  Python 2.7.4 (default, Sep 26 2013, 03:20:26)
  [GCC 4.7.3] on linux2
  Type help, copyright, credits or license for more information.
   1  0 == True
  False
   (1  0) == True
  True
   1  (0 == True)
  True
  
  
  What am I missing here ?
  
  One or both of the following:
  
  0 == True
 False
  True and False
 False
  1  0
 True
  
  Or the fact that (1  0 == True) means ((1  0) and (0 == True)),
  where each expression in such a chain is evaluated once, though in
  this case it really does not matter since 0 is a literal.
  
  Hm, I don't know if the evaluation short-circuits. I think not, but
  I've never needed to know, and I don't need to know now.
 
 It is easy to check though:
 
  def zero():
 ... print(zero)
 ... return 0
 ... 
  def one():
 ... print(one)
 ... return 1
 ... 
  def true():
 ... print(true)
 ... return True
 ... 
  one()  zero() == true()
 one
 zero
 true
 False
  zero()  one() == true()
 zero
 one
 False
 
 So yes, evaluation does short-curcuit.

Now I'm experiencing a mild form of information overload. Thanks
anyway :) My guess was wrong.

Now that I think of it, I've implemented a parser and evaluator once
with this kind of chaining, and it may well have short-circuited.
-- 
https://mail.python.org/mailman/listinfo/python-list


Add directory to sys.path based on variable

2014-01-30 Thread loial
I want to add a path to sys.path based upon a variable

Can I do that?

Hardcodeing the path works fine, but I want to set it based upon a variable.

I know I can set PYTHONPATH, but just wondering if I can add a directory on the 
fly to sys.path using a variable





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


Re: Add directory to sys.path based on variable

2014-01-30 Thread Tim Golden
On 30/01/2014 12:39, loial wrote:
 I want to add a path to sys.path based upon a variable
 
 Can I do that?
 
 Hardcodeing the path works fine, but I want to set it based upon a
 variable.
 
 I know I can set PYTHONPATH, but just wondering if I can add a
 directory on the fly to sys.path using a variable

Certainly:

code
import sys

newpath = c:/users/tim/modules
sys.path.append(newpath)

/code


TJG
-- 
https://mail.python.org/mailman/listinfo/python-list


Re:1 0 == True - False

2014-01-30 Thread Dave Angel
 Thibault Langlois thibault.langl...@gmail.com Wrote in message:
 Hello,
 
 $ python
 Python 2.7.4 (default, Sep 26 2013, 03:20:26) 
 [GCC 4.7.3] on linux2
 Type help, copyright, credits or license for more information.
 1  0 == True
 False
 (1  0) == True
 True
 1  (0 == True)
 True

 
 What am I missing here ?
 
 T.
 

You tell us. You supply only half the question,  what it does,
 without saying what you expected or needed. 

I expect you're either confused about comparison chaining or about
 what happens when you compare objects of different types.
 

Doing an ordered comparison between two types is undefined by
 default, and not guaranteed to even give the same result between
 builds.  So the following may give different results on your
 2.7.4 than on mine.
5  abc

Python 3 fixes that by throwing an exception.  TypeError:
 unorderable types

This should solve it, since the first and third expression would
 seem to be undefined. Unfortunately there's yet another wrinkle.
 

For hysterical reasons,  True and False are instances of class
 bool, which is derived from int. So for comparison purposes
 False==0 and True==1. But in my opinion,  you should never take
 advantage of this, except when entering obfuscation
 contests.


-- 
DaveA

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


Re: Try-except-finally paradox

2014-01-30 Thread Chris Angelico
On Thu, Jan 30, 2014 at 11:05 PM, Dave Angel da...@davea.name wrote:
 The finally has to happen before any return inside the try or the
  except.  And once you're in the finally clause you'll finish it
  before resuming the except clause.  Since it has a return,  that
  will happen before the other returns. The one in the except block
  will never get reached.

 It's the only reasonable behavior., to my mind.

It's arguable that putting a return inside a finally is unreasonable
behaviour, but that's up to the programmer. A finally clause can be
used to do what might be done in C++ with a destructor: no matter how
this function/block exits, do this as you unwind the stack. In C++, I
might open a file like this:

void func()
{
ofstream output(output.txt);
// do a whole lot of stuff ...
// at the close brace, output.~output() will be called, which will
close the file
}

In Python, the equivalent would be:

def func():
try:
output = open(output.txt, w)
# do a whole lot of stuff ...
finally:
output.close()

(Actually, the Python equivalent would be to use a 'with' clause for
brevity, but 'with' uses try/finally under the covers, so it comes to
the same thing.) The concept of the finally clause is: Whether
execution runs off the end, hits a return statement, or throws an
exception, I need you do this before anything else happens. Having a
return statement inside 'finally' as well as in 'try' is a bit of a
corner case, since you're now saying Before you finish this function
and return something, I need you to return something else, which
doesn't usually make sense. If you think Python's behaviour is
confusing, first figure out what you would expect to happen in this
situation :)

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


Re: Try-except-finally paradox

2014-01-30 Thread MRAB

On 2014-01-30 13:02, Chris Angelico wrote:

On Thu, Jan 30, 2014 at 11:05 PM, Dave Angel da...@davea.name wrote:

The finally has to happen before any return inside the try or the
 except.  And once you're in the finally clause you'll finish it
 before resuming the except clause.  Since it has a return,  that
 will happen before the other returns. The one in the except block
 will never get reached.

It's the only reasonable behavior., to my mind.


It's arguable that putting a return inside a finally is unreasonable
behaviour, but that's up to the programmer. A finally clause can be
used to do what might be done in C++ with a destructor: no matter how
this function/block exits, do this as you unwind the stack. In C++, I
might open a file like this:

void func()
{
 ofstream output(output.txt);
 // do a whole lot of stuff ...
 // at the close brace, output.~output() will be called, which will
close the file
}

In Python, the equivalent would be:

def func():
 try:
 output = open(output.txt, w)
 # do a whole lot of stuff ...
 finally:
 output.close()

(Actually, the Python equivalent would be to use a 'with' clause for
brevity, but 'with' uses try/finally under the covers, so it comes to
the same thing.) The concept of the finally clause is: Whether
execution runs off the end, hits a return statement, or throws an
exception, I need you do this before anything else happens. Having a
return statement inside 'finally' as well as in 'try' is a bit of a
corner case, since you're now saying Before you finish this function
and return something, I need you to return something else, which
doesn't usually make sense. If you think Python's behaviour is
confusing, first figure out what you would expect to happen in this
situation :)


One of the reasons that the 'with' statement was added was to prevent
the mistake that you've just done. ;-)

What if the file can't be opened?

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


Re: Try-except-finally paradox

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 12:11 AM, MRAB pyt...@mrabarnett.plus.com wrote:
 One of the reasons that the 'with' statement was added was to prevent
 the mistake that you've just done. ;-)

 What if the file can't be opened?

Yeah, whoops. The open shouldn't be inside try/finally.

def func():
output = open(output.txt, w)
try:
 # do a whole lot of stuff ...
finally:
 output.close()

But my point still stands, I believe :)

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


end quote help for a newbie

2014-01-30 Thread Peter Clark
There is probably an easy solution to this – but I have not found it.

Trying to terminate a literal in a print statement (from the 
tutorial).

The literal should be enclosed in double quotes “ “

the initial double quote seems to be OK (if I use a different character it 
flags it) but the ending is flagged as invalid syntax.  I have tried changing 
my 
keyboard from UK to USA, without any effect, and tried adding a space after the 
final double quote,

thanks for any assistance,

peter
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: fseek In Compressed Files

2014-01-30 Thread Ayushi Dalmia
On Thursday, January 30, 2014 4:20:26 PM UTC+5:30, Ayushi Dalmia wrote:
 Hello,
 
 
 
 I need to randomly access a bzip2 or gzip file. How can I set the offset for 
 a line and later retreive the line from the file using the offset. Pointers 
 in this direction will help.

This is what I have done:

import bz2
import sys
from random import randint

index={}

data=[]
f=open('temp.txt','r')
for line in f:
data.append(line)

filename='temp1.txt.bz2'
with bz2.BZ2File(filename, 'wb', compresslevel=9) as f:
f.writelines(data)

prevsize=0
list1=[]
offset={}
with bz2.BZ2File(filename, 'rb') as f:
for line in f:
words=line.strip().split(' ')
list1.append(words[0])
offset[words[0]]= prevsize
prevsize = sys.getsizeof(line)+prevsize


data=[]
count=0

with bz2.BZ2File(filename, 'rb') as f:
while count20:
y=randint(1,25)
print y
print offset[str(y)]
count+=1
f.seek(int(offset[str(y)]))
x= f.readline()
data.append(x)

f=open('b.txt','w')
f.write(''.join(data))
f.close()

where temp.txt is the posting list file which is first written in a compressed 
format and then read  later. I am trying to build the index for the entire 
wikipedia dump which needs to be done in a space and time optimised way. The 
temp.txt is as follows:

1 456 t0b3c0i0e0:784 t0b2c0i0e0:801 t0b2c0i0e0
2 221 t0b1c0i0e0:774 t0b1c0i0e0:801 t0b2c0i0e0
3 455 t0b7c0i0e0:456 t0b1c0i0e0:459 t0b2c0i0e0:669 t0b10c11i3e0:673 
t0b1c0i0e0:678 t0b2c0i1e0:854 t0b1c0i0e0
4 410 t0b4c0i0e0:553 t0b1c0i0e0:609 t0b1c0i0e0
5 90 t0b1c0i0e0
6 727 t0b2c0i0e0
7 431 t0b2c0i1e0
8 532 t0b1c0i0e0:652 t0b1c0i0e0:727 t0b2c0i0e0
9 378 t0b1c0i0e0
10 666 t0b2c0i0e0
11 405 t0b1c0i0e0
12 702 t0b1c0i0e0
13 755 t0b1c0i0e0
14 781 t0b1c0i0e0
15 593 t0b1c0i0e0
16 725 t0b1c0i0e0
17 989 t0b2c0i1e0
18 221 t0b1c0i0e0:402 t0b1c0i0e0:842 t0b1c0i0e0
19 405 t0b1c0i0e0
20 200 t0b1c0i0e0:300 t0b1c0i0e0:398 t0b1c0i0e0:649 t0b1c0i0e0
21 66 t0b1c0i0e0
22 30 t0b1c0i0e0
23 126 t0b1c0i0e0:895 t0b1c0i0e0
24 355 t0b1c0i0e0:374 t0b1c0i0e0:378 t0b1c0i0e0:431 t0b3c0i0e0:482 
t0b1c0i0e0:546 t0b3c0i0e0:578 t0b1c0i0e0
25 198 t0b1c0i0e0
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: end quote help for a newbie

2014-01-30 Thread Skip Montanaro
Not sure if this is exactly what you're asking, but perhaps you want triple
quotes?

 print now is the time for all good men ...
now is the time for all good men ...
 print '''now is the time for all good men ...'''
now is the time for all good men ...

It's not easy to visually distinguish two apostrophes from a double quote
in all fonts, so I've explicitly written this using rich text and
highlighted the Python session snippet in Courier.

Skip
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: end quote help for a newbie

2014-01-30 Thread MRAB

On 2014-01-30 13:26, Peter Clark wrote:

There is probably an easy solution to this – but I have not found it.
Trying to terminate a literal in a print statement (from the tutorial).
The literal should be enclosed in double quotes “ “
the initial double quote seems to be OK (if I use a different character
it flags it) but the ending is flagged as invalid syntax.  I have tried
changing my keyboard from UK to USA, without any effect, and tried
adding a space after the final double quote,


What are you trying to put between the quotes?
--
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Thibault Langlois
On Thursday, January 30, 2014 12:49:19 PM UTC, Dave Angel wrote:
 Thibault Langlois thibault.langl...@gmail.com Wrote in message:
 
  Hello,
 
  
 
  $ python
 
  Python 2.7.4 (default, Sep 26 2013, 03:20:26) 
 
  [GCC 4.7.3] on linux2
 
  Type help, copyright, credits or license for more information.
 
  1  0 == True
 
  False
 
  (1  0) == True
 
  True
 
  1  (0 == True)
 
  True
 
 
 
  
 
  What am I missing here ?
 
  
 
  T.
 
  
 
 
 
 You tell us. You supply only half the question,  what it does,
 
  without saying what you expected or needed. 
 
 
 
 I expect you're either confused about comparison chaining or about
 
  what happens when you compare objects of different types.
 
  
 
 
 
 Doing an ordered comparison between two types is undefined by
 
  default, and not guaranteed to even give the same result between
 
  builds.  So the following may give different results on your
 
  2.7.4 than on mine.
 
 5  abc
 
 
 
 Python 3 fixes that by throwing an exception.  TypeError:
 
  unorderable types
 
 
 
 This should solve it, since the first and third expression would
 
  seem to be undefined. Unfortunately there's yet another wrinkle.
 
  
 
 
 
 For hysterical reasons,  True and False are instances of class
 
  bool, which is derived from int. So for comparison purposes
 
  False==0 and True==1. But in my opinion,  you should never take
 
  advantage of this, except when entering obfuscation
 
  contests.
 
 
 
 
 
 -- 
 
 DaveA

You are right. I should have given some context.
I am looking at this from the perspective of the teacher that has to explain 
idiosyncrasies of the language to inexperienced students.
There are two aspects in this example. 
1. the equivalence of True/False with integers 1/0 which have pro and cons.
2. the chaining rules of operators. I agree that it may make sense in some 
cases like x  y  z but when operators are mixed it leads to counter intuitive 
cases as the one I pointed out.

The recommendations to student are 1) do not assume True == 1 and do not use 
operator chaining.


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


Convert NTP timestamp from NTP packet to System time and date format

2014-01-30 Thread Sadia Bashir
Hello everyone;

I want to write NTP client which sends and receives NTP packet to NTP
server and should read the value from one of the four offsets and convert
it to user readable local or GMT time format, I specifically want to know
which offsets should I read in order to get correct timestamp from the
packet.
Any suggestion or help will be appreciated.

-- 
*Sadia*
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: fseek In Compressed Files

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 12:34 AM, Ayushi Dalmia
ayushidalmia2...@gmail.com wrote:
 where temp.txt is the posting list file which is first written in a 
 compressed format and then read  later.

Unless you specify otherwise, a compressed file is likely to have
sub-byte boundaries. It might not be possible to seek to a specific
line.

What you could do, though, is explicitly compress each line, then
write out separately-compressed blocks. You can then seek to any one
that you want, read it, and decompress it. But at this point, you're
probably going to do better with a database; PostgreSQL, for instance,
will automatically compress any content that it believes it's
worthwhile to compress (as long as it's in a VARCHAR field or similar
and the table hasn't been configured to prevent that, yada yada). All
you have to do is tell Postgres to store this, retrieve that, and
it'll worry about the details of compression and decompression. As an
added benefit, you can divide the text up and let it do the hard work
of indexing, filtering, sorting, etc. I suspect you'll find that
deploying a database is a much more efficient use of your development
time than recreating all of that.

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


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 12:40 AM, Thibault Langlois
thibault.langl...@gmail.com wrote:
 The recommendations to student are 1) do not assume True == 1 and do not use 
 operator chaining.

Not do not use, but do not misuse. Python's operator chaining is
awesome for bounds checking:

if 3  x  20:
  print(x is between 3 and 20, exclusive)

You can even, since it short-circuits, do crazy stuff like:

x = random.randrange(30)
if int(input(Min: ))  x  int(input(Max: )):
print(It's within those bounds.)

It won't ask for a maximum if it's already failed to be within the
minimum. (Okay, don't do this one. Not good code. Heh.)

But don't use operator chaining when you don't mean it to behave that
way. That's all!

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


Re: Convert NTP timestamp from NTP packet to System time and date format

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 12:34 AM, Sadia Bashir
11msccssbas...@seecs.edu.pk wrote:
 Hello everyone;

 I want to write NTP client which sends and receives NTP packet to NTP server
 and should read the value from one of the four offsets and convert it to
 user readable local or GMT time format, I specifically want to know which
 offsets should I read in order to get correct timestamp from the packet.
 Any suggestion or help will be appreciated.


Any time you're looking at network protocols, the one obvious place to
look is the RFCs. Just do a web search for 'rfc ntp' to find the
relevant ones. In my case, the search results pulled up a couple of
good-looking hits from ietf.org (the Internet Engineering Task Force -
those guys are the authority on this sort of matter), plus the
Wikipedia article for NTP, with a section Relevant RFCs, which would
make good reading.

Enjoy! Networking's awesome fun.

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


Re: Add directory to sys.path based on variable

2014-01-30 Thread loial
Ok, that works fine with the apth hard coded, but I want to do something like 
the code below. i.e I am trying to dynamically add a path that is relative to 
the path of the current executing python script.

In this case the import fails.

import sys
import os
from os.path import *

scriptpath=os.path.dirname(sys.argv[0])
otherscriptspath=printerpath.replace(scripts,otherscripts)
sys.path.append(otherscriptspath)

from AuditUpdate import *



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


Re: 1 0 == True - False

2014-01-30 Thread Roy Smith
In article 3dcdc95d-5e30-46d3-b558-afedf9723...@googlegroups.com,
 Thibault Langlois thibault.langl...@gmail.com wrote:

 You are right. I should have given some context.
 I am looking at this from the perspective of the teacher that has to explain 
 idiosyncrasies of the language to inexperienced students.
 There are two aspects in this example. 
 1. the equivalence of True/False with integers 1/0 which have pro and cons.
 2. the chaining rules of operators. I agree that it may make sense in some 
 cases like x  y  z but when operators are mixed it leads to counter 
 intuitive cases as the one I pointed out.
 
 The recommendations to student are 1) do not assume True == 1 and do not use 
 operator chaining.

Better than that, do what I do.

1) Assume that you don't have the full operator precedence table 
memorized and just parenthesize everything.

2) In cases where the expression is so simple, you couldn't possibly be 
wrong, see rule #1.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Add directory to sys.path based on variable

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 1:03 AM, loial jldunn2...@gmail.com wrote:
 In this case the import fails.

 import sys
 import os
 from os.path import *

Not sure why you need that, since you're explicitly naming
os.path.dirname. The base import os shoul cover that for you.

 scriptpath=os.path.dirname(sys.argv[0])
 otherscriptspath=printerpath.replace(scripts,otherscripts)
 sys.path.append(otherscriptspath)

Try adding here:

print(sys.argv[0])
print(otherscriptspath)

See what they tell you. Is sys.argv[0] what you think it is? Is the
resulting path what you expect?

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


Re: Add directory to sys.path based on variable

2014-01-30 Thread Tim Golden
On 30/01/2014 14:03, loial wrote:
 Ok, that works fine with the apth hard coded, but I want to do something like 
 the code below. i.e I am trying to dynamically add a path that is relative to 
 the path of the current executing python script.
 
 In this case the import fails.
 
 import sys
 import os
 from os.path import *
 
 scriptpath=os.path.dirname(sys.argv[0])
 otherscriptspath=printerpath.replace(scripts,otherscripts)
 sys.path.append(otherscriptspath)
 
 from AuditUpdate import *

Well, adding a path to sys.path and then importing is generally
considered a safe bet. So it's more likely that somewhere inside your
path manipulation something's going wrong.

You've presumably not cut-and-pasted that code from the console (since
you've got an undefined printerparth on the 6th line). But why not
scatter some print()s and os.listdir()s around, eg:


import os, sys

print(sys.path)
print(sys.argv[0])

scriptpath=os.path.dirname(sys.argv[0])
print(scriptpath)

otherscriptpath = scriptpath.replace(xxx, yyy)
print(otherscriptpath)
print(os.listdir(otherscriptpath))

... and so on. Somewhere in there, I imagine something won't be as you
expect. Feel free to come back here if you need more help.

TJG
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: end quote help for a newbie

2014-01-30 Thread Zachary Ware
On Thu, Jan 30, 2014 at 7:26 AM, Peter Clark artomis...@yahoo.co.uk wrote:
 There is probably an easy solution to this – but I have not found it.

 Trying to terminate a literal in a print statement (from the tutorial).

 The literal should be enclosed in double quotes “ “

 the initial double quote seems to be OK (if I use a different character it
 flags it) but the ending is flagged as invalid syntax.  I have tried
 changing my keyboard from UK to USA, without any effect, and tried adding a
 space after the final double quote,

Which version of Python are you using?  Make sure you're using the
same version of interpreter and tutorial.  'print' was one of the big
changes between Python 2 and Python 3 (in Python 2 it was a statement,
while in Python 3 it is a function), so a tutorial written with Python
2 in mind will have some issues if you're using Python 3.

If you've already checked that, try copying and pasting your entire
interpreter session into a reply here, and we'll be more able to
figure out what's going on.

Hope this helps,

-- 
Zach
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 1:08 AM, Roy Smith r...@panix.com wrote:
 Better than that, do what I do.

 1) Assume that you don't have the full operator precedence table
 memorized and just parenthesize everything.

Or:

1a) Assume that you don't have the full operator precedence table
memorized and just look it up, for whichever language you're working
with today. :)

Usually the precedence table will also remind me of operator chaining,
and whether the integer division and modulo operators are backward
(compare REXX and Python with their % and // operators), and anything
else that needs concern.

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


Re: Add directory to sys.path based on variable

2014-01-30 Thread loial
Idiot that I am...I was not calling the script with the full path !

Thanks for your help
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Devin Jeanpierre
On Thu, Jan 30, 2014 at 6:08 AM, Roy Smith r...@panix.com wrote:
 1) Assume that you don't have the full operator precedence table
 memorized and just parenthesize everything.

 2) In cases where the expression is so simple, you couldn't possibly be
 wrong, see rule #1.

Also, assume you don't have the function definition syntax memorized,
and just define functions. And assume you don't know Python, so just
hire someone else to write your code instead.

-- Devin
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: end quote help for a newbie

2014-01-30 Thread Steven D'Aprano
On Thu, 30 Jan 2014 13:26:16 +, Peter Clark wrote:

 There is probably an easy solution to this – but I have not found it.
 
 Trying to terminate a literal in a print statement (from the tutorial).

I don't understand the problem. Perhaps if you show us what you have 
tried, and the error you get? Please copy and paste both your code and 
the full error, from the first line starting with Traceback and ending 
with the error message.

Regardless of using print or not, you terminate strings with a matching 
quotation mark. If you start the string with a double-quote, you 
terminate it with the same double-quote. If you use a single-quote, the 
same applies. These two are okay:

Double quote
Single quote

But not this:

Mixed quotes'
'Mixed quotes


 The literal should be enclosed in double quotes “ “

What editor are you using? If you are typing your code in Microsoft 
Office, you're going to have a bad time. At the very least, you need to 
turn Smart Quotes off. Python will not accept curly quotes such as ‘’ 
or “” or any of the various other quotation marks, only plain old 
typewriter quotation marks ' and  (actually, these are foot and inch 
marks, but everyone treats them as if they were quotation marks).


 the initial double quote seems to be OK (if I use a different character
 it flags it) but the ending is flagged as invalid syntax.  I have tried
 changing my keyboard from UK to USA, without any effect, and tried
 adding a space after the final double quote,

UK or USA keyboard won't make any difference. You need to use an ordinary 
text editor (or better still, a programmer's text editor) but not a word 
processor such as Word. If you must use Word, disable Smart Quotes. 
That will avoid at least one source of problems.



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


Re: 1 0 == True - False

2014-01-30 Thread Thibault Langlois
On Thursday, January 30, 2014 2:08:58 PM UTC, Roy Smith wrote:
 In article 3dcdc95d-5e30-46d3-b558-afedf9723...@googlegroups.com,
 
  Thibault Langlois thibault.langl...@gmail.com wrote:
 
 
 
  You are right. I should have given some context.
 
  I am looking at this from the perspective of the teacher that has to 
  explain 
 
  idiosyncrasies of the language to inexperienced students.
 
  There are two aspects in this example. 
 
  1. the equivalence of True/False with integers 1/0 which have pro and cons.
 
  2. the chaining rules of operators. I agree that it may make sense in some 
 
  cases like x  y  z but when operators are mixed it leads to counter 
 
  intuitive cases as the one I pointed out.
 
  
 
  The recommendations to student are 1) do not assume True == 1 and do not 
  use 
 
  operator chaining.
 
 
 
 Better than that, do what I do.
 
 
 
 1) Assume that you don't have the full operator precedence table 
 
 memorized and just parenthesize everything.
 
 
 
 2) In cases where the expression is so simple, you couldn't possibly be 
 
 wrong, see rule #1.

Agreed !
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Roy Smith
In article mailman.6143.1391091519.18130.python-l...@python.org,
 Chris Angelico ros...@gmail.com wrote:

 On Fri, Jan 31, 2014 at 1:08 AM, Roy Smith r...@panix.com wrote:
  Better than that, do what I do.
 
  1) Assume that you don't have the full operator precedence table
  memorized and just parenthesize everything.
 
 Or:
 
 1a) Assume that you don't have the full operator precedence table
 memorized and just look it up, for whichever language you're working
 with today. :)

It's faster to just stick in some extra parens.  Not to mention that it 
makes the code more clear for everybody reading it later.

Operator precedence is a tricky thing.  In part, because it's somewhat 
arbitrary, and in part because it changes from language to language.  
Using extra parens to make my meaning clear (to both the compiler and 
other humans who read the code in the future) is a simple technique 
which works in all languages.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Jussi Piitulainen
Roy Smith writes:

 In article 3dcdc95d-5e30-46d3-b558-afedf9723...@googlegroups.com,
  Thibault Langlois wrote:
 
  You are right. I should have given some context.  I am looking at
  this from the perspective of the teacher that has to explain
  idiosyncrasies of the language to inexperienced students.
 
  There are two aspects in this example. 

  1. the equivalence of True/False with integers 1/0 which have pro
  and cons.
  2. the chaining rules of operators. I agree that it may make sense
  in some cases like x  y  z but when operators are mixed it leads
  to counter intuitive cases as the one I pointed out.
  
  The recommendations to student are 1) do not assume True == 1 and
  do not use operator chaining.
 
 Better than that, do what I do.
 
 1) Assume that you don't have the full operator precedence table
 memorized and just parenthesize everything.
 
 2) In cases where the expression is so simple, you couldn't possibly
 be wrong, see rule #1.

There's nothing to parenthesize in x = y  z = w, unless you mean
something rather weird that is not equivalent anyway (and may not be
compatible with avoiding assumptions like True == 1).

There's not much to remember: the comparison operators are a
semantically coherent class (as far as I can see) and have the same
precedence level somewhere between proper operators (let's call them
that) and and and or and if else[1]. Ok, I'm not quite sure how the
two branches of a conditional expression combine. Rather than find
out, use parentheses, yes:

   (x + 1) if c else x ==  x + (1 if c else 0) == x + bool(c)

I agree about using parentheses when in doubt, but there is some room
here for more education and less doubt. Python gets these right.

[1] Sorry...
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 1:49 AM, Roy Smith r...@panix.com wrote:
 In article mailman.6143.1391091519.18130.python-l...@python.org,
  Chris Angelico ros...@gmail.com wrote:

 On Fri, Jan 31, 2014 at 1:08 AM, Roy Smith r...@panix.com wrote:
  Better than that, do what I do.
 
  1) Assume that you don't have the full operator precedence table
  memorized and just parenthesize everything.

 Or:

 1a) Assume that you don't have the full operator precedence table
 memorized and just look it up, for whichever language you're working
 with today. :)

 It's faster to just stick in some extra parens.  Not to mention that it
 makes the code more clear for everybody reading it later.

That won't protect you from getting modulo and truncating-division mixed up. :)

 Operator precedence is a tricky thing.  In part, because it's somewhat
 arbitrary, and in part because it changes from language to language.
 Using extra parens to make my meaning clear (to both the compiler and
 other humans who read the code in the future) is a simple technique
 which works in all languages.

It's not arbitrary, but there are differences from language to
language. Yes, parens can help, but I would strongly advocate NOT
using them where it's utterly unambiguous:

x = (2*3)+4 # Pointless!

Whether your language works with * before + (the sane way, doing what
we expect from algebra) or purely left to right (the insane way, but
some languages do do that), the parens are superfluous. Don't use 'em!

But if you work with both PHP and any other language that has a ?:
operator, parenthesizing any nesting of them will avoid a PHP
stupidity. Not that that's really any sort of argument here, though.

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


Re: fseek In Compressed Files

2014-01-30 Thread Serhiy Storchaka

30.01.14 13:28, Peter Otten написав(ла):

Ayushi Dalmia wrote:


I need to randomly access a bzip2 or gzip file. How can I set the offset
for a line and later retreive the line from the file using the offset.
Pointers in this direction will help.


with gzip.open(filename) as f:
 f.seek(some_pos)
 print(f.readline())
 f.seek(some_pos)
 print(f.readline())

seems to work as expected. Can you tell a bit more about your usecase (if it
isn't covered by that basic example)?


I don't recommend to seek backward in compressed file. This is very 
inefficient operation.


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


Re: 1 0 == True - False

2014-01-30 Thread Steven D'Aprano
On Thu, 30 Jan 2014 09:08:58 -0500, Roy Smith wrote:

 1) Assume that you don't have the full operator precedence table
 memorized and just parenthesize everything.

Oh really? Do you actually write stuff like this?

b = ((2*a) + 1)
if (b = (-1)):
...


I would hope not.


 2) In cases where the expression is so simple, you couldn't possibly be
 wrong, see rule #1.


Or, you can avoid superstitious responses *wink*

(1) Learn the operator precedences to the best of your ability. It's
not hard, most of it works just like the precedences you're used
to from maths class (remember that?) or in the most intuitively
useful way.

E.g. `1 + x == 2` does the useful thing of calculating 1 + x 
before testing for equality, rather than the stupid thing of
calculating x == 2 first then adding it to 1.

(2) When in doubt, use parentheses.

(3) When the expression is complex, a few extra parentheses can
help make it easier to understand. Seven, plus or minus two
is (roughly) the number of distinct items the human short-
term memory can hold. Grouping terms together can help reduce
the distinct number of items the reader needs to keep in 
short-term memory.

E.g. `x+1  0 and y = 5` is potentially as many as 9 distinct
items to keep in short-term memory. But bracketing some terms 
as in `(x+1  0) and (y = 5)` can reduce that down to as few
as two items.

(4) But too many parens obscure the meaning of the expression too. Aim
for a good balance, neither too few nor too many. Your judgement 
of the right number of parens is a skill, which will come with 
experience.




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


Re: Convert NTP timestamp from NTP packet to System time and date format

2014-01-30 Thread Johannes Findeisen
On Thu, 30 Jan 2014 18:34:04 +0500
Sadia Bashir wrote:

 Hello everyone;
 
 I want to write NTP client which sends and receives NTP packet to NTP
 server and should read the value from one of the four offsets and convert
 it to user readable local or GMT time format, I specifically want to know
 which offsets should I read in order to get correct timestamp from the
 packet.
 Any suggestion or help will be appreciated.

Maybe this lib is of interest to you:

https://pypi.python.org/pypi/ntplib/

It does all the NTP stuff for you. If you want to implement that stuff
by yourself just take a look at the code of ntplib, it should explain
what you want.

Regards,
Johannes
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: pytz question: GMT vs. UTC

2014-01-30 Thread Larry Martell
On Thu, Jan 30, 2014 at 10:23 AM, Grant Edwards invalid@invalid.invalid wrote:
 On 2014-01-30, Christian Heimes christ...@python.org wrote:
 On 30.01.2014 04:27, Chris Angelico wrote:
 On Thu, Jan 30, 2014 at 1:40 PM, MRAB pyt...@mrabarnett.plus.com wrote:
 How cruel... I suspect the smack at 0degC is much more painful
 than one
 at room temperature G

 It's the 21st century; you should be making use of Unicode: 0??C.

 I started to read that and thought you were going to advocate the use of 
 0??K...

 It's 0 K. The SI-unit 'Kelvin' has no degree (although Lord Kelvin was a
 professor).

 And he did have a degree.

I heard he was a very cold individual.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: pytz question: GMT vs. UTC

2014-01-30 Thread Grant Edwards
On 2014-01-30, Christian Heimes christ...@python.org wrote:
 On 30.01.2014 04:27, Chris Angelico wrote:
 On Thu, Jan 30, 2014 at 1:40 PM, MRAB pyt...@mrabarnett.plus.com wrote:
 How cruel... I suspect the smack at 0degC is much more painful
 than one
 at room temperature G

 It's the 21st century; you should be making use of Unicode: 0??C.
 
 I started to read that and thought you were going to advocate the use of 
 0??K...

 It's 0 K. The SI-unit 'Kelvin' has no degree (although Lord Kelvin was a
 professor).

And he did have a degree.

-- 
Grant Edwards   grant.b.edwardsYow! Wait ... is this a FUN
  at   THING or the END of LIFE in
  gmail.comPetticoat Junction??
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: pytz question: GMT vs. UTC

2014-01-30 Thread Grant Edwards
On 2014-01-30, wxjmfa...@gmail.com wxjmfa...@gmail.com wrote:

 The temperature unit is the Kelvin, not the Degree Kelvin.
 One writes: 0 K, 275.15 K

And remember to say Kelvins not Kelvin when speaking about
temperatures other than 1 K.

-- 
Grant Edwards   grant.b.edwardsYow! BELA LUGOSI is my
  at   co-pilot ...
  gmail.com
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: end quote help for a newbie

2014-01-30 Thread Zachary Ware
Please reply to the list, rather than to me directly.  You can use
Reply to List if you have that option, or Reply to All to make
sure you include the list.

On Thu, Jan 30, 2014 at 8:52 AM, Peter Clark artomis...@yahoo.co.uk wrote:
 I do not know how to dump the screen - it will not let me select anything
 with the mouse cursor, so here is my (typed in) reproduction:

Since it looks like you're probably using Windows Command Prompt, you
can right click anywhere in that window, click Mark, and highlight a
rectangle containing what you want and hit the Enter key.  Note that
it doesn't go by lines, only the rectangle you highlight will be
copied! (Yes, it is horribly annoying :)

Thank you for taking the time to type it all out!

 Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:18:40)  [MSC v.1600 32
 bit (In
 tel) on win32
 Type help, copyright, credits or license for more information.
 print xyz
  File (stdin), line 1
 print xyz
^
 SyntaxError: invalid syntax

This right here confirms what I thought: you're using Python 3 with a
Python 2 tutorial.  'print' in Python 3 is a function just like
'input' or 'open', so you have to use it like this instead:

print(xyz)
   xyz



 print '''xyz  . . .'''
  File (stdin), line 1
 print '''xyz'''
  ^
 SyntaxError: invalid syntax
 print '''xyz  . . .''(note - not appearing on
 screen - this is 2 single quotes)
 ... '''
 File (stdin), line 2
 '''
  ^
 SyntaxError: invalid syntax


 I do not see anywhere a definition of which version the tutorial relates to,
 but I downloaded it from the Python site on 19th January 2014.

The Python website provides docs for every current version of Python,
and the community is currently in the midst of a very long transition
from version 2.7 to 3.x, so both versions are considered current.
In fact, most links to the Python documentation will link to the 2.7
version to maintain compatibility.  Here's a link to the Python 3
version of the tutorial, which should work much better for you!
http://docs.python.org/3/tutorial/

You can also find the docs in your Python installation: find Python
3.3 in your start menu, and choose Python Manuals.  This will open
the same docs as are found online, in standard Windows help file
format.  Click the Tutorial link on the first page of that, and you
should have the right tutorial to work from.

Hope this helps, and welcome to Python!

--

Zach


 peter.

 On Thursday, 30 January 2014, 16:13, Zachary Ware
 zachary.ware+pyl...@gmail.com wrote:

 On Thu, Jan 30, 2014 at 7:26 AM, Peter Clark artomis...@yahoo.co.uk wrote:

 There is probably an easy solution to this – but I have not found it.

 Trying to terminate a literal in a print statement (from the tutorial).

 The literal should be enclosed in double quotes “ “

 the initial double quote seems to be OK (if I use a different character it
 flags it) but the ending is flagged as invalid syntax.  I have tried
 changing my keyboard from UK to USA, without any effect, and tried adding
 a
 space after the final double quote,


 Which version of Python are you using?  Make sure you're using the
 same version of interpreter and tutorial.  'print' was one of the big
 changes between Python 2 and Python 3 (in Python 2 it was a statement,
 while in Python 3 it is a function), so a tutorial written with Python
 2 in mind will have some issues if you're using Python 3.

 If you've already checked that, try copying and pasting your entire
 interpreter session into a reply here, and we'll be more able to
 figure out what's going on.

 Hope this helps,

 --
 Zach

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


Re: 1 0 == True - False

2014-01-30 Thread Rustom Mody
On Thursday, January 30, 2014 8:39:03 PM UTC+5:30, Steven D'Aprano wrote:
 On Thu, 30 Jan 2014 09:08:58 -0500, Roy Smith wrote:

  1) Assume that you don't have the full operator precedence table
  memorized and just parenthesize everything.

 Oh really? Do you actually write stuff like this?

 b = ((2*a) + 1)
 if (b = (-1)):
 ...

 I would hope not.

  2) In cases where the expression is so simple, you couldn't possibly be
  wrong, see rule #1.

 Or, you can avoid superstitious responses *wink*

 (1) Learn the operator precedences to the best of your ability. It's
 not hard, most of it works just like the precedences you're used
 to from maths class (remember that?) or in the most intuitively
 useful way.

 E.g. `1 + x == 2` does the useful thing of calculating 1 + x 
 before testing for equality, rather than the stupid thing of
 calculating x == 2 first then adding it to 1.

 (2) When in doubt, use parentheses.

 (3) When the expression is complex, a few extra parentheses can
 help make it easier to understand. Seven, plus or minus two
 is (roughly) the number of distinct items the human short-
 term memory can hold. Grouping terms together can help reduce
 the distinct number of items the reader needs to keep in 
 short-term memory.

 E.g. `x+1  0 and y = 5` is potentially as many as 9 distinct
 items to keep in short-term memory. But bracketing some terms 
 as in `(x+1  0) and (y = 5)` can reduce that down to as few
 as two items.

 (4) But too many parens obscure the meaning of the expression too. Aim
 for a good balance, neither too few nor too many. Your judgement 
 of the right number of parens is a skill, which will come with 
 experience.



(5) use APL -- all ordinary operators group right to left and at the same
precedence level
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: fseek In Compressed Files

2014-01-30 Thread Ayushi Dalmia
On Thursday, January 30, 2014 4:20:26 PM UTC+5:30, Ayushi Dalmia wrote:
 Hello,
 
 
 
 I need to randomly access a bzip2 or gzip file. How can I set the offset for 
 a line and later retreive the line from the file using the offset. Pointers 
 in this direction will help.

We are not allowed to use databases! I need to do this without database.
-- 
https://mail.python.org/mailman/listinfo/python-list


[ANN] Last news from Python FOSDEM 2014

2014-01-30 Thread Stéphane Wirtel

Python @ FOSDEM 2014


Hi all,

Last news about the Python devroom at FOSDEM 2014 [1]

Schedule


There is a last change in the schedule, PyPy: a fast Python Virtual 
Machine
will replace Web Scraping 101 in Python. Yasoob can't be present in 
Belgium :/


+--+--+--+
| TimeSlot | Talk
 | Speaker  |

+==+==+==+
| 09:00| Logic Programming in Python 
 | Pierre Carbonnelle   |

+--+--+--+
| 09:30| Introduction to py.test fixtures
 | Floris Bruynooghe|

+--+--+--+
| 10:00| openpyxl
 | Eric Gazoni  |

+--+--+--+
| 10:30| Introducing the Eve REST API Framework  
 | Nicola Iarocci   |

+--+--+--+
| 11:00| Stack switching for fun and profit  
 | Saúl Ibarra Corretgé |

+--+--+--+
| 11:30| SQLAlchemy Drill
 | Erik Janssens|

+--+--+--+
| 12:00| Some recipes with Alembic   
 | Claude Huchet|

+--+--+--+
| 12:30| Post-mortem Debugging and Web Development   
 | Alessandro Molina|

+--+--+--+
| 14:00| The next generation Python Software Foundation (PSF)
 | Marc-Andre Lemburg   |

+--+--+--+
| 14:30| How PyPy makes your code run fast   
 | Romain Guillebert|

+--+--+--+
| 15:00| Using All These Cores: Transactional Memory under the hood  
 | Armin Rigo   |

+--+--+--+
| 15:30| A deep dive into PEP3156, the new asyncio module
 | Saúl Ibarra Corretgé |

+--+--+--+
| 16:00| Concurrent pr ogramming with Python and my little 
experiment | Benoit Chesneau  |

+--+--+--+
| 16:30| Integrating Python and C using CFFI 
 | Floris Bruynooghe|

+--+--+--+
| 17:00| PyPy : a fast Python Virtual Machine
 | Romain Guillebert|

+--+--+--+
| 17:30| Generators, or how to step to the infinite and beyond   
 | Andrea Crotti|

+--+--+--+


Sponsors


We are glad to announce you that we have a lot of awesome sponsors for 
the

event.

Gold


Affinitic
Built on expertise achieved over more than 10 years in the 
development and
implementation of web solutions Affinitic is your ideal partner 
through every
stage of your project: from its conception and analysis to its 
final

implementation, not forgetting vital training support.The

strength competence, quality and safety of our developments are 
based on our
skill in the domain of open source software and our active presence 
in

communities of developers.

http://www.affinitic.be


Python Software Foundation
The Python Software Foundation (PSF) is a 501(c)(3) non-profit 
corporation that
holds the intellectual property rights behind the Python 
programming language.
We manage the open source licensing for Python version 2.1 and 
later and own and
protect the trademarks associated with Python.We also run the North 
Ameri


can PyCon conference annually, support other Python conferences 
around the
world, and fund Python related development with our grants program 
and by

funding special projects.


[ANN] Last news from Python FOSDEM 2014

2014-01-30 Thread Stéphane Wirtel

Python @ FOSDEM 2014


Hi all,

Last news about the Python devroom at FOSDEM 2014 [1]

Schedule


There is a last change in the schedule, PyPy: a fast Python Virtual 
Machine
will replace Web Scraping 101 in Python. Yasoob can't be present in 
Belgium :/


+--+--+--+
| TimeSlot | Talk
 | Speaker  |

+==+==+==+
| 09:00| Logic Programming in Python 
 | Pierre Carbonnelle   |

+--+--+--+
| 09:30| Introduction to py.test fixtures
 | Floris Bruynooghe|

+--+--+--+
| 10:00| openpyxl
 | Eric Gazoni  |

+--+--+--+
| 10:30| Introducing the Eve REST API Framework  
 | Nicola Iarocci   |

+--+--+--+
| 11:00| Stack switching for fun and profit  
 | Saúl Ibarra Corretgé |

+--+--+--+
| 11:30| SQLAlchemy Drill
 | Erik Janssens|

+--+--+--+
| 12:00| Some recipes with Alembic   
 | Claude Huchet|

+--+--+--+
| 12:30| Post-mortem Debugging and Web Development   
 | Alessandro Molina|

+--+--+--+
| 14:00| The next generation Python Software Foundation (PSF)
 | Marc-Andre Lemburg   |

+--+--+--+
| 14:30| How PyPy makes your code run fast   
 | Romain Guillebert|

+--+--+--+
| 15:00| Using All These Cores: Transactional Memory under the hood  
 | Armin Rigo   |

+--+--+--+
| 15:30| A deep dive into PEP3156, the new asyncio module
 | Saúl Ibarra Corretgé |

+--+--+--+
| 16:00| Concurrent pr ogramming with Python and my little 
experiment | Benoit Chesneau  |

+--+--+--+
| 16:30| Integrating Python and C using CFFI 
 | Floris Bruynooghe|

+--+--+--+
| 17:00| PyPy : a fast Python Virtual Machine
 | Romain Guillebert|

+--+--+--+
| 17:30| Generators, or how to step to the infinite and beyond   
 | Andrea Crotti|

+--+--+--+


Sponsors


We are glad to announce you that we have a lot of awesome sponsors for 
the

event.

Gold


Affinitic
Built on expertise achieved over more than 10 years in the 
development and
implementation of web solutions Affinitic is your ideal partner 
through every
stage of your project: from its conception and analysis to its 
final

implementation, not forgetting vital training support.The

strength competence, quality and safety of our developments are 
based on our
skill in the domain of open source software and our active presence 
in

communities of developers.

http://www.affinitic.be


Python Software Foundation
The Python Software Foundation (PSF) is a 501(c)(3) non-profit 
corporation that
holds the intellectual property rights behind the Python 
programming language.
We manage the open source licensing for Python version 2.1 and 
later and own and
protect the trademarks associated with Python.We also run the North 
Ameri


can PyCon conference annually, support other Python conferences 
around the
world, and fund Python related development with our grants program 
and by

funding special projects.


Re: fseek In Compressed Files

2014-01-30 Thread Peter Otten
Serhiy Storchaka wrote:

 30.01.14 13:28, Peter Otten написав(ла):
 Ayushi Dalmia wrote:

 I need to randomly access a bzip2 or gzip file. How can I set the offset
 for a line and later retreive the line from the file using the offset.
 Pointers in this direction will help.

 with gzip.open(filename) as f:
  f.seek(some_pos)
  print(f.readline())
  f.seek(some_pos)
  print(f.readline())

 seems to work as expected. Can you tell a bit more about your usecase (if
 it isn't covered by that basic example)?
 
 I don't recommend to seek backward in compressed file. This is very
 inefficient operation.

Do you know an efficient way to implement random access for a bzip2 or gzip 
file? 


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


Another surprise from the datetime module

2014-01-30 Thread Roy Smith
I was astounded just now to discover that datetime.timedelta doesn't
have a replace() method (at least not in Python 2.7).  Is there some
fundamental reason why it shouldn't, or is this just an oversight?

My immediate use case was wanting to print a timedelta without the
fractions of seconds.  The most straight-forward is:

print td.replace(microseconds=0)

but that doesn't work.  Yes, I know I can use strftime, but (as I've
mentioned before :-)), that requires dragging up the reference page to
figure out what grotty little format string I need.  The brute-force

print timedelta(seconds=int(td.total_seconds()))

is easier than that, but plain old replace() would be even easier.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Mark Lawrence

On 30/01/2014 14:46, Thibault Langlois wrote:

On Thursday, January 30, 2014 2:08:58 PM UTC, Roy Smith wrote:

In article 3dcdc95d-5e30-46d3-b558-afedf9723...@googlegroups.com,

  Thibault Langlois thibault.langl...@gmail.com wrote:




You are right. I should have given some context.



I am looking at this from the perspective of the teacher that has to explain



idiosyncrasies of the language to inexperienced students.



There are two aspects in this example.



1. the equivalence of True/False with integers 1/0 which have pro and cons.



2. the chaining rules of operators. I agree that it may make sense in some



cases like x  y  z but when operators are mixed it leads to counter



intuitive cases as the one I pointed out.







The recommendations to student are 1) do not assume True == 1 and do not use



operator chaining.




Better than that, do what I do.



1) Assume that you don't have the full operator precedence table

memorized and just parenthesize everything.



2) In cases where the expression is so simple, you couldn't possibly be

wrong, see rule #1.


Agreed !



Pleased to see that as always plenty of helpful responses here.  In 
return would you please read and action this 
https://wiki.python.org/moin/GoogleGroupsPython to prevent us seeing the 
double line spacing above, thanks.


--
My fellow Pythonistas, ask not what our language can do for you, ask 
what you can do for our language.


Mark Lawrence

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


Re: Another surprise from the datetime module

2014-01-30 Thread Mark Lawrence

On 30/01/2014 17:32, Roy Smith wrote:

I was astounded just now to discover that datetime.timedelta doesn't
have a replace() method (at least not in Python 2.7).  Is there some
fundamental reason why it shouldn't, or is this just an oversight?

My immediate use case was wanting to print a timedelta without the
fractions of seconds.  The most straight-forward is:

print td.replace(microseconds=0)

but that doesn't work.  Yes, I know I can use strftime, but (as I've
mentioned before :-)), that requires dragging up the reference page to
figure out what grotty little format string I need.  The brute-force

print timedelta(seconds=int(td.total_seconds()))

is easier than that, but plain old replace() would be even easier.



datetime.timedelta doesn't have a strftime method either.

AttributeError: 'datetime.timedelta' object has no attribute 'strftime'

--
My fellow Pythonistas, ask not what our language can do for you, ask 
what you can do for our language.


Mark Lawrence

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


Re: Try-except-finally paradox

2014-01-30 Thread Rotwang

On 30/01/2014 06:33, Andrew Berg wrote:

On 2014.01.29 23:56, Jessica Ross wrote:

I found something like this in a StackOverflow discussion.

def paradox():

... try:
... raise Exception(Exception raised during try)
... except:
... print Except after try
... return True
... finally:
... print Finally
... return False
... return None
...

return_val = paradox()

Except after try
Finally

return_val

False

I understand most of this.
What I don't understand is why this returns False rather than True.
Does the finally short-circuit the return in the except block?


My guess would be that the interpreter doesn't let the finally block
get skipped under any circumstances, so the return value gets set to
True, but then it forces the finally block to be run before returning,
which changes the return value to False.


Mine too. We can check that the interpreter gets as far as evaluating 
the return value in the except block:


 def paradox2():
try:
raise Exception(Raise)
except:
print(Except)
return [print(Return), True][1]
finally:
print(Finally)
return False
return None

 ret = paradox2()
Except
Return
Finally
 ret
False
--
https://mail.python.org/mailman/listinfo/python-list


Re: Another surprise from the datetime module

2014-01-30 Thread Neil Cerutti
On 2014-01-30, Roy Smith r...@panix.com wrote:
 I was astounded just now to discover that datetime.timedelta
 doesn't have a replace() method (at least not in Python 2.7).
 Is there some fundamental reason why it shouldn't, or is this
 just an oversight?

 My immediate use case was wanting to print a timedelta without
 the fractions of seconds.  The most straight-forward is:

 print td.replace(microseconds=0)

That would be nice.

In the meantime, this works for your use case:

td -= td % timedelta(seconds=1)

-- 
Neil Cerutti

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


Re: fseek In Compressed Files

2014-01-30 Thread Dave Angel
 Ayushi Dalmia ayushidalmia2...@gmail.com Wrote in message:
 On Thursday, January 30, 2014 4:20:26 PM UTC+5:30, Ayushi Dalmia wrote:
 Hello,
 
 
 
 I need to randomly access a bzip2 or gzip file. How can I set the offset for 
 a line and later retreive the line from the file using the offset. Pointers 
 in this direction will help.
 
 We are not allowed to use databases! I need to do this without database.
 

Why do you reply to your own message?  Makes it hard for people to
 make sense of your post.

Have you any answers to earlier questions? How big is this file,
 what python version,  do you care about performance, code you've
 tried,  ...

-- 
DaveA

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


Re: 1 0 == True - False

2014-01-30 Thread Roy Smith
On Thursday, January 30, 2014 9:56:19 AM UTC-5, Jussi Piitulainen wrote:

 There's nothing to parenthesize in x = y  z = w

Hmm

 x = y  z = w
  File stdin, line 1
SyntaxError: can't assign to comparison

I don't think any number of parentheses will help that :-)
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Try-except-finally paradox

2014-01-30 Thread Ethan Furman

On 01/30/2014 10:12 AM, Rotwang wrote:

On 30/01/2014 06:33, Andrew Berg wrote:

On 2014.01.29 23:56, Jessica Ross wrote:


I found something like this in a StackOverflow discussion.
-- def paradox():
... try:
... raise Exception(Exception raised during try)
... except:
... print Except after try
... return True
... finally:
... print Finally
... return False
... return None
...
-- return_val = paradox()
Except after try
Finally
-- return_val
False

I understand most of this.
What I don't understand is why this returns False rather than True.
Does the finally short-circuit the return in the except block?


My guess would be that the interpreter doesn't let the finally block
get skipped under any circumstances, so the return value gets set to
True, but then it forces the finally block to be run before returning,
which changes the return value to False.


Mine too. We can check that the interpreter gets as far as evaluating the 
return value in the except block:

-- def paradox2():
   try:
   raise Exception(Raise)
   except:
   print(Except)
   return [print(Return), True][1]
   finally:
   print(Finally)
   return False
   return None

-- ret = paradox2()
Except
Return
Finally
-- ret
False


And just to be thorough, if the finally block doesn't have a return:

-- def paradox3():
try:
raise Exception(Raise)
except:
print(Except)
return [print(Return), True][1]
finally:
print(Finally)
return None

-- print(paradox3())
Except
Return
Finally
True

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


Re: 1 0 == True - False

2014-01-30 Thread Roy Smith
On Thursday, January 30, 2014 10:09:03 AM UTC-5, Steven D'Aprano wrote:
 On Thu, 30 Jan 2014 09:08:58 -0500, Roy Smith wrote:
 
  1) Assume that you don't have the full operator precedence table
  memorized and just parenthesize everything.
 
 Oh really? Do you actually write stuff like this?
 
 b = ((2*a) + 1)

Well, OK, I exaggerated a bit.  Multiplication binds stronger than addition in 
any language I've ever used, so I assume I know that one.  But not much beyond 
that.

 if (b = (-1)):

No, I wouldn't use either set of parens their either.  But, if I have any doubt 
at all, I rather than look it up, I just put parens.  And my threshold for 
doubt is pretty low.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Roy Smith
On Thursday, January 30, 2014 10:09:03 AM UTC-5, Steven D'Aprano wrote:

 E.g. `x+1  0 and y = 5` is potentially as many as 9 distinct
 items to keep in short-term memory. But bracketing some terms 
 as in `(x+1  0) and (y = 5)` can reduce that down to as few
 as two items.

Yes, that's probably how I would write that, although, this is even simpler:

(x  -1) and (y = 5)
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 5:56 AM, Roy Smith r...@panix.com wrote:
 On Thursday, January 30, 2014 10:09:03 AM UTC-5, Steven D'Aprano wrote:

 E.g. `x+1  0 and y = 5` is potentially as many as 9 distinct
 items to keep in short-term memory. But bracketing some terms
 as in `(x+1  0) and (y = 5)` can reduce that down to as few
 as two items.

 Yes, that's probably how I would write that, although, this is even simpler:

 (x  -1) and (y = 5)

Be careful; that's not the same thing.

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


Re: end quote help for a newbie

2014-01-30 Thread Peter Clark
Thank-you.  Please no-one reply to this post.  I just want to put on record my 
complete p-offed-ness, that having spent 10 days sorting out and hypertexting a 
library of documentation, I now have to start all over.

Please do not respond, I am sure it is all my fault.

Please do not respond - it will only prolong the agony.

Long live the Norwegian blue.

peter



On Thursday, 30 January 2014, 17:31, Zachary Ware 
zachary.ware+pyl...@gmail.com wrote:
  
Please reply to the list, rather than to me directly.  You can use
Reply to List if you have that option, or Reply to All to make
sure you include the list.

On Thu, Jan 30, 2014 at 8:52 AM, Peter Clark artomis...@yahoo.co.uk wrote:
 I do not know how to dump the screen - it will not let me select anything
 with the mouse cursor, so here is my (typed in) reproduction:

Since it looks like you're probably using Windows Command Prompt, you
can right click anywhere in that window, click Mark, and highlight a
rectangle containing what you want and hit the Enter key.  Note that
it doesn't go by lines, only the rectangle you highlight will be
copied! (Yes, it is horribly annoying :)

Thank you for taking the time to type it all out!

 Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:18:40)  [MSC v.1600 32
 bit (In
 tel) on win32
 Type help, copyright, credits or license for more information.
 print xyz
      File (stdin), line 1
         print xyz
                        ^
 SyntaxError: invalid syntax

This right here confirms what I thought: you're using Python 3 with a
Python 2 tutorial.  'print' in Python 3 is a function just like
'input' or 'open', so you have to use it like this instead:

    print(xyz)
   xyz



 print '''xyz  . . .'''
      File (stdin), line 1
         print '''xyz'''
                          ^
 SyntaxError: invalid syntax
 print '''xyz  . . .''                    (note - not appearing on
 screen - this is 2 single quotes)
 ... '''
     File (stdin), line 2
         '''
          ^
 SyntaxError: invalid syntax


 I do not see anywhere a definition of which version the tutorial relates to,
 but I downloaded it from the Python site on 19th January 2014.

The Python website provides docs for every current version of Python,
and the community is currently in the midst of a very long transition
from version 2.7 to 3.x, so both versions are considered current.
In fact, most links to the Python documentation will link to the 2.7
version to maintain compatibility.  Here's a link to the Python 3
version of the tutorial, which should work much better for you!
http://docs.python.org/3/tutorial/

You can also find the docs in your Python installation: find Python
3.3 in your start menu, and choose Python Manuals.  This will open
the same docs as are found online, in standard Windows help file
format.  Click the Tutorial link on the first page of that, and you
should have the right tutorial to work from.

Hope this helps, and welcome to Python!

--

Zach



 peter.

 On Thursday, 30 January 2014, 16:13, Zachary Ware
 zachary.ware+pyl...@gmail.com wrote:

 On Thu, Jan 30, 2014 at 7:26 AM, Peter Clark artomis...@yahoo.co.uk wrote:

 There is probably an easy solution to this – but I have not found it.

 Trying to terminate a literal in a print statement (from the tutorial).

 The literal should be enclosed in double quotes “ “

 the initial double quote seems to be OK (if I use a different character it
 flags it) but the ending is flagged as invalid syntax.  I have tried
 changing my keyboard from UK to USA, without any effect, and tried adding
 a
 space after the final double quote,


 Which version of Python are you using?  Make sure you're using the
 same version of interpreter and tutorial.  'print' was one of the big
 changes between Python 2 and Python 3 (in Python 2 it was a statement,
 while in Python 3 it is a function), so a tutorial written with Python
 2 in mind will have some issues if you're using Python 3.

 If you've already checked that, try copying and pasting your entire
 interpreter session into a reply here, and we'll be more able to
 figure out what's going on.

 Hope this helps,

 --
 Zach
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Rotwang

On 30/01/2014 12:49, Dave Angel wrote:

[...]

For hysterical reasons,  True and False are instances of class
  bool, which is derived from int. So for comparison purposes
  False==0 and True==1. But in my opinion,  you should never take
  advantage of this, except when entering obfuscation
  contests.


Really? I take advantage of it quite a lot. For example, I do things 
like this:


'You have scored %i point%s' % (score, 's'*(score != 1))
--
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Ethan Furman

On 01/30/2014 11:03 AM, Chris Angelico wrote:

On Fri, Jan 31, 2014 at 5:56 AM, Roy Smith wrote:


Yes, that's probably how I would write that, although, this is even simpler:

(x  -1) and (y = 5)


Be careful; that's not the same thing.


How so?

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


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
 Fri, Jan 31, 2014 at 6:22 AM, Ethan Furman et...@stoneleaf.us wrote:
 On 01/30/2014 11:03 AM, Chris Angelico wrote:

 On Fri, Jan 31, 2014 at 5:56 AM, Roy Smith wrote:


 Yes, that's probably how I would write that, although, this is even
 simpler:

 (x  -1) and (y = 5)


 Be careful; that's not the same thing.


 How so?


Well, if x is an integer, then they're the same. If it's floating
point, I think they're the same, but don't quote me on that. But for
arbitrary types, there's no way of knowing what x+1 will result in.

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


Re: 1 0 == True - False

2014-01-30 Thread Dave Angel
 Rotwang sg...@hotmail.co.uk Wrote in message:
 On 30/01/2014 12:49, Dave Angel wrote:
 [...]

 For hysterical reasons,  True and False are instances of class
   bool, which is derived from int. So for comparison purposes
   False==0 and True==1. But in my opinion,  you should never take
   advantage of this, except when entering obfuscation
   contests.
 
 Really? I take advantage of it quite a lot. For example, I do things 
 like this:
 
 'You have scored %i point%s' % (score, 's'*(score != 1))
 

I also did that kind of thing when computer resources
were more
 precious the program readability.  Like in 73 when my satellite
 navigation system had to fit in 2k code and 1.5k
 data.

Here I'd probably do something like

'You have scored {} {}' .format (score, 'point' if score==1 else
 'points')

-- 
DaveA

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


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 7:08 AM, Dave Angel da...@davea.name wrote:
 'You have scored %i point%s' % (score, 's'*(score != 1))


 Here I'd probably do something like

 'You have scored {} {}' .format (score, 'point' if score==1 else
  'points')

Bah, what's the fun in that?

'You have scored %i point%.*s' % (score, score!=1, 's')

BTW, the layout of the original bugs me slightly:

 'You have scored %i point%s' % (score, 's'*(score != 1))

I don't like having spaces around != and none around *. I'd either
squash the != up or space out the *:

'You have scored %i point%s' % (score, 's'*(score!=1))
'You have scored %i point%s' % (score, 's' * (score != 1))

Operators should always have at least as much space around them as
more tightly-binding operators, IMO. In this instance, it'd be
reasonable to squash the != and space the *, or to squash both, or to
space both, but not the backward spacing of the original :)

But that's just my opinion.

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


Re: 1 0 == True - False

2014-01-30 Thread Jussi Piitulainen
Roy Smith writes:

 On Thursday, January 30, 2014 9:56:19 AM UTC-5, Jussi Piitulainen wrote:
 
  There's nothing to parenthesize in x = y  z = w
 
 Hmm
 
  x = y  z = w
   File stdin, line 1
 SyntaxError: can't assign to comparison
 
 I don't think any number of parentheses will help that :-)

Er, sorry about that. Here:

 x = y  z == w
Traceback (most recent call last):
  File stdin, line 1, in module
NameError: name 'x' is not defined

Much better :)
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 7:14 AM, Jussi Piitulainen
jpiit...@ling.helsinki.fi wrote:
 I don't think any number of parentheses will help that :-)

 Er, sorry about that. Here:

 x = y  z == w
 Traceback (most recent call last):
   File stdin, line 1, in module
 NameError: name 'x' is not defined

 Much better :)

See, you still all think the solution is with parentheses and stuff.
It's not. The solution is with apostrophes - look!

 'x' = 'y  z == w'
True

Now it works!

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


Re: 1 0 == True - False

2014-01-30 Thread Ian Kelly
On Thu, Jan 30, 2014 at 1:08 PM, Dave Angel da...@davea.name wrote:
  Rotwang sg...@hotmail.co.uk Wrote in message:
 Really? I take advantage of it quite a lot. For example, I do things
 like this:

 'You have scored %i point%s' % (score, 's'*(score != 1))


 I also did that kind of thing when computer resources
 were more
  precious the program readability.  Like in 73 when my satellite
  navigation system had to fit in 2k code and 1.5k
  data.

 Here I'd probably do something like

 'You have scored {} {}' .format (score, 'point' if score==1 else
  'points')

Of course if you're at all concerned about i18n then the proper way to
do it would be:

ngettext(You have scored %d point, You have scored %d points, score) % score
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 7:28 AM, Ian Kelly ian.g.ke...@gmail.com wrote:
 Of course if you're at all concerned about i18n then the proper way to
 do it would be:

 ngettext(You have scored %d point, You have scored %d points, score) % 
 score

Ugh, so much duplication! We can totally do better than that.

ngettext(*(lambda x,s: (x,x+'s',s))(You have scored %d point,score))

Much better!


Incidentally, in creating the above abomination, I found that I can't do this:

 print(*(lambda x: (x,x+'s'))(You have scored %d point),score)
SyntaxError: only named arguments may follow *expression

But I can do this:

 print(score,*(lambda x: (x,x+'s'))(You have scored %d point))
1 You have scored %d point You have scored %d points

Why is tuple unpacking limited to the last argument? Is it just for
the parallel with the function definition, where anything following it
is keyword-only?

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


Re: 1 0 == True - False

2014-01-30 Thread Ian Kelly
On Jan 30, 2014 1:40 PM, Chris Angelico ros...@gmail.com wrote:

 On Fri, Jan 31, 2014 at 7:28 AM, Ian Kelly ian.g.ke...@gmail.com wrote:
  Of course if you're at all concerned about i18n then the proper way to
  do it would be:
 
  ngettext(You have scored %d point, You have scored %d points,
score) % score

 Ugh, so much duplication! We can totally do better than that.

 ngettext(*(lambda x,s: (x,x+'s',s))(You have scored %d point,score))

 Much better!


 Incidentally, in creating the above abomination, I found that I can't do
this:

  print(*(lambda x: (x,x+'s'))(You have scored %d point),score)
 SyntaxError: only named arguments may follow *expression

 But I can do this:

  print(score,*(lambda x: (x,x+'s'))(You have scored %d point))
 1 You have scored %d point You have scored %d points

 Why is tuple unpacking limited to the last argument? Is it just for
 the parallel with the function definition, where anything following it
 is keyword-only?

Lack of a convincing use case, and the position of the following arguments
would then be dependent upon the length of the tuple, which in many cases
could result in subtle bugs.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 8:17 AM, Ian Kelly ian.g.ke...@gmail.com wrote:
 Why is tuple unpacking limited to the last argument? Is it just for
 the parallel with the function definition, where anything following it
 is keyword-only?

 Lack of a convincing use case, and the position of the following arguments
 would then be dependent upon the length of the tuple, which in many cases
 could result in subtle bugs.

Okay. Just seemed an odd restriction; I can unpack an iterable into a
function's args (great!), I can have other args before that tuple
(handy!), but I can't have any after.

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


Statement evals as False in my IDE and True elsewhere

2014-01-30 Thread CM
This is puzzling.  (Using Python 2.5, WinXP, Boa Constructor 0.6.1 definitely 
running the code through Python 2.5)

If I run these lines in my program, through my IDE (Boa Constructor), 

fake_data = ['n/a', 'n/a', 'n/a', 'n/a', '[omitted]', '12']
fake_result = not all(i == '[omitted]' for i in fake_data)
print 'This is fake result: ', fake_result

I get this result:

 
This is fake result:  False

BUT, if I run those *exact same lines* (copied and pasted) in the Python 2.5 
shell within Boa Constructor, or with IDLE with Python 2.5, I get:

 
This is fake result:  True

...which is what it seems like it should evaluate to, right?  What the heck is 
going on?  How is this even possible?  There is nothing that I know of in my 
code to cause this change, but perhaps there is.  Otherwise I am at a total 
loss.

Thanks,
Che M
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: 1 0 == True - False

2014-01-30 Thread Roy Smith
On Thursday, January 30, 2014 10:09:03 AM UTC-5, Steven D'Aprano wrote:
 `(x+1  0) and (y = 5)`

Me:
 this is even simpler:
 (x  -1) and (y = 5)

On Thursday, January 30, 2014 2:03:42 PM UTC-5, Chris Angelico wrote:
 Be careful; that's not the same thing.

In what way?  I'm assuming x is some numeric type.  And further assuming it's 
not some humungous floating point value, so we run into precision issues.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Statement evals as False in my IDE and True elsewhere

2014-01-30 Thread Peter Otten
CM wrote:

 This is puzzling.  (Using Python 2.5, WinXP, Boa Constructor 0.6.1
 definitely running the code through Python 2.5)
 
 If I run these lines in my program, through my IDE (Boa Constructor),
 
 fake_data = ['n/a', 'n/a', 'n/a', 'n/a', '[omitted]', '12']
 fake_result = not all(i == '[omitted]' for i in fake_data)
 print 'This is fake result: ', fake_result
 
 I get this result:
 
 
 This is fake result:  False
 
 BUT, if I run those *exact same lines* (copied and pasted) in the Python
 2.5 shell within Boa Constructor, or with IDLE with Python 2.5, I get:
 
 
 This is fake result:  True
 
 ...which is what it seems like it should evaluate to, right?  What the
 heck is going on?  How is this even possible?  There is nothing that I
 know of in my code to cause this change, but perhaps there is.  Otherwise
 I am at a total loss.

Hint:

 def demo():
... fake_data = ['n/a', 'n/a', 'n/a', 'n/a', '[omitted]', '12']
... fake_result = not all(i == '[omitted]' for i in fake_data)
... print 'This is fake result: ', fake_result
... 
 demo()
This is fake result:  True
 from numpy import all
 demo()
This is fake result:  False


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


Re: 1 0 == True - False

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 9:09 AM, Roy Smith r...@panix.com wrote:
 On Thursday, January 30, 2014 10:09:03 AM UTC-5, Steven D'Aprano wrote:
 `(x+1  0) and (y = 5)`

 Me:
 this is even simpler:
 (x  -1) and (y = 5)

 On Thursday, January 30, 2014 2:03:42 PM UTC-5, Chris Angelico wrote:
 Be careful; that's not the same thing.

 In what way?  I'm assuming x is some numeric type.  And further assuming it's 
 not some humungous floating point value, so we run into precision issues.

Now you're changing the problem domain :) Like I said, if it's an
integer, you definitely will get the same result from each of the
above; but that doesn't mean the expressions are equivalent. They just
might happen to produce the same result for values within some
particular domain. (I wouldn't even be 100% confident that it's valid
for any numeric type, though I can't think of any float values that it
would break on, and complex and int are unorderable anyway.)

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


Re: Statement evals as False in my IDE and True elsewhere

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 9:04 AM, CM cmpyt...@gmail.com wrote:
 fake_data = ['n/a', 'n/a', 'n/a', 'n/a', '[omitted]', '12']
 fake_result = not all(i == '[omitted]' for i in fake_data)
 print 'This is fake result: ', fake_result

Trying to get my head around this. You want to see if all the values
in fake_data are '[omitted]' or not? That is to say, if there's
anything that isn't '[omitted]'? Not sure that that's a normal thing
to be asking, but that's what your code appears to do.

What happens if you try this?

fake_data = ['n/a', 'n/a', 'n/a', 'n/a', '[omitted]', '12']
fake_result = set(fake_data){'[omitted]'}

In theory, that should do the exact same thing as your code (returning
True if there's anything in fake_data that is not '[omitted]').

The other thing to try is peppering your code with print statements.
Divide the work up into pieces - show the entire loop and what happens
- print out everything you can imagine. See where the difference
begins between inside and outside the IDE. Once you find that, you'll
have a clue as to what's wrong.

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


Why this throws an UnboundLocalError ?

2014-01-30 Thread Marc Aymerich
Dear all,

I have a very simple module

glic3@e4200:# cat globalstate.py
GLOBAL = 0

def update():
GLOBAL += 1


however it doesn't work!!

glic3@e4200:# python
Python 2.7.3 (default, Aug  1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type help, copyright, credits or license for more information.
 import globalstate
 globalstate.update()
Traceback (most recent call last):
  File stdin, line 1, in module
  File globalstate.py, line 4, in update
GLOBAL += 1
UnboundLocalError: local variable 'GLOBAL' referenced before assignment


And I don't know why :(
Anyone ?

Thanks!!
-- 
Marc
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Statement evals as False in my IDE and True elsewhere

2014-01-30 Thread CM
On Thursday, January 30, 2014 5:14:57 PM UTC-5, Peter Otten wrote:

 Hint:
 
  def demo():
 ... fake_data = ['n/a', 'n/a', 'n/a', 'n/a', '[omitted]', '12']
 ... fake_result = not all(i == '[omitted]' for i in fake_data)
 ... print 'This is fake result: ', fake_result
 
  demo()
 This is fake result:  True
 
  from numpy import all
  demo()
 This is fake result:  False

That's brilliant, thanks!  Now I'm just a bit unsure of what to do about it.  
First, I don't actually have the line from numpy import all in that module's 
code, although I have imports of numpy; I think it is getting brought in 
through Matplotlib's pylab module, which I do import in that module.

In any case, what's the most Pythonic way to deal with this?  My first thought 
was to create the old all function and rename it so there would be no conflict:

(both of what follows taken from answers here: 
http://stackoverflow.com/questions/18774388/re-import-aliased-shadowed-python-built-in-methods)

builtin_all = __builtins__.all

but I got the error:

AttributeError: 'dict' object has no attribute 'all'

So I wound up doing this:

from __builtin__ import *

which fixed the problem...but seems less than optimal, because what if I wanted 
to have numpy's all still in play?

Again, thanks for restoring my faith in causality,
Che M
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Why this throws an UnboundLocalError ?

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 9:46 AM, Marc Aymerich glicer...@gmail.com wrote:
 GLOBAL = 0

 def update():
 GLOBAL += 1

If you assign to a name, Python makes it local, unless you explicitly
tell it that you want it to be global:

def update():
global GLOBAL
GLOBAL += 1

But be aware that the ALL_CAPS name conventionally means a constant.
Since you're changing its value, it's not constant (wow! :) ), so
using a name of GLOBAL is a bad idea. (Also, obviously, you want to
name it appropriately to what you're doing, but I assume you called it
this as part of cutting down your example. For which, by the way,
thank you. You posted a complete example, and the full traceback, and
the Python version and platform. That's everything that we need to
help you - it's such a luxury!!)

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


Re: Why this throws an UnboundLocalError ?

2014-01-30 Thread Mark Lawrence

On 30/01/2014 22:46, Marc Aymerich wrote:

Dear all,

I have a very simple module

glic3@e4200:# cat globalstate.py
GLOBAL = 0

def update():
 GLOBAL += 1


however it doesn't work!!

glic3@e4200:# python
Python 2.7.3 (default, Aug  1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type help, copyright, credits or license for more information.

import globalstate
globalstate.update()

Traceback (most recent call last):
   File stdin, line 1, in module
   File globalstate.py, line 4, in update
 GLOBAL += 1
UnboundLocalError: local variable 'GLOBAL' referenced before assignment


And I don't know why :(
Anyone ?

Thanks!!



You must tell the update function that GLOBAL is global.

--
My fellow Pythonistas, ask not what our language can do for you, ask 
what you can do for our language.


Mark Lawrence

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


Re: Why this throws an UnboundLocalError ?

2014-01-30 Thread Ned Batchelder

On 1/30/14 5:46 PM, Marc Aymerich wrote:

Dear all,

I have a very simple module

glic3@e4200:# cat globalstate.py
GLOBAL = 0

def update():
 GLOBAL += 1


however it doesn't work!!

glic3@e4200:# python
Python 2.7.3 (default, Aug  1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type help, copyright, credits or license for more information.

import globalstate
globalstate.update()

Traceback (most recent call last):
   File stdin, line 1, in module
   File globalstate.py, line 4, in update
 GLOBAL += 1
UnboundLocalError: local variable 'GLOBAL' referenced before assignment


And I don't know why :(
Anyone ?

Thanks!!



Assignment statements in functions implicitly make local names. If you 
want to assign a new value to a global name in a function, you have to 
use a global statement:


def update():
global GLOBAL
GLOBAL += 1

--
Ned Batchelder, http://nedbatchelder.com

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


Re: Statement evals as False in my IDE and True elsewhere

2014-01-30 Thread Chris Angelico
On Fri, Jan 31, 2014 at 9:48 AM, CM cmpyt...@gmail.com wrote:
 builtin_all = __builtins__.all

 but I got the error:

 AttributeError: 'dict' object has no attribute 'all'

Try using square brackets notation instead. Apparently your
__builtins__ is a dictionary, not a module, though I don't know why
(probably something to do with numpy, which I've never actually used).
But try this:

builtin_all = __builtins__[all]

It might work.

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


Re: Statement evals as False in my IDE and True elsewhere

2014-01-30 Thread CM
 Try using square brackets notation instead. Apparently your
 __builtins__ is a dictionary, not a module, though I don't know why
 (probably something to do with numpy, which I've never actually used).
 
 But try this:
 builtin_all = __builtins__[all]
 
 It might work.

Yes, it does.  Thanks!

Che M
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Statement evals as False in my IDE and True elsewhere

2014-01-30 Thread CM
On Thursday, January 30, 2014 5:25:31 PM UTC-5, Chris Angelico wrote:
 On Fri, Jan 31, 2014 at 9:04 AM, CM cmpyt...@gmail.com wrote:
 
  fake_data = ['n/a', 'n/a', 'n/a', 'n/a', '[omitted]', '12']
 
  fake_result = not all(i == '[omitted]' for i in fake_data)
 
  print 'This is fake result: ', fake_result
 
 
 
 Trying to get my head around this. You want to see if all the values
 in fake_data are '[omitted]' or not? That is to say, if there's
 anything that isn't '[omitted]'? Not sure that that's a normal thing
 to be asking, but that's what your code appears to do.

That's what I want, yes.  It probably sure isn't a normal thing to be asking, 
and I wouldn't be surprised if I am approaching it the wrong way.  Essentially, 
if ALL the items in that list are '[omitted]', I must not process the list, but 
if even one of them is something other than '[omitted]', I need to process it.  

If there is a more Pythonic / better way to approach that, I'd like to know it.

 In theory, that should do the exact same thing as your code (returning
 True if there's anything in fake_data that is not '[omitted]').

Yes, as you saw and as Peter showed, that the builtin all was shadowed by 
numpy's all.  I wouldn't have thought of that, but it makes sense now. These 
sorts of shadowing problems are so rare for me that I never think about that 
possibility.
-- 
https://mail.python.org/mailman/listinfo/python-list


HOW EVOLUTIONISTS MISUSE SCIENCE

2014-01-30 Thread CHAIRMAN THRINAXODON OF THE COMMUNIST PARTY OF CANADA

http://www.talkorigins.org/

Vs

http://www.trueorigin.org/

WHICH ONE'S TRUE?

This one!:
http://www.trueorigin.org/
--
Thrinaxodon, The Ultimate Defender of USENET
--
https://mail.python.org/mailman/listinfo/python-list


Re: Statement evals as False in my IDE and True elsewhere

2014-01-30 Thread Peter Otten
CM wrote:

 On Thursday, January 30, 2014 5:14:57 PM UTC-5, Peter Otten wrote:
 
 Hint:
 
  def demo():
 ... fake_data = ['n/a', 'n/a', 'n/a', 'n/a', '[omitted]', '12']
 ... fake_result = not all(i == '[omitted]' for i in fake_data)
 ... print 'This is fake result: ', fake_result
 
  demo()
 This is fake result:  True
 
  from numpy import all
  demo()
 This is fake result:  False
 
 That's brilliant, thanks!  Now I'm just a bit unsure of what to do about
 it.  First, I don't actually have the line from numpy import all in that
 module's code, although I have imports of numpy; I think it is getting
 brought in through Matplotlib's pylab module, which I do import in that
 module.
 
 In any case, what's the most Pythonic way to deal with this?  My first
 thought was to create the old all function and rename it so there would be
 no conflict:
 
 (both of what follows taken from answers here:
 http://stackoverflow.com/questions/18774388/re-import-aliased-shadowed-
python-built-in-methods)
 
 builtin_all = __builtins__.all
 
 but I got the error:
 
 AttributeError: 'dict' object has no attribute 'all'
 
 So I wound up doing this:
 
 from __builtin__ import *
 
 which fixed the problem...but seems less than optimal, because what if I
 wanted to have numpy's all still in play?

import numpy # you can now use numpy's all as numpy.all(...)
del all  # remove numpy's all from your module's global namespace and
 # thus make the builtin visible again



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


  1   2   >