?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

Simple dynamic context-wrapper functions in Python - morfizm


Mar. 10th, 2011 06:33 pm Simple dynamic context-wrapper functions in Python

def wrapper(context):
    def single_argument_function(x):
        print('%s %s' % (x, context))
    return single_argument_function

a = wrapper(1)
a(5) # prints 5 1
a(6) # prints 6 1
a = wrapper(2)
a(7) # prints 7 2
a(8) # prints 8 2

Current Mood: satisfiedloves Python

7 comments - Leave a commentPrevious Entry Share Next Entry

Comments:

From:_m_e_
Date:March 11th, 2011 04:06 am (UTC)
(Link)
А нельзя написать что-то вроде
def wrapper(context)
    return lamba x: print('%s %s' % (x, context))

А то даже длиннее, чем на C# получается :)

From:_m_e_
Date:March 11th, 2011 04:55 am (UTC)
(Link)
Да и на С++ даже короче -
std::function<void (int)> wrapper(int y) 
{     
    return [y](int x) { std::cout << x << " " << y << std::endl; }; 
} 
 
int main()
{
    auto a = wrapper(1);
    a(5);
    a(6);
    return 0;
}
From:dennyrolling
Date:March 11th, 2011 06:19 am (UTC)
(Link)
мне кажется на плюсах все же не прочитать. сравни с жабаскриптом, все очевидно :)
From:archaicos
Date:March 11th, 2011 04:46 am (UTC)
(Link)
Я подобное в Lisp/Scheme видел. Closure что-ли называлось.
From:coolbaskin
Date:March 27th, 2011 08:58 am (UTC)
(Link)
Ага. В Perl тоже имеются.

sub wrapper
{
my $i = shift;
return sub { print shift, " $i\n" };
}
From:dennyrolling
Date:March 11th, 2011 06:18 am (UTC)
(Link)
big deal

function wrapper(context) {
return function(x) { alert(x + " " + context); };
};

var a = wrapper(1);
a(5); // alerts 5 1
// etc
From:dennyrolling
Date:March 11th, 2011 06:27 am (UTC)
(Link)
еще модно делать так:

function wrapper(context) {
var t = 0;
return function(x) { alert( ++t + x + " " + context); };
};

var a = wrapper(1);
a(5); // alerts 6 1
a(5); // alerts 7 1