diff options
Diffstat (limited to 'research/python.md')
-rw-r--r-- | research/python.md | 226 |
1 files changed, 0 insertions, 226 deletions
diff --git a/research/python.md b/research/python.md deleted file mode 100644 index 0051bc0..0000000 --- a/research/python.md +++ /dev/null @@ -1,226 +0,0 @@ -[[!meta title="Python"]] - -## Learning Python - -### Which version to start? 2.x or 3.x? - -Short answer: start learning 3.x and, if needed, check the differences with 2.x. - -From [Should I use Python 2 or Python 3 for my development activity?](Should I use Python 2 or Python 3 for my development activity?): - - Besides, several aspects of the core language (such as print and exec being - statements, integers using floor division) have been adjusted to be easier for - newcomers to learn and to be more consistent with the rest of the language, and - old cruft has been removed (for example, all classes are now new-style, - "range()" returns a memory efficient iterable, not a list as in 2.x). - - [...] - - In particular, instructors introducing Python to new programmers should - consider teaching Python 3 first and then introducing the differences in Python - 2 afterwards (if necessary), since Python 3 eliminates many quirks that can - unnecessarily trip up beginning programmers trying to learn Python 2. - -Also: - -* [Python Future: Easy, clean, reliable Python 2/3 compatibility](http://python-future.org/). -* [Should I learn Python 2 or 3?](https://www.dataquest.io/blog/python-2-or-3/). - -### General - -* Everything is an object. Really? What about symbols like + - and =? -* The `dir()` and `help()` functions are really useful. -* Great idea: iteration protocol. -* There are sequences and sum operations common for all types and specific type operations. - -### Iteration and optimization - - In general, leading and trailing double underscores is the naming pattern - Python uses for implementation details. The names without the underscores in - this list are the callable methods on string objects. - -### Polymorphism - -Python encourages polymorphism: - - This is related to the idea of polymorphism mentioned earlier, and it stems - from Python’s lack of type declarations. As you’ll learn, in Python, we code to - object interfaces (operations supported), not to types. That is, we care what - an object does, not what it is. Not caring about specific types means that code - is automatically applicable to many of them—any object with a compatible - interface will work, regardless of its specific type. Although type checking is - supported—and even required in some rare cases—you’ll see that it’s not usually - the “Pythonic” way of thinking. In fact, you’ll find that polymorphism is - probably the key idea behind using Python well. - -### Numeric Display Formats - -* [14. Floating Point Arithmetic: Issues and Limitations — Python 2.7.13 documentation](https://docs.python.org/2/tutorial/floatingpoint.html) -* [What Every Computer Scientist Should Know About Floating-Point Arithmetic](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) -* [Floating-point arithmetic - Wikipedia](https://en.wikipedia.org/wiki/Floating-point_arithmetic). - - This floating-point limitation is especially apparent for values that cannot be - represented accurately given their limited number of bits in memory. - - [...] - - fractions and decimals both allow more intuitive and accurate results than - floating points sometimes can, in different ways—by using rational - representation and by limiting precision - -### Types - - More formally, there are three major type (and operation) categories in Python - that have this generic nature: - - Numbers (integer, floating-point, decimal, fraction, others) - Support addition, multiplication, etc. - - Sequences (strings, lists, tuples) - Support indexing, slicing, concatenation, etc. - - Mappings (dictionaries) - Support indexing by key, etc. - - [...] - - The major core types in Python break down as follows: - - Immutables (numbers, strings, tuples, frozensets) - None of the object types in the immutable category support in-place changes, - though we can always run expressions to make new objects and assign their - results to variables as needed. - - Mutables (lists, dictionaries, sets, bytearray) - Conversely, the mutable types can always be changed in place with operations - that do not create new objects. Although such objects can be copied, in-place - changes support direct modification. - -So remember that when [copying](https://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list#2612815) -or referencing a list. - -Also, [take care with handling mutables as arguments and as default arguments](http://www.thedigitalcatonline.com/blog/2015/02/11/default-arguments-in-python/), -also explained [here](https://docs.python.org/3/tutorial/controlflow.html#default-argument-values) and [here](https://docs.python-guide.org/writing/gotchas/) -(common gotchas). - -From [Scopes an Namespaces](https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespaces), telling that assignments bind names to objects: - - A special quirk of Python is that – if no global statement is in effect – - assignments to names always go into the innermost scope. Assignments do not - copy data — they just bind names to objects. The same is true for deletions: - the statement del x removes the binding of x from the namespace referenced by - the local scope. In fact, all operations that introduce new names use the local - scope: in particular, import statements and function definitions bind the - module or function name in the local scope. - - The global statement can be used to indicate that particular variables live in - the global scope and should be rebound there; the nonlocal statement indicates - that particular variables live in an enclosing scope and should be rebound - there. - - [...] - - Actually, you may have guessed the answer: the special thing about methods is - that the instance object is passed as the first argument of the function. In - our example, the call x.f() is exactly equivalent to MyClass.f(x). In general, - calling a method with a list of n arguments is equivalent to calling the - corresponding function with an argument list that is created by inserting the - method’s instance object before the first argument. - -Week references (from [here](https://docs.python.org/3/tutorial/stdlib2.html): - - Python does automatic memory management (reference counting for most objects - and garbage collection to eliminate cycles). The memory is freed shortly after - the last reference to it has been eliminated. - -Now explain this: - - Python 2.7.13 (default, Sep 26 2018, 18:42:22) - [GCC 6.3.0 20170516] on linux2 - Type "help", "copyright", "credits" or "license" for more information. - >>> hex(id([])) - '0x7f6264bbf368' - >>> hex(id([])) - '0x7f6264bbf368' - >>> x = [] - >>> hex(id(x)) - '0x7f6264bbf368' # both x and [] points to the same memory location - >>> x.append('0') - >>> hex(id(x)) - '0x7f6264bbf368' # x still points to the same memory location - >>> hex(id([])) - '0x7f6264baeab8' # now [] points somewhere else - >>> hex(id('test')) - '0x7f6264bc9480' - >>> x = 'test' - >>> hex(id(x)) - '0x7f6264bc9450' - >>> hex(id('test')) - '0x7f6264bc9450' - >>> hex(id('another test')) - '0x7f6264bcc1f0' - >>> x = 'another test' - >>> hex(id(x)) - '0x7f6264bcc228' - >>> hex(id('another test')) - '0x7f6264bcc260' - >>> - -### Threads - -From [GlobalInterpreterLock](https://wiki.python.org/moin/GlobalInterpreterLock): - - In CPython, the global interpreter lock, or GIL, is a mutex that protects - access to Python objects, preventing multiple threads from executing Python - bytecodes at once. This lock is necessary mainly because CPython's memory - management is not thread-safe. (However, since the GIL exists, other features - have grown to depend on the guarantees that it enforces.) - - [...] - - The GIL is controversial because it prevents multithreaded CPython programs - from taking full advantage of multiprocessor systems in certain situations. - Note that potentially blocking or long-running operations, such as I/O, image - processing, and NumPy number crunching, happen outside the GIL. Therefore it is - only in multithreaded programs that spend a lot of time inside the GIL, - interpreting CPython bytecode, that the GIL becomes a bottleneck. - -From: [Thread State and the Global Interpreter Lock](https://docs.python.org/3/c-api/init.html#thread-state-and-the-global-interpreter-lock): - - When threads are created using the dedicated Python APIs (such as the threading - module), a thread state is automatically associated to them and the code showed - above is therefore correct. However, when threads are created from C (for - example by a third-party library with its own thread management), they don’t - hold the GIL, nor is there a thread state structure for them. - -### Nice stuff - -* [Verbose Regular Expressions](http://www.diveintopython3.net/regular-expressions.html#verbosere). - -## Implementations - -* [MicroPython - Python for microcontrollers](http://micropython.org/) ([compiling](https://github.com/micropython/micropython/wiki/Getting-Started). - -## Libraries and applications - -* QGIS. -* [SciPy.org — SciPy.org](https://www.scipy.org/) ([package](https://packages.debian.org/stable/python-scipy)). - -## Frameworks - -* [Welcome | Flask (A Python Microframework)](http://flask.pocoo.org/) ([package](https://packages.debian.org/stretch/python-flask)). -* Async: [asyncio](https://docs.python.org/3/library/asyncio.html), Twisted and Tornado. -* [Anaconda Data Science Platform](https://www.anaconda.com/). -* [Streamlit](https://streamlit.io). - -## IDEs - -* [PyCharm](https://www.jetbrains.com/pycharm/). - -## Misc - -* [Indentation](https://www.python.org/dev/peps/pep-0008/#indentation): Use 4 spaces per indentation level. - -## Test projects - -* [Arduino Blog » How close are we to doomsday? A clock is calculating it in real time](https://blog.arduino.cc/2013/03/27/how-close-are-we-to-doomsday-clock/) ([python code](https://github.com/tomschofield/Neurotic-Armageddon-Indicator/blob/master/NAI_SERVER/nai_scraper.py) to parse [Timeline from the Bulletin of the Atomic Scientists](http://thebulletin.org/timeline)). |