Comments (2)
I think any linear scan of the registered functions is off the table, because it's so slow and overload
already does that. There is the possibility of using inspect.Signature.bind
once to get the positional arguments for use in dispatch. That would require having a definitive signature, and would still be slower. In my testing with a single argument it would be about 5x slower than the current implementation, which is on par with functools.singledispatch
.
Which reminds me of discussion #12, because another oddity about singledispatch
is that it effectively requires a base implementation with no annotations (which is to say it ignores them). That could be an elegant way for a user to indicate that they're willing to take the performance hit, by providing the definitive signature needed anyway.
So it would look like:
@multimethod
def f(foo):
pass
@multimethod
def f(foo: str):
return foo
f(foo="bar")
from multimethod.
Another concern is that singledispatch
requires positional arguments.
from multimethod.
Related Issues (20)
- Regression in 1.10 regarding typing.Literal HOT 6
- Clarify if `@multimethod` works with position-or-keyword arguments HOT 1
- Clarify "Positional-only" in Readme HOT 1
- type `__args__` should be retrieved using `typing.get_args()` HOT 2
- Version 1.11 does not allow concrete protocol subclasses HOT 7
- Version 1.11 breaks dispatch on Union objects with custom metaclass HOT 3
- Subclass methods
- TypeError in new version 1.11.1 HOT 6
- `Self` cannot be used with `issubclass` HOT 8
- Variable positional arguments HOT 2
- multimethod does not recognize correctly 'collections.abc.Container' types HOT 7
- TypeError: type 'dict_keys' is not an acceptable base type
- Strange behaviour with pandas function application methods HOT 1
- multimethod "forgets" keyword only arguments HOT 2
- Documentation isn't updated? HOT 5
- Overload fails on Optional arguments HOT 1
- flake8 reports redefinition when using multimethod HOT 2
- Classmethod fails on the uninitialized class object HOT 2
- Different names for the multimethod in a class does not work with staticmethod and classmethod decorators HOT 1
- PEP about multiple dispatch and @typing.overload
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from multimethod.