How to make a function composer
up vote
10
down vote
favorite
I am trying to make a function that rounds other functions for my university degree . For example I would like to call the round_sqrt = round(sqrt)
and when i call the round_sqrt(5)
it has to shows me 2
instead of 2.23606797749979
. What I am trying is this:
def rounding(funct):
return round(funct)
but this doesn't work.
EDIT: The function should have only one parameter. For example
the start of the function should be
def rounding(func):
so in this function the funct
function needs to be rounded.
so when I call rounding(abs)(3.2)
it shows me 3
.
python python-3.x python-decorators function-composition
|
show 1 more comment
up vote
10
down vote
favorite
I am trying to make a function that rounds other functions for my university degree . For example I would like to call the round_sqrt = round(sqrt)
and when i call the round_sqrt(5)
it has to shows me 2
instead of 2.23606797749979
. What I am trying is this:
def rounding(funct):
return round(funct)
but this doesn't work.
EDIT: The function should have only one parameter. For example
the start of the function should be
def rounding(func):
so in this function the funct
function needs to be rounded.
so when I call rounding(abs)(3.2)
it shows me 3
.
python python-3.x python-decorators function-composition
5
You are looking for function composition. Mathematically,h = f ∘ g
is defined ash(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.
– chepner
2 days ago
7
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
– Adam Smith
2 days ago
1
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
– chepner
2 days ago
2
You can either leave the question to help other people or delete it, but please don't just remove all the content.
– Alex
2 days ago
1
@AdamSmith Sounds like you were composinghate . love . hate . love
– Mateen Ulhaq
yesterday
|
show 1 more comment
up vote
10
down vote
favorite
up vote
10
down vote
favorite
I am trying to make a function that rounds other functions for my university degree . For example I would like to call the round_sqrt = round(sqrt)
and when i call the round_sqrt(5)
it has to shows me 2
instead of 2.23606797749979
. What I am trying is this:
def rounding(funct):
return round(funct)
but this doesn't work.
EDIT: The function should have only one parameter. For example
the start of the function should be
def rounding(func):
so in this function the funct
function needs to be rounded.
so when I call rounding(abs)(3.2)
it shows me 3
.
python python-3.x python-decorators function-composition
I am trying to make a function that rounds other functions for my university degree . For example I would like to call the round_sqrt = round(sqrt)
and when i call the round_sqrt(5)
it has to shows me 2
instead of 2.23606797749979
. What I am trying is this:
def rounding(funct):
return round(funct)
but this doesn't work.
EDIT: The function should have only one parameter. For example
the start of the function should be
def rounding(func):
so in this function the funct
function needs to be rounded.
so when I call rounding(abs)(3.2)
it shows me 3
.
python python-3.x python-decorators function-composition
python python-3.x python-decorators function-composition
edited yesterday
Alex
10.1k32353
10.1k32353
asked 2 days ago
php kubrick
624
624
5
You are looking for function composition. Mathematically,h = f ∘ g
is defined ash(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.
– chepner
2 days ago
7
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
– Adam Smith
2 days ago
1
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
– chepner
2 days ago
2
You can either leave the question to help other people or delete it, but please don't just remove all the content.
– Alex
2 days ago
1
@AdamSmith Sounds like you were composinghate . love . hate . love
– Mateen Ulhaq
yesterday
|
show 1 more comment
5
You are looking for function composition. Mathematically,h = f ∘ g
is defined ash(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.
– chepner
2 days ago
7
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
– Adam Smith
2 days ago
1
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
– chepner
2 days ago
2
You can either leave the question to help other people or delete it, but please don't just remove all the content.
– Alex
2 days ago
1
@AdamSmith Sounds like you were composinghate . love . hate . love
– Mateen Ulhaq
yesterday
5
5
You are looking for function composition. Mathematically,
h = f ∘ g
is defined as h(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.– chepner
2 days ago
You are looking for function composition. Mathematically,
h = f ∘ g
is defined as h(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.– chepner
2 days ago
7
7
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
– Adam Smith
2 days ago
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
– Adam Smith
2 days ago
1
1
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
– chepner
2 days ago
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
– chepner
2 days ago
2
2
You can either leave the question to help other people or delete it, but please don't just remove all the content.
– Alex
2 days ago
You can either leave the question to help other people or delete it, but please don't just remove all the content.
– Alex
2 days ago
1
1
@AdamSmith Sounds like you were composing
hate . love . hate . love
– Mateen Ulhaq
yesterday
@AdamSmith Sounds like you were composing
hate . love . hate . love
– Mateen Ulhaq
yesterday
|
show 1 more comment
3 Answers
3
active
oldest
votes
up vote
11
down vote
accepted
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator ∘
for functions: round_sqrt = round ∘ sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
– slider
2 days ago
Yeah, I don't know wherez
came from.
– chepner
2 days ago
Wouldn't it be cleaner to use a lambda insidecompose
?
– Eric Duminil
yesterday
I finddef
to be clearer when it's possible to use it.
– chepner
yesterday
add a comment |
up vote
25
down vote
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
13
Hey look, a decorator!
– Adam Smith
2 days ago
I cant understand anything. The answer should be more easier I think
– php kubrick
2 days ago
5
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
– Adam Smith
2 days ago
I cant understand the *args, **kwargs
– php kubrick
2 days ago
5
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/…
– Adam Smith
2 days ago
|
show 4 more comments
up vote
3
down vote
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
add a comment |
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
11
down vote
accepted
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator ∘
for functions: round_sqrt = round ∘ sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
– slider
2 days ago
Yeah, I don't know wherez
came from.
– chepner
2 days ago
Wouldn't it be cleaner to use a lambda insidecompose
?
– Eric Duminil
yesterday
I finddef
to be clearer when it's possible to use it.
– chepner
yesterday
add a comment |
up vote
11
down vote
accepted
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator ∘
for functions: round_sqrt = round ∘ sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
– slider
2 days ago
Yeah, I don't know wherez
came from.
– chepner
2 days ago
Wouldn't it be cleaner to use a lambda insidecompose
?
– Eric Duminil
yesterday
I finddef
to be clearer when it's possible to use it.
– chepner
yesterday
add a comment |
up vote
11
down vote
accepted
up vote
11
down vote
accepted
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator ∘
for functions: round_sqrt = round ∘ sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator ∘
for functions: round_sqrt = round ∘ sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
edited 2 days ago
answered 2 days ago
chepner
237k29222318
237k29222318
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
– slider
2 days ago
Yeah, I don't know wherez
came from.
– chepner
2 days ago
Wouldn't it be cleaner to use a lambda insidecompose
?
– Eric Duminil
yesterday
I finddef
to be clearer when it's possible to use it.
– chepner
yesterday
add a comment |
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
– slider
2 days ago
Yeah, I don't know wherez
came from.
– chepner
2 days ago
Wouldn't it be cleaner to use a lambda insidecompose
?
– Eric Duminil
yesterday
I finddef
to be clearer when it's possible to use it.
– chepner
yesterday
Shouldn't
return f(g(z))
be return f(g(x))
?– slider
2 days ago
Shouldn't
return f(g(z))
be return f(g(x))
?– slider
2 days ago
Yeah, I don't know where
z
came from.– chepner
2 days ago
Yeah, I don't know where
z
came from.– chepner
2 days ago
Wouldn't it be cleaner to use a lambda inside
compose
?– Eric Duminil
yesterday
Wouldn't it be cleaner to use a lambda inside
compose
?– Eric Duminil
yesterday
I find
def
to be clearer when it's possible to use it.– chepner
yesterday
I find
def
to be clearer when it's possible to use it.– chepner
yesterday
add a comment |
up vote
25
down vote
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
13
Hey look, a decorator!
– Adam Smith
2 days ago
I cant understand anything. The answer should be more easier I think
– php kubrick
2 days ago
5
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
– Adam Smith
2 days ago
I cant understand the *args, **kwargs
– php kubrick
2 days ago
5
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/…
– Adam Smith
2 days ago
|
show 4 more comments
up vote
25
down vote
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
13
Hey look, a decorator!
– Adam Smith
2 days ago
I cant understand anything. The answer should be more easier I think
– php kubrick
2 days ago
5
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
– Adam Smith
2 days ago
I cant understand the *args, **kwargs
– php kubrick
2 days ago
5
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/…
– Adam Smith
2 days ago
|
show 4 more comments
up vote
25
down vote
up vote
25
down vote
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
edited 2 days ago
answered 2 days ago
Alex
10.1k32353
10.1k32353
13
Hey look, a decorator!
– Adam Smith
2 days ago
I cant understand anything. The answer should be more easier I think
– php kubrick
2 days ago
5
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
– Adam Smith
2 days ago
I cant understand the *args, **kwargs
– php kubrick
2 days ago
5
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/…
– Adam Smith
2 days ago
|
show 4 more comments
13
Hey look, a decorator!
– Adam Smith
2 days ago
I cant understand anything. The answer should be more easier I think
– php kubrick
2 days ago
5
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
– Adam Smith
2 days ago
I cant understand the *args, **kwargs
– php kubrick
2 days ago
5
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/…
– Adam Smith
2 days ago
13
13
Hey look, a decorator!
– Adam Smith
2 days ago
Hey look, a decorator!
– Adam Smith
2 days ago
I cant understand anything. The answer should be more easier I think
– php kubrick
2 days ago
I cant understand anything. The answer should be more easier I think
– php kubrick
2 days ago
5
5
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
– Adam Smith
2 days ago
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
– Adam Smith
2 days ago
I cant understand the *args, **kwargs
– php kubrick
2 days ago
I cant understand the *args, **kwargs
– php kubrick
2 days ago
5
5
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/…
– Adam Smith
2 days ago
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/…
– Adam Smith
2 days ago
|
show 4 more comments
up vote
3
down vote
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
add a comment |
up vote
3
down vote
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
add a comment |
up vote
3
down vote
up vote
3
down vote
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
answered 2 days ago
jpp
79.3k184693
79.3k184693
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53194500%2fhow-to-make-a-function-composer%23new-answer', 'question_page');
}
);
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
5
You are looking for function composition. Mathematically,
h = f ∘ g
is defined ash(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.– chepner
2 days ago
7
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
– Adam Smith
2 days ago
1
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
– chepner
2 days ago
2
You can either leave the question to help other people or delete it, but please don't just remove all the content.
– Alex
2 days ago
1
@AdamSmith Sounds like you were composing
hate . love . hate . love
– Mateen Ulhaq
yesterday