On Fri, Jun 8, 2018 at 10:47 PM Wes Turner <wes.tur...@gmail.com> wrote:
> Python parameter and return type hints are expressed as function > annotations which import and derive types from the typing module and the > typeshed. > > - PEP 3107 -- Function Annotations > https://www.python.org/dev/peps/pep-3107/ > > - PEP 0484 -- Type Hints > https://www.python.org/dev/peps/pep-0484/ > > - https://www.python.org/dev/peps/pep-0484/#function-method-overloading > - https://www.python.org/dev/peps/pep-0484/#the-typing-module > - > https://docs.python.org/3/library/typing.html#classes-functions-and-decorators > > - https://docs.python.org/3/tutorial/controlflow.html#function-annotations > > - from typing import List, MutableMapping, Hashable, Iterable, > AsyncGenerator > > https://docs.python.org/3/library/typing.html#classes-functions-and-decorators > > - https://github.com/python/typeshed > - https://github.com/python/typeshed/tree/master/third_party/2and3 > > - FunctionType, CodeType, > MappingProxyType, SimpleNamespace, > GeneratorType, AsyncGeneratorType, > CoroutineType, > MethodType, BuiltinFunctionType, > TracebackType, FrameType > https://github.com/python/typeshed/blob/master/stdlib/3/types.pyi#L25 > https://github.com/python/typeshed/blob/master/stdlib/3/inspect.pyi > > > > On Fri, Jun 8, 2018 at 6:37 PM kirby urner <kirby.ur...@gmail.com> wrote: > >> >> I enjoyed our discussion of post-its versus buckets, or not versus: >> objects in memory take up space, and so are bucket-like, but look how many >> labels (post-its) some of them have! >> > > sys.getrefcount(None) > > >> >> I find it useful to have memory take shape as something finite, even when >> we're enjoying more of it on contemporary devices. Python is biased >> against making gratuitous copies, or against copying gratuitously, we maybe >> could say. >> >> Memory is respected. L.sort() is "in place" whereas sorted(L) leaves L >> untouched. This "inplace" idea carries forward as a keyword argument >> (named parameter) in many cases. >> >> I confess, in my own courses, I could do more with deepcopy, explaining >> what it is and how to do it. I'll get on it. >> > https://docs.python.org/3/library/copy.html > > https://github.com/python/cpython/blob/master/Lib/copy.py > - copy() > - deepcopy() > > https://github.com/python/cpython/blob/master/Objects/dictobject.c#L2520 > - PyDict_copy > > https://docs.python.org/3/library/pprint.html#pprint.PrettyPrinter > - pprint(depth=n) > a, b = [1,], [2,] > a.append(a) > pprint.pprint(a) > pprint.pprint(a, depth=1) > > > "Why are these methods faster?" > - https://pandas.pydata.org/pandas-docs/stable/enhancingperf.html > - https://ray.readthedocs.io/en/latest/pandas_on_ray.html > - https://github.com/alex/zero_buffer/blob/master/zero_buffer.py > >> >> When is it a copy, when a view? is a discussion in pandas as well. >> > - https://github.com/apache/arrow > - https://arrow.apache.org/ > - zero-copy streaming data > > >> Another topic: >> >> Another pair of categories I like to tease apart are function versus >> type, when it comes to what's a callable. >> >> range() used to be a function that returned a list. Now it returns an >> instance of the range type, a sequence. More like dict(), int() and so >> on. Not like hex(). >> >> enumerate() and zip() are likewise calls to classes, triggers to >> __init__s (birth methods). We're asking for instances. We're calling >> types. >> >> Functions return objects too, so one should not say the difference is >> whether they return objects. Both do. >> >> The difference is instances of a type live on with the methods of that >> type, whereas a function does not directly bequeath its methods to any >> "children". >> > > class A(): pass > def func(): print(1) > A.__dict__['func'] = func > a = () > a.__dict__['here'] = func > a.__class__.__dict__['func2'] = func > b = A() > assert hasattr(b, 'here') == False > assert hasattr(a, 'func') == True > assert hasattr(a, 'func2') == True > # isinstance / MRO > >> >> >> Functions are factories of other than instances of themselves, even if >> they return other functions. >> >> What nuances this view is that FunctionType is a type of object, so >> calling a function is calling a type. >> >> However, the way a function responds to being called is like an instance >> does when its type has a __call__ method defined. >> > > Is a generator a callable? > > >> >> === >> >> One of my favorite ways to connect classes and functions is to show how a >> class might "eat" a function such that the function remains callable, and >> yet the instances may also multiply, in which case the functions compose to >> create other functions: >> >> @Composable # class >> def F(x): >> return x + 2 >> >> @Composable # class >> def G(x): >> return 2 * x >> >> H = F * F * F * G * G >> >> (H is now a "pipeline" of F(F(F(G(G(x))))) ) >> > > From > https://medium.com/@westurner/the-fn-py-fn-monad-optionable-f11ceefb567b > : > "The fn.py fn.monad.optionable decorator — @optionable — makes > functional composition with chaining easy, too: > https://github.com/kachayev/fn.py/blob/master/README.rst#functional-style-for-error-handling > " > > >> >> More on REPL.it: >> >> https://repl.it/@kurner/Composing-Functions >> >> (red X warning flag next to lambda expression is bogus, runs fine, Spyder >> is smarter) >> >> Kirby >> >> PS: this morning I saw Guido's talk at Stanford on type annotations, >> which he recently tweeted about [1]. I definitely include mentioning to be >> on the lookout for such syntax going forward, and not being thrown by it. >> I emphasize that standard core Python sees annotations more as a type of >> documentation, with 3rd party hooks understanding them more as directives. >> > > Is there anything to do runtime type checking from annotations (just like > pycontracts; maybe even with the additional constraints language)? > > > >> >> [1] >> https://twitter.com/gvanrossum/status/1003792557652914177 >> (June 4) >> _______________________________________________ >> Edu-sig mailing list >> Edu-sig@python.org >> https://mail.python.org/mailman/listinfo/edu-sig >> >
_______________________________________________ Edu-sig mailing list Edu-sig@python.org https://mail.python.org/mailman/listinfo/edu-sig