[Python-Dev] Python 2.1 in HP-UX

2005-04-19 Thread Prakash A



Hello All,

  I using 
jython 2.1. For that i need of Python 2.1 ( i am sure about this, pls clarify me 
if any version of Python can be used with Jython). and i am working HP-UX 
platform. I need to know that, whether Python can be Built in HP-UX, because i 
seeing some of the mails saying Python 2.1 did not compile in HP-UX and Python 
can not build with HP-UX. Please tell me, whether Python 2.1 can be build in 
HP-UX. If yes, please give me the stpes to do that.

Thanks in Advance,
Prakash.A
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Python 2.1 in HP-UX

2005-04-19 Thread Aahz
On Tue, Apr 19, 2005, Prakash A wrote:

 I using jython 2.1. For that i need of Python 2.1 ( i am sure about
 this, pls clarify me if any version of Python can be used with
 Jython). and i am working HP-UX platform. I need to know that,
 whether Python can be Built in HP-UX, because i seeing some of the
 mails saying Python 2.1 did not compile in HP-UX and Python can not
 build with HP-UX. Please tell me, whether Python 2.1 can be build in
 HP-UX. If yes, please give me the stpes to do that.

python-dev is for development of the Python project.  Please use
comp.lang.python for other questions.  Thank you.
-- 
Aahz ([EMAIL PROTECTED])   * http://www.pythoncraft.com/

The joy of coding Python should be in seeing short, concise, readable
classes that express a lot of action in a small amount of clear code -- 
not in reams of trivial code that bores the reader to death.  --GvR
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


[Python-Dev] How do you get yesterday from a time object

2005-04-19 Thread Ralph Hilton
i'm a beginning python programmer.

I want to get the date for yesterday

nowTime = time.localtime(time.time())
print nowTime.
oneDay = 60*60*24 # number seconds in a day
yday = nowTime - oneDay  # -- generates an error
print yday.strftime(%Y-%m-%d)

How can I just get yesterday's day?  It a simple
concept yet it seems to be so hard to figure out.

What i'm worried about is if today is say
June 1, 2023
what is yesterday?   and how do i compute that?

Ralph Hilton



__ 
Do you Yahoo!? 
Plan great trips with Yahoo! Travel: Now over 17,000 guides!
http://travel.yahoo.com/p-travelguide
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] How do you get yesterday from a time object

2005-04-19 Thread Simon Brunning
On 4/19/05, Ralph Hilton [EMAIL PROTECTED] wrote:
 i'm a beginning python programmer.
 
 I want to get the date for yesterday

This is the wrong place for this question. Nip over to
http://mail.python.org/mailman/listinfo/python-list, and I'd be more
than happy answer it there...

-- 
Cheers,
Simon B,
[EMAIL PROTECTED],
http://www.brunningonline.net/simon/blog/
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Guido van Rossum
 (I apologize that this is my first post.  Please don't flame me into
 oblivion or think I'm a quack!)

(Having met JJ I can assure he's not a quack. But don't let that stop
the flames. :-)

 Have you guys considered the following syntax for anonymous blocks?  I
 think it's possible to parse given Python's existing syntax:
 
items.doFoo(
def (a, b) {
return a + b
},
def (c, d) {
return c + d
}
)
 
 Notice the trick is that there is no name between the def and the (,
 and the ) is followed by a {.
 
 I understand that there is hesitance to use {}.  However, you can
 think of this as a Python special case on the same level as using ;
 between statements on a single line.  From that perspective, it's not
 inconsistent at all.

It would be a lot less inconsistent if {...} would be acceptable
alternative block syntax everywhere.

But what exactly are you trying to accomplish here? I think that
putting the defs *before* the call (and giving the anonymous blocks
temporary local names) actually makes the code clearer:

def block1(a, b):
return a + b
def block2(c, d):
return c + d
items.doFoo(block1, block2)

This reflects a style pattern that I've come to appreciate more
recently: when breaking a call with a long argument list to fit on
your screen, instead of trying to find the optimal break points in the
argument list, take one or two of the longest arguments and put them
in local variables. Thus, instead of this:

self.disentangle(0x40,
 self.triangulation(The quick brown fox jumps over
the lazy dog),
 self.indent+1)

I'd recommend this:

tri = self.subcalculation(The quick brown fox jumps over the lazy dog)
self.disentangle(0x40, tri, self.indent+1)

IMO this is clearer, and even shorter!

If we apply this to the anonymous block problem, we may end up finding
lambda the ultimate compromise -- like a gentleman in the back of my
talk last week at baypiggies observed (unfortunately I don't know his
name).

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Brian Sabbey
Shannon -jj Behrens wrote:
Have you guys considered the following syntax for anonymous blocks?  I
think it's possible to parse given Python's existing syntax:
  items.doFoo(
  def (a, b) {
  return a + b
  },
  def (c, d) {
  return c + d
  }
  )
There was a proposal in the last few days on comp.lang.python that allows 
you to do this in a way that requires less drastic changes to python's 
syntax.  See the thread pre-PEP: Suite-Based Keywords (shamless plug) 
(an earlier, similar proposal is here: 
http://groups.google.co.uk/groups?selm=mailman.403.1105274631.22381.python-list 
%40python.org ).

In short, if doFoo is defined like:
def doFoo(func1, func2):
pass
You would be able to call it like:
doFoo(**):
def func1(a, b):
return a + b
def func2(c, d):
return c + d
That is, a suite can be used to define keyword arguments.
-Brian
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Pickling buffer objects.

2005-04-19 Thread Travis Oliphant
Greg Ewing wrote:
Travis Oliphant wrote:
I'm proposing to pickle the buffer object so that it unpickles as a 
string.

Wouldn't this mean you're only solving half the problem?
Unpickling a Numeric array this way would still use an
intermediate string.

Well, actually, unpickling in the new numeric uses the intermediate 
string as the memory (yes, I know it's not supposed to be mutable, but 
without a mutable bytes object what else are you supposed to do?). 

Thus, ideally we would have a mutable-bytes object with a separate 
pickle opcode.  Without this, then we overuse the string object.  But, 
since the string is only created by the pickle (and nobody else uses it, 
then what's the real harm).

So, in reality the previously-mentioned patch together with 
modificiations to Numeric's unpickling code actually solves the whole 
problem.

-Travis
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Guido van Rossum
 See the thread pre-PEP: Suite-Based Keywords (shamless plug)
 (an earlier, similar proposal is here:
 http://groups.google.co.uk/groups?selm=mailman.403.1105274631.22381.python-list
 %40python.org ).
 
 In short, if doFoo is defined like:
 
 def doFoo(func1, func2):
 pass
 
 You would be able to call it like:
 
 doFoo(**):
 def func1(a, b):
 return a + b
 def func2(c, d):
 return c + d
 
 That is, a suite can be used to define keyword arguments.

I'm still not sure how this is particularly solving a pressing problem
that isn't solved by putting the function definitions in front of the
call. I saw the first version of the proto-PEP and didn't think that
the motivating example (keeping the getx/setx methods passed to a
property definition out of the class namespace) was all that valuable.

Two more issues:

(1) It seems that *every* name introduced in the block automatically
becomes a keyword argument. This looks like a problem, since you could
easily need temporary variables there. (I don't see that a problem
with class bodies because the typical use there is only method and
property definitions and the occasional instance variable default.)

(2) This seems to be attaching a block to a specific function call but
there are more general cases: e.g. you might want to assign the return
value of doFoo() to a variable, or you might want to pass it as an
argument to another call.

*If* we're going to create syntax for anonymous blocks, I think the
primary use case ought to be cleanup operations to replace try/finally
blocks for locking and similar things. I'd love to have syntactical
support so I can write

blahblah(myLock):
code
code
code

instead of

myLock.acquire()
try:
code
code
code
finally:
myLock.release()

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Phillip J. Eby
At 11:55 AM 04/19/2005 -0700, Guido van Rossum wrote:
I'd recommend this:
tri = self.subcalculation(The quick brown fox jumps over the lazy dog)
self.disentangle(0x40, tri, self.indent+1)
IMO this is clearer, and even shorter!
What was your opinion on where as a lambda replacement?  i.e.
foo = bar(callback1, callback2) where:
def callback1(x):
print hello, 
def callback2(x):
print world!
I suspect that you like the define-first approach because of your tendency 
to ask questions first and read later.  That is, you want to know what 
callback1 and callback2 are before you see them passed to 
something.  However, other people seem to like to have the context first, 
then fill in the details of each callback later.

Interestingly, this syntax also works to do decoration, though it's not a 
syntax that was ever proposed for that.  e.g.:

foo = classmethod(foo) where:
def foo(cls,x,y,z):
# etc.
foo = property(get_foo,set_foo) where:
def get_foo(self):
# ...
def set_foo(self):
# ...
I don't mind @decorators, of course, but maybe they wouldn't be needed here.

If we apply this to the anonymous block problem, we may end up finding
lambda the ultimate compromise -- like a gentleman in the back of my
talk last week at baypiggies observed (unfortunately I don't know his
name).
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/pje%40telecommunity.com
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Phillip J. Eby
At 03:39 PM 04/19/2005 -0400, Phillip J. Eby wrote:
I suspect that you like the define-first approach because of your tendency 
to ask questions first and read later.
Oops; I forgot to put the smiley on that.  It was supposed to be a humorous 
reference to a comment Guido made in private e-mail about the Dr. Dobbs 
article I wrote on decorators.  He had said something similar about the way 
he reads articles, expecting the author to answer all his questions up 
front.  Without that context, the above sentence sounds like some sort of 
snippy remark that I did not intend it to be.  Sorry.  :(

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Facundo Batista
On 4/19/05, Guido van Rossum [EMAIL PROTECTED] wrote:

 I'm still not sure how this is particularly solving a pressing problem
 that isn't solved by putting the function definitions in front of the

Well.

As to what I've read in my short python experience, people wants to
change the language *not* because they have a problem that can not be
solved in a different way, but because they *like* to solve it in a
different way.

And you, making a stand against this, are a main Python feature.

.Facundo

Blog: http://www.taniquetil.com.ar/plog/
PyAr: http://www.python.org/ar/
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Brian Sabbey
Guido van Rossum wrote:
See the thread pre-PEP: Suite-Based Keywords (shamless plug)
(an earlier, similar proposal is here:
http://groups.google.co.uk/groups?selm=mailman.403.1105274631.22381.python-list
%40python.org ).
In short, if doFoo is defined like:
def doFoo(func1, func2):
pass
You would be able to call it like:
doFoo(**):
def func1(a, b):
return a + b
def func2(c, d):
return c + d
That is, a suite can be used to define keyword arguments.
I'm still not sure how this is particularly solving a pressing problem
that isn't solved by putting the function definitions in front of the
call. I saw the first version of the proto-PEP and didn't think that
the motivating example (keeping the getx/setx methods passed to a
property definition out of the class namespace) was all that valuable.
OK.  I think most people (myself included) who would prefer to define 
properties (and event handlers, etc.) in this way are motivated by the 
perception that the current method is just ugly.  I don't know that it 
solves any pressing problems.

Two more issues:
(1) It seems that *every* name introduced in the block automatically
becomes a keyword argument. This looks like a problem, since you could
easily need temporary variables there. (I don't see that a problem
with class bodies because the typical use there is only method and
property definitions and the occasional instance variable default.)
Combining the suite-based keywords proposal with the earlier, 'where' 
proposal (linked in my above post), you would be able to name variables 
individually in the case that temporary variables are needed:

f(x=x):
x = [i**2 for i in [1,2,3]]
(2) This seems to be attaching a block to a specific function call but
there are more general cases: e.g. you might want to assign the return
value of doFoo() to a variable, or you might want to pass it as an
argument to another call.
The 'where' proposal also doesn't have this problem.  Any expression is 
allowed.

*If* we're going to create syntax for anonymous blocks, I think the
primary use case ought to be cleanup operations to replace try/finally
blocks for locking and similar things. I'd love to have syntactical
support so I can write
blahblah(myLock):
   code
   code
   code
instead of
myLock.acquire()
try:
   code
   code
   code
finally:
   myLock.release()
Well, that was my other proposal, pre-PEP: Simple Thunks (there is also 
an implementation).  It didn't seem to go over all that well.  I am going 
to try to rewrite it and give more motivation and explanation (and maybe 
use 'with' and 'from' instead of 'do' and 'in' as keywords).

-Brian
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


[Python-Dev] Re: anonymous blocks

2005-04-19 Thread Reinhold Birkenfeld
Guido van Rossum wrote:
 What was your opinion on where as a lambda replacement?  i.e.
 
 foo = bar(callback1, callback2) where:
  def callback1(x):
  print hello, 
  def callback2(x):
  print world!
 
 I don't recall seeing this proposed, but I might have -- I thought of
 pretty much exactly this syntax in the shower a few days ago.

Gee, the time machine again!

Lots of proposals on c.l.py base on the introduction of expression
suites, that is, suites embedded in arbitrary expressions. My opinion
is that one will never find a suitable (;-) syntax, there's always the
question of where to put the code that follows the suite (and is part
of the same statement).

yours,
Reinhold

-- 
Mail address is perfectly valid!

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Barry Warsaw
On Tue, 2005-04-19 at 15:24, Guido van Rossum wrote:

 *If* we're going to create syntax for anonymous blocks, I think the
 primary use case ought to be cleanup operations to replace try/finally
 blocks for locking and similar things. I'd love to have syntactical
 support so I can write
 
 blahblah(myLock):
 code
 code
 code
 
 instead of
 
 myLock.acquire()
 try:
 code
 code
 code
 finally:
 myLock.release()

Indeed, it would be very cool to have these kind of (dare I say) block
decorators for managing resources.  The really nice thing about that is
when I have to protect multiple resources in a safe, but clean way
inside a single block.  Too many nested try/finally's cause you to
either get sloppy, or really ugly (or both!).

RSMotD (random stupid musing of the day): so I wonder if the decorator
syntax couldn't be extended for this kind of thing.

@acquire(myLock):
code
code
code

-Barry



signature.asc
Description: This is a digitally signed message part
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Eric Nieuwland
Guido van Rossum wrote:
tri = self.subcalculation(The quick brown fox jumps over the lazy 
dog)
self.disentangle(0x40, tri, self.indent+1)

IMO this is clearer, and even shorter!
But it clutters the namespace with objects you don't need. So the 
complete equivalent would be more close to:
	tri = self.subcalculation(The quick brown fox jumps over the lazy 
dog)
	self.disentangle(0x40, tri, self.indent+1)
	del tri
which seems a bit odd to me.

If we apply this to the anonymous block problem, we may end up finding
lambda the ultimate compromise -- like a gentleman in the back of my
talk last week at baypiggies observed (unfortunately I don't know his
name).
It wasn't me ;-) It seems this keeps getting back at you. Wish I had 
thought of this argument before.

--eric
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Guido van Rossum
 @acquire(myLock):
 code
 code
 code

It would certainly solve the problem of which keyword to use! :-) And
I think the syntax isn't even ambiguous -- the trailing colon
distinguishes this from the function decorator syntax. I guess it
would morph '@xxx' into user-defined-keyword.

How would acquire be defined? I guess it could be this, returning a
function that takes a callable as an argument just like other
decorators:

def acquire(aLock):
def acquirer(block):
aLock.acquire()
try:
block()
finally:
aLock.release()
return acquirer

and the substitution of

@EXPR:
CODE

would become something like

def __block():
CODE
EXPR(__block)

I'm not yet sure whether to love or hate it. :-)

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Brian Sabbey
Guido van Rossum wrote:
@acquire(myLock):
code
code
code
It would certainly solve the problem of which keyword to use! :-) And
I think the syntax isn't even ambiguous -- the trailing colon
distinguishes this from the function decorator syntax. I guess it
would morph '@xxx' into user-defined-keyword.
How would acquire be defined? I guess it could be this, returning a
function that takes a callable as an argument just like other
decorators:
def acquire(aLock):
   def acquirer(block):
   aLock.acquire()
   try:
   block()
   finally:
   aLock.release()
   return acquirer
and the substitution of
@EXPR:
   CODE
would become something like
def __block():
   CODE
EXPR(__block)
Why not have the block automatically be inserted into acquire's argument 
list?  It would probably get annoying to have to define inner functions 
like that every time one simply wants to use arguments.  For example:

def acquire(block, aLock):
aLock.acquire()
try:
block()
finally:
aLock.release()
@acquire(myLock):
code
code
code
Of course, augmenting the argument list in that way would be different 
than the behavior of decorators as they are now.

-Brian
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


[Python-Dev] Re: Re: anonymous blocks

2005-04-19 Thread Fredrik Lundh
Brian Sabbey wrote:
If suites were commonly used as above to define properties, event handlers 
and other callbacks, then I think most people would be able to comprehend 
what the first example above is doing much more quickly than the second.
wonderful logic, there.  good luck with your future adventures in language 
design.
/F
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Guido van Rossum
 Why not have the block automatically be inserted into acquire's argument
 list?  It would probably get annoying to have to define inner functions
 like that every time one simply wants to use arguments.

But the number of *uses* would be much larger than the number of
block decorators you'd be coding. If you find yourself writing new
block decorators all the time that's probably a sign you're too much
in love with the feature. :-)

 For example:
 
 def acquire(block, aLock):
  aLock.acquire()
  try:
  block()
  finally:
  aLock.release()
 
 @acquire(myLock):
 code
 code
 code
 
 Of course, augmenting the argument list in that way would be different
 than the behavior of decorators as they are now.

I don't like implicit modifications of argument lists other than by
method calls. It's okay for method calls because in the x.foo(a) ==
foo(x, a) equivalence, x is really close to the beginning of the
argument list.

And your proposal would preclude parameterless block decorators (or
turn them into an ugly special case), which I think might be quite
useful:

@forever:
infinite loop body

@ignore:
not executed at all

@require:
assertions go here

and so on.

(In essence, we're inventing the opposite of barewords in Perl here, right?)

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Tim Delaney
Guido van Rossum wrote:
As I said before, I'm not sure why keeping get_foo etc. out of the
class namespace is such a big deal. In fact, I like having them there
(sometimes they can even be handy, e.g. you might be able to pass the
unbound get_foo method as a sort key).
Not to mention that it's possible to override get_foo in subclasses if done 
right ...

Two approaches are here:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/408713
Tim Delaney 

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Josiah Carlson

[Guido van Rossum]
 @EXPR:
 CODE
 
 would become something like
 
 def __block():
 CODE
 EXPR(__block)
 
 I'm not yet sure whether to love or hate it. :-)

Is it preferable for CODE to execute in its own namespace (the above
being a literal translation of the given code), or for it to execute in
the originally defined namespace?

Deferring to Greg Ewing for a moment [1]:
They should be lexically scoped, not dynamically scoped.

Wrapped blocks in an old namespace, I believe, is the way to go,
especially for things like...

@synchronize(fooLock):
a = foo.method()

I cannot come up with any code for which CODE executing in its own
namespace makes sense.  Can anyone else?

discussion on the overlap with PEP 310 removed for brevity


 - Josiah

[1] http://mail.python.org/pipermail/python-dev/2005-March/052239.html
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Re: Re: anonymous blocks

2005-04-19 Thread Brian Sabbey
Fredrik Lundh wrote:
Brian Sabbey wrote:
If suites were commonly used as above to define properties, event handlers 
and other callbacks, then I think most people would be able to comprehend 
what the first example above is doing much more quickly than the second.
wonderful logic, there.  good luck with your future adventures in language 
design.

/F
I'm just trying to help python improve.  Maybe I'm not doing a very good 
job, I don't know.  Either way, there's no need to be rude.

If I've broken some sort of unspoken code of behavior for this list, then 
maybe it would be easier if you just 'spoke' it (perhaps in a private 
email or in the description of this list on python.org).

I'm not sure what your point is exactly.  Are you saying that any language 
feature that needs to be commonly used to be comprehendible will never be 
comprehendible because it will never be commonly used?  If so, then I do 
not think you have a valid point.  I never claimed that keyword suites 
*need* to be commonly used to be comprehendible.  I only said that if they 
were commonly used they would be more comprehendible than the alternative. 
I happen to also believe that seeing them once or twice is enough to make 
them about equally as comprehendible as the alternative.

-Brian
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread BJörn Lindqvist
 RSMotD (random stupid musing of the day): so I wonder if the decorator
 syntax couldn't be extended for this kind of thing.
 
 @acquire(myLock):
 code
 code
 code

Would it be useful for anything other than mutex-locking? And wouldn't
it be better to make a function of the block wrapped in a
block-decorator and then use a normal decorator?

-- 
mvh Björn
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Jack Diederich
On Tue, Apr 19, 2005 at 01:33:15PM -0700, Guido van Rossum wrote:
  @acquire(myLock):
  code
  code
  code
 
 It would certainly solve the problem of which keyword to use! :-) And
 I think the syntax isn't even ambiguous -- the trailing colon
 distinguishes this from the function decorator syntax. I guess it
 would morph '@xxx' into user-defined-keyword.
 
 How would acquire be defined? I guess it could be this, returning a
 function that takes a callable as an argument just like other
 decorators:
[snip]
 and the substitution of
 
 @EXPR:
 CODE
 
 would become something like
 
 def __block():
 CODE
 EXPR(__block)
 
 I'm not yet sure whether to love or hate it. :-)
 
I don't know what the purpose of these things is, but I do think
they should be like something else to avoid learning something new.

Okay, I lied, I do know what these are: namespace decorators
Namespaces are currently modules or classes, and decorators currently
apply only to functions.  The dissonance is that function bodies are
evaluated later and namespaces (modules and classes) are evaluated
immediately.  I don't know if adding a namespace that is only evaluated
later makes sense.  It is only an extra case but it is one extra case
to remember.  At best I have only channeled Guido once, and by accident[1]
so I'll stay out of the specifics (for a bit).

-jackdied

[1] during the decorator syntax bru-ha-ha at a Boston PIG meeting I
suggested Guido liked the decorator-before-function because it made
more sense in Dutch.  I was kidding, but someone who knows a little Dutch
(Deibel?) stated this was, in fact, the case.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Michael Walter
On 4/19/05, BJörn Lindqvist [EMAIL PROTECTED] wrote:
  RSMotD (random stupid musing of the day): so I wonder if the decorator
  syntax couldn't be extended for this kind of thing.
 
  @acquire(myLock):
  code
  code
  code
 
 Would it be useful for anything other than mutex-locking? And wouldn't
 it be better to make a function of the block wrapped in a
 block-decorator and then use a normal decorator?

Yes. Check how blocks in Smalltalk and Ruby are used for starters.

Regards,
Michael
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Re: anonymous blocks

2005-04-19 Thread Shane Hathaway
Fredrik Lundh wrote:
 Brian Sabbey wrote:
 doFoo(**):
 def func1(a, b):
 return a + b
 def func2(c, d):
 return c + d

 That is, a suite can be used to define keyword arguments.
 
 
 umm.  isn't that just an incredibly obscure way to write
 
def func1(a, b):
return a + b
def func2(c, d):
return c + d
doFoo(func1, func2)
 
 but with more indentation?

Brian's suggestion makes the code read more like an outline.  In Brian's
example, the high-level intent stands out from the details, while in
your example, there is no visual cue that distinguishes the details from
the intent.  Of course, lambdas are even better, when it's possible to
use them:

doFoo((lambda a, b: a + b), (lambda c, d: c + d))

Shane
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Shane Holloway (IEEE)
*If* we're going to create syntax for anonymous blocks, I think the
primary use case ought to be cleanup operations to replace try/finally
blocks for locking and similar things. I'd love to have syntactical
support so I can write
I heartily agree!  Especially when you have very similar try/finally 
code you use in many places, and wish to refactor it into a common area. 
 If this is done, you are forced into a callback form like follows::

def withFile(filename, callback):
aFile = open(filename, 'r')
try:
   result = callback(aFile)
finally:
   aFile.close()
return result
class Before:
def readIt(self, filename):
def doReading(aFile):
self.readPartA(aFile)
self.readPartB(aFile)
self.readPartC(aFile)
withFile(filename, doReading)
Which is certainly functional.  I actually use the idiom frequently. 
However, my opinion is that it does not read smoothly.  This form 
requires that I say what I'm doing with something before I know the 
context of what that something is.  For me, blocks are not about 
shortening the code, but rather clarifying *intent*.  With this proposed 
change, the code becomes::

class After:
def readIt(self, filename):
withFile(filename):
self.readPartA(aFile)
self.readPartB(aFile)
self.readPartC(aFile)
In my opinion, this is much smoother to read.  This particular example 
brings up the question of how arguments like aFile get passed and 
named into the block.  I anticipate the need for a place to put an 
argument declaration list.  ;)  And no, I'm not particularly fond of 
Smalltalk's solution with | aFile |, but that's just another opinion 
of aesthetics.

Another set of question arose for me when Barry started musing over the 
combination of blocks and decorators.  What are blocks?  Well, obviously 
they are callable.  What do they return?  The local namespace they 
created/modified?  How do blocks work with control flow statements like 
break, continue, yield, and return?  I think these questions 
have good answers, we just need to figure out what they are.  Perhaps 
break and continue raise exceptions similar to StopIteration in this 
case?

As to the control flow questions, I believe those answers depend on how 
the block is used.  Perhaps a few different invocation styles are 
applicable.  For instance, the method block.suite() could return a tuple 
such as (returnedValue, locals()), where block.__call__() would simply 
return like any other callable.

It would be good to figure out what the control flow difference is between::
def readAndReturn(self, filename):
withFile(filename):
a = self.readPartA(aFile)
b = self.readPartB(aFile)
c = self.readPartC(aFile)
return (a, b, c)
and::
def readAndReturn(self, filename):
withFile(filename):
a = self.readPartA(aFile)
b = self.readPartB(aFile)
c = self.readPartC(aFile)
return (a, b, c)
Try it with yield to further vex the puzzle.  ;)
Thanks for your time!
-Shane Holloway
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] anonymous blocks

2005-04-19 Thread Steven Bethard
On 4/19/05, Alex Martelli [EMAIL PROTECTED] wrote:
 Well, one obvious use might be, say:
 
 @withfile('foo.bar', 'r'):
  content = thefile.read()
 
 but that would require the decorator and block to be able to interact
 in some way, so that inside the block 'thefile' is defined suitably.
 
  it be better to make a function of the block wrapped in a
  block-decorator and then use a normal decorator?
 
  From a viewpoint of namespaces, I think it would be better to have the
 block execute in the same namespace as the code surrounding it, not a
 separate one (assigning to 'content' would not work otherwise), so a
 nested function would not be all that useful.  The problem might be,
 how does the _decorator_ affect that namespace.  Perhaps:
 
 def withfile(filename, mode='r'):
  openfile = open(filename, mode)
  try:
  block(thefile=openfile)
  finally:
  openfile.close()
 
 i.e., let the block take keyword arguments to tweak its namespace (but
 assignments within the block should still affect its _surrounding_
 namespace, it seems to me...).

I'm not a big fan of this means of tweaking the block's namespace.  It
means that if you use a block decorator, you might find that names
have been 'magically' added to your namespace.  This has a bad code
smell of too much implicitness to me...

I believe this was one of the reasons Brian Sabbey's proposal looked
something like:

do unpack_list in returnval = callable(params):
code

This way you could write the block above as something like:

def withfile(filename, mode='r'):
def _(block):
openfile = open(filename, mode)
try:
block(openfile)
finally:
openfile.close()
return _

do thefile in withfile('foo.bar', 'r'):
content = thefile.read()

where 'thefile' is explicitly named in the do/in-statement's unpack
list.  Personally, I found the 'do' and 'in' keywords very confusing,
but I do like the fact that the parameters passed to the thunk/block
are expanded in an explicit unpack list.  Using @, I don't see an easy
way to insert such an unpack list...

Of course, even with the unpack list, you still have to know what kind
of arguments the function calls your block with.  And because these
only appear within the code, e.g.
block(openfile)
you can't rely on easily accessible things like the function's
signature.  It means that unlike other callables that can basically
document parameters and return type, block decorators would have to
document parameters, return type, and the parameters with which they
call the block...

STeVe
-- 
You can wordify anything if you just verb it.
--- Bucky Katt, Get Fuzzy
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com