[Expo-tech] Refactoring // 90 essential python tips - for troggle programmers
    Philip Sargent [Gmail] 
    philip.sargent at gmail.com
       
    Sun Jul 26 01:31:06 BST 2020
    
    
  
https://www.amazon.co.uk/Effective-Python-Specific-Software-Development/dp/0
134853989
I have read the first edition of this book and it is really excellent.
It solidifies and extends an intermediate/beginner's knowledge of when NOT
to use modern clever python idioms.
Succinct and nearly all useful; and not preachy like some software books.
 
Python is a much bigger language than it was in 2006 when troggle was
written. (If you don't believe me, try to read this article:
https://effectivepython.com/2019/12/18/prefer-class-decorators-over-metaclas
ses )
 
Django uses quite a few clever tricks  that a student who learned python to
do data analysis as part of an engineering or bioinformatics degree would
not have come across. Specifically I doubt that students are taught what
'patterns' are in departments other than computer science; or the techniques
for code 'refactoring' and how they are so useful.
 
But we should be careful to comment in the troggle code whenever there is
anything subtle that a 1990s pascal programmer might not be aware of.
 
e.g. An assignment expression-also known as the walrus operator-is a new
syntax introduced in Python 3.8 
https://effectivepython.com/2020/02/02/prevent-repetition-with-assignment-ex
pressions
which we won't be using (yet).
 
updates & code online at https://github.com/bslatkin/effectivepython
 
 
Refactoring: this is what will allow us to move away from Django while
keeping troggle running without a break:
.
https://speakerdeck.com/pycon2016/brett-slatkin-refactoring-python-why-and-h
ow-to-restructure-your-code
.         https://martinfowler.com/tags/refactoring.html
.
https://www.amazon.co.uk/Refactoring-Improving-Existing-Addison-Wesley-Techn
ology/dp/0134757599/ref=msx_wsirn_v1_5/262-9963705-7092713?_encoding=UTF8
<https://www.amazon.co.uk/Refactoring-Improving-Existing-Addison-Wesley-Tech
nology/dp/0134757599/ref=msx_wsirn_v1_5/262-9963705-7092713?_encoding=UTF8&p
d_rd_i=0134757599&pd_rd_r=a3dcd1d0-33c2-4d92-865b-0c6c02797196&pd_rd_w=gaeIZ
&pd_rd_wg=kqkSE&pf_rd_p=2c73497e-0658-4f6d-8f3c-06c50c0881ec&pf_rd_r=R5CYDBN
TT0A2F22S6R57&psc=1&refRID=R5CYDBNTT0A2F22S6R57>
&pd_rd_i=0134757599&pd_rd_r=a3dcd1d0-33c2-4d92-865b-0c6c02797196&pd_rd_w=gae
IZ&pd_rd_wg=kqkSE&pf_rd_p=2c73497e-0658-4f6d-8f3c-06c50c0881ec&pf_rd_r=R5CYD
BNTT0A2F22S6R57&psc=1&refRID=R5CYDBNTT0A2F22S6R57
.         https://refactoring.com/catalog/
 
 
From: Philip Sargent [Gmail] [mailto:philip.sargent at gmail.com] 
Sent: 23 July 2020 22:47
To: 'Philip Sargent - Klebos'
Subject: 90 essential python tips
 
1. Pythonic Thinking
    Item 1: Know Which Version of Python You're Using
    Item 2: Follow the PEP 8 Style Guide
    Item 3: Know the Differences Between bytes and str
    Item 4: Prefer Interpolated F-Strings Over C-style Format Strings and
str.format
    Item 5:  Write Helper Functions Instead of Complex Expressions
    Item 6:  Prefer Multiple Assignment Unpacking Over Indexing
    Item 7: Prefer enumerate Over range
    Item 8: Use zip to Process Iterators in Parallel
    Item 9: Avoid else Blocks After for and while Loops
    Item 10: Prevent Repetition with Assignment Expressions
2. Lists and Dictionaries
    Item 11: Know How to Slice Sequences
    Item 12:  Avoid Striding and Slicing in a Single Expression
    Item 13: Prefer Catch-All Unpacking Over Slicing
    Item 14: Sort by Complex Criteria Using the key Parameter
    Item 15: Be Cautious When Relying on dict Insertion Ordering
    Item 16: Prefer get Over in and KeyError to Handle Missing Dictionary
Keys
    Item 17: Prefer defaultdict Over setdefault to Handle Missing Items in
Internal State
    Item 18: Know How to Construct Key-Dependent Default Values with
__missing__
3. Functions
    Item 19: Never Unpack More Than Three Variables When Functions Return
Multiple Values
    Item 20: Prefer Raising Exceptions to Returning None
    Item 21: Know How Closures Interact with Variable Scope
    Item 22: Reduce Visual Noise with Variable Positional Arguments
    Item 23: Provide Optional Behavior with Keyword Arguments
    Item 24: Use None and Docstrings to Specify Dynamic Default Arguments
    Item 25: Enforce Clarity with Keyword-Only and Positional-Only Arguments
    Item 26: Define Function Decorators with functools.wraps
4. Comprehensions and Generators
    Item 27: Use Comprehensions Instead of map and filter
    Item 28: Avoid More Than Two Control Subexpressions in Comprehensions
    Item 29: Avoid Repeated Work in Comprehensions by Using Assignment
Expressions
    Item 30: Consider Generators Instead of Returning Lists
    Item 31: Be Defensive When Iterating Over Arguments
    Item 32: Consider Generator Expressions for Large List Comprehensions
    Item 33: Compose Multiple Generators with yield from
    Item 34: Avoid Injecting Data into Generators with send
    Item 35: Avoid Causing State Transitions in Generators with throw
    Item 36: Consider itertools for Working with Iterators and Generators
5. Classes and Interfaces
    Item 37: Compose Classes Instead of Nesting Many Levels of Built-in
Types
    Item 38: Accept Functions Instead of Classes for Simple Interfaces
    Item 39: Use @classmethod Polymorphism to Construct Objects Generically
    Item 40: Initialize Parent Classes with super
    Item 41: Consider Composing Functionality with Mix-in Classes
    Item 42: Prefer Public Attributes Over Private Ones
    Item 43: Inherit from collections.abc for Custom Container Types
6. Metaclasses and Attributes
    Item 44: Use Plain Attributes Instead of Setter and Getter Methods
    Item 45: Consider @property Instead of Refactoring Attributes
    Item 46: Use Descriptors for Reusable @property Methods
    Item 47: Use __getattr__, __getattribute__, and __setattr__ for Lazy
Attributes
    Item 48: Validate Subclasses with __init_subclass__
    Item 49: Register Class Existence with __init_subclass__
    Item 50: Annotate Class Attributes with __set_name__
    Item 51: Prefer Class Decorators Over Metaclasses for Composable Class
Extensions
7. Concurrency and Parallelism
    Item 52: Use subprocess to Manage Child Processes
    Item 53: Use Threads for Blocking I/O, Avoid for Parallelism
    Item 54: Use Lock to Prevent Data Races in Threads
    Item 55: Use Queue to Coordinate Work Between Threads
    Item 56: Know How to Recognize When Concurrency Is Necessary
    Item 57: Avoid Creating New Thread Instances for On-demand Fan-out
    Item 58: Understand How Using Queue for Concurrency Requires Refactoring
    Item 59: Consider ThreadPoolExecutor When Threads Are Necessary for
Concurrency
    Item 60: Achieve Highly Concurrent I/O with Coroutines
    Item 61: Know How to Port Threaded I/O to asyncio
    Item 62: Mix Threads and Coroutines to Ease the Transition to asyncio
    Item 63: Avoid Blocking the asyncio Event Loop to Maximize
Responsiveness
    Item 64: Consider concurrent.futures for True Parallelism
8. Robustness and Performance
    Item 65: Take Advantage of Each Block in try/except/else/finally
    Item 66: Consider contextlib and with Statements for Reusable
try/finally Behavior
    Item 67: Use datetime Instead of time for Local Clocks
    Item 68: Make pickle Reliable with copyreg
    Item 69: Use decimal When Precision Is Paramount
    Item 70: Profile Before Optimizing
    Item 71: Prefer deque for Producer–Consumer Queues for
Producer-Consumer Queues
    Item 72: Consider Searching Sorted Sequences with bisect
    Item 73: Know How to Use heapq for Priority Queues
    Item 74: Consider memoryview and bytearray for Zero-Copy Interactions
with bytes
9. Testing and Debugging
    Item 75: Use repr Strings for Debugging Output
    Item 76: Verify Related Behaviors in TestCase Subclasses
    Item 77: Isolate Tests from Each Other with setUp, tearDown,
setUpModule, and tearDownModule
    Item 78: Use Mocks to Test Code with Complex Dependencies
    Item 79: Encapsulate Dependencies to Facilitate Mocking and Testing
    Item 80: Consider Interactive Debugging with pdb
    Item 81: Use tracemalloc to Understand Memory Usage and Leaks
10. Collaboration
    Item 82: Know Where to Find Community-Built Modules
    Item 83: Use Virtual Environments for Isolated and Reproducible
Dependencies
    Item 84: Write Docstrings for Every Function, Class, and Module
    Item 85: Use Packages to Organize Modules and Provide Stable APIs
    Item 86: Consider Module-Scoped Code to Configure Deployment
Environments
    Item 87: Define a Root Exception to Insulate Callers from APIs
    Item 88: Know How to Break Circular Dependencies
    Item 89: Consider warnings to Refactor and Migrate Usage
    Item 90: Consider Static Analysis via typing to Obviate Bugs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.wookware.org/pipermail/expo-tech/attachments/20200726/88f46f69/attachment-0001.htm>
    
    
More information about the Expo-tech
mailing list