optional arguments.
map(lambda x, one=1: x + one, ...)

it is entirely possible, however, to implement let in python.
def let(**kw):
    sys._getframe(2).f_locals.update(kw)

def begin(*a):
    return a[-1]

map(lambda x: begin(let(one=1), x+one), range(10))

i really should warn you, though, that most pythoneers will cringe at
code like that, no matter how well they understand it. write python in
python, and you'll have more friends.


[EMAIL PROTECTED] wrote:
> What is the idiomatically appropriate Python way to pass, as a "function-type 
> parameter", code that is most clearly written with a local variable?
>
> For example, map takes a function-type parameter:
>
>    map(lambda x: x+1, [5, 17, 49.5])
>
> What if, instead of just having x+1, I want an expression that is most 
> clearly coded with a variable that is needed _only_ inside the lambda, e.g. 
> if I wanted to use the name "one" instead of 1:
>
>    map(lambda x: (one = 1  x+one), [5, 17, 49.5])
>
> This sort of thing is of course straightforward in many other languages with 
> anonymous functions (Scheme, Haskell, Smalltalk, etc), and I saw in the 
> archives the discussion from 2003 about "How do I get Scheme-like let 
> bindings in Python". Many of the answers seem to boil down to "You should not 
> write Scheme programs in Python, you should write Python programs in Python". 
> As someone new to Python, I'd like a little more detail on this, so I'm 
> asking _what_ I should do when I want to pass, to something like map, code 
> that is most clearly expressed with a local variable?
>
> Do I
>
>   a) give up on using a local variable and just substitute the value in its 
> place (going back to my original use of map),
>
>   b) give up on using an anonymous function and create a named "successor" 
> function with "def",
>
>   c) give up on making "one" local to the lambda and create it in the scope 
> in which I'm calling map, even if I don't otherwise need it there,
>
>   d) give up on using Python and go back to Scheme, or
>
>   e) do something else clever and Pythonic that I don't know about yet?
>
> What is the idiomatically correct way to do this in Python?
>
> Thanks for any constructive advice you can give,
>                                               Dave Wonnacott
>
>
> P.S., For those who want a bit more context about what I'm doing, I'll 
> provide it -- anyone else is welcome to skip the rest of this message.
>
>
> As you may guess, I am in the process of learning Python. I have some 
> experience with C/C++ and Scheme and other forms of Lisp, as well as passing 
> familiarity with a bunch of other languages.
>
> I teach an introductory CS course in which I cover a variety of topics that I 
> believe are central to computer science and can be expressed in any language, 
> such as algorithm design, unit and integration testing, writing code that 
> maintains an invariant property of a set of variables. However, I do not like 
> the "language-free" or "all-pseudocode" approach to teaching -- I believe all 
> examples should be shown in a real language, and that the code should be as 
> true to the customary idioms of that language as possible. This limits my 
> choice of language somewhat, since I include elements of functional 
> programming, imperative programming, and object-oriented programming -- I'm 
> not happy doing things like cramming functions into unnecessary classes in 
> Java. However, I currently believe that Python will be at least as good as 
> C++ for what I want to do, and am exploring the details of how it would work 
> out.
>
> One of the things I'm doing is discussing various styles of thinking about 
> the execution of an algorithm, specifically as a process of textual 
> substitution of equals for equals (as one would generally do in Haskell or 
> other functional languages, or in mathematics) or a sequence of ordered steps 
> to be followed (as one would generally do in imperative languages). Note 
> that, while Haskell programmers may say that substitution is the true way 
> that their programs are executed, and C++ programmers may say that a sequence 
> of ordered steps is what's "really going on", the actual process of going 
> from your source code to the output of your program can be blending of these 
> two techniques -- for example, a C++ compiler may perform substitution where 
> it is legal to do so, producing a machine language program that is executed 
> _mostly_ in order (though a processor may commute the order of execution 
> where it is legal to do so). Anyway, in almost any language, there are _some_ 
> ways to per!
 fo!
>  rm substitutions without changing the result of a piece of code (e.g. 
> substituting the value of a variable that is only assigned once, for each of 
> its uses), and some things that can be visualized in terms of execution of 
> steps even if one wishes to do so (even in a language like Haskell).
>
> The question of the use of variables inside a lambda is relevant to my 
> understanding of the contexts in which one can think of Python programs in 
> terms of substitution, as well as my learning of proper Python idioms.

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

Reply via email to