Learning Python

Python

Install Python + pyenv + virtualenv

  1. Basic syntax and data types: Start by learning the basic syntax of Python, such as how to define variables, use control structures (like if/else statements and loops), and work with basic data types like strings, integers, and floats.
  2. Functions and modules: Learn how to define and call functions in Python, and how to work with modules to organize your code and reuse functionality.
  3. Object-oriented programming: Python is an object-oriented language, so it’s important to understand the basics of classes and objects, as well as inheritance and polymorphism.
  4. File I/O and exception handling: Learn how to work with files in Python, including reading from and writing to files, and how to handle errors and exceptions in your code.
  5. Python libraries and frameworks: Once you have a good understanding of the core concepts of Python, start exploring some of the popular Python libraries and frameworks, such as NumPy, Pandas, Django, and Flask, that can help you solve specific problems and build applications.

Installation

Pyenv - Quản lý phiên bản python Virtualenv: Hỗ trợ tạo các môi trường ảo, các thư viện của project sẽ được cài đặt cô lập trong môi trường ảo này.

pyenv virtualenv 3.10.7 xxx pyenv local xxx

Basic

  1. print(r'C:\some\name') - r for raw
  2. Lists ~ Array. Dict ~ Hash
  3. Strings are immutable, lists are a mutable type.
  4. print(a, end=','). Use end keyword to avoid the newline after the output.
  5. range(5), list(range(0, 10, 3))
  6. else có thể được dùng với vòng for , mang nghĩa như try catch , thực hiện nếu hết không có exception nào/ break nào xuất hiện.
  7. pass được dùng trong các class/method mà chưa muốn implement, tránh lỗi syntax.
  8. match A: case , tương tự với case - when trong Ruby
  9. *args - 1 lists các tham số. **kwargs - Một dict
  10. Positional args: Quan trọng vị trí, thứ tự đầu vào. Thường sẽ truyền vào 2 object. (vd: add(2, 3)). Keyword args: Truyền vào dạng dict nên k cần quan tâm thứ tự đầu vào.
  11. / and * in arguments: def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
    1. / : Params truyền vào TRƯỚC / phải là positional args.
    2. * Params truyền vào SAU * phải là keyword arguments.
    3. Params ở giữa 2 dấu này có thể là pos hoặc là kwd args.
  12. lambda dùng để define 1 small anonymous function.
  13. zip : list(zip(*matrix))
  14. Tuples: ordered, immutable collection of values. Defined using () and can contain any combination of data types, include other tuples.
  15. Set: unordered collection with no duplicate elements.
  16. Dict: Tương tự như Hash bên Ruby.

Modules

https://docs.python.org/3/tutorial/

  • Import dựa vào tên file.
import fibo as fib
from fibo import fib as finbonacci
from fibo import fib, fib2
from fibo import *
  • Khi 1 modules được import, Python sẽ tìm chúng trong:

    • sys.builtin_module_names - Module builtin
    • sys.path :
      • Location hiện tại.
      • PYTHONPATH
      • site-packages dir
  • Python cache compiled modules to .pyc files. Check tự động dựa vào modified time của file module.

Input & Output

Formated string literals

  1. f' or F' for string literals. Eg: f'Results of the {year} {event}'
  2. str.format() do the same: '{:-9} YES votes {:2.2%}'.format(yes_votes, percentage)
  3. str(x) or repr(s) convert object to string. Same for {animal!r}
  4. print debugging: print(f'Debugging {bugs=} {count=} {area=}')
  5. str.rjust() - right-justifies. str.ljust() and str.center(). str.zill(x)

Reading and Writing files

  1. f = open('workfile', 'w', encoding="utf-8")
  2. f.read(), f.readline(), for line in f
  3. json.dump(x), json.load(f)

Errors and Exceptions

  1. Handle exception bassed try .. except
  2. except clause were reversed - same as rescue on Rails.
  3. Can used with else - Code will be executed if no exceptions are raised.
  4. finally - Code is executed after all.
  5. Use with to open file. So file will be ensured to cleaned.
  6. Use class ExceptionGroup to group exeptions

Classes

  1. local variables: inside function. global: outside of any function. nonlocal used when you have nested functions and you want to modify a variable defined in an outer function.
  2. data attributes and methods
  3. class variables will be defined outside class function. CAREFULL when use this, cause they will be shared between objects.
  4. Kế thừa: class DerivedClassName(BaseClassName):
  5. Đa kế thừa: class DerivedClassName(Base1, Base2, Base3): Các methods được kế thừa theo thứ tự 1, 2, 3
  6. Private không tồn tại trong Python. Có 1 convention là named prefix bằng _ để chỉ non-public part. Dev khác cần cẩn thận khi sử dụng/modify các biến này.
  7. Sử dụng @dataclass để define struct giống bên Ruby
  8. Bản chất của các vòng for thực ra là dùng statement iter() trên container object. Function này có 1 function nhỏ hơn là __next()__ để access element trong container object. Khi hết vòng lặp thì nó dùng StopIteration
  9. Generation là 1 loại iteration đặc biệt, generate values on the fly chứ không lưu nó trong memory. Sử dụng yield để thao tác với values, trả về giá trị tiếp theo ở vòng lặp tiếp.

Standard Library

  1. os: Interacting with OS: getcwd, chdir, system (run command), … Use module shutil for higher level interface.
  2. glob - making file lists from directory
  3. sys:
    1. Arguments sys.argv . We can use argparse module
    2. Error output redirection and program termination: stderr, stdin, stdout
  4. re: String pattern matching: finall, sub, replace, …
  5. math, random, statistics
  6. Internet Access: urllib.request, smtplib, …
  7. datetime - today, date, days, strftime, …
  8. zlib - Data Compression. zlib, gzip, bz2, … Support compress, decompress
  9. timeit : Performance Measurement.
  10. doctest, unittest - Quality control - Validate doc embedded tests
  11. Output formating: reprlib, pprint, textwrap, locale
  12. Templating: Create template, and pass args to render string
  13. Binary Data Record Layouts: use struct module with methods pack and unpack
  14. Multi-threading: Use threading module
  15. Logging: logging with debug, info, warning, error, critical
  16. Weak references: use weakref to tracking objects without creating a reference.
  17. Tools for Working with Lists: array, collections, bisect, heapq
  18. Decimal Floating Point Arithmetic: decimal. - Sử dụng cho các application liên quan tới tính toán tiền.

Questions

  1. Tips & Tricks when debugging with Python. (binding, find source location, methods to list object type, method names, …)

Resources