Những mẹo hay cho người mới học Python

Post by dangsonbk on 21-09-2017

Nếu bạn đang bắt đầu với Python, những mẹo sau sẽ giúp bạn tiếp cận nhanh hơn với ngôn ngữ lập trình thú vị này.

Python fly


Chạy python script:

Đối với hầu hết các hệ thống UNIX, bạn có thể trực tiếp chạy script python bằng cách sau:

$ python MyFirstPythonScript.py

Bạn cũng có thể chạy script bằng cách tương tự trên terminal của Windows sau khi đã cài đặt Python.

Đầu tiên, mở Command Prompt của Windows bằng cách gõ cmd trên Start bar

Open Python gif

Sau đó bạn chỉ cần gõ python để gọi Python shell hoặc cd tới đường dẫn script trên máy bạn và chạy.

python yourscript.py

Open Python gif


String trên nhiều dòng

Rất đơn giản, chỉ cần đặt string trong """

s = """ This is a very
        long long long
        string ..."""

Swap giá trị 2 biến

>>> x, y = 10, 20
>>> x, y = y, x
>>> x, y
(20, 10)

Phép gán bên trái sẽ tạo một tuple mới. Trong khi phép gán bên phải ngay lập tức giải nén (unpack) tuple và gán giá trị vào tuple được tạo bên trái.


Kiểm tra một list có rỗng không

>>> a = []
>>> if not a:
        print("a is empty")
a is empty

Note:

Đối với các dữ liệu kiểu chuỗi, list, tuple (gọi chung là sequence), nếu sequence rỗng thì giá trị của nó là false.

Nên dùng:

if not seq:
if seq:

Không nên dùng:

if len(seq):
if not len(seq):

Xem thêm: PEP8


Kết hợp nhiều phép so sánh một lúc (Chained comparison)

>>> n = 10
>>> 1<n<20
True
>>> 10<n<10
False
>>> 9<n==10
True

Phép gán có điều kiện

Giả sử bạn muốn gán giá trị cho biết x khi mà giá trị của biến y bằng hoặc không bằng một giá trị nào đó, bạn có thể thực hiện như sau:

x = 10 if y == 9 else 20

Đây thực chất là một cách viết nhanh của lệnh rẽ nhánh if ... else ... thông thường, câu lệnh trên có thể hiểu là: Gán x = 10 trong trường hợp y = 9, nếu không thì gán x =20 Cách viết này thậm chí còn có thể được thực hiện đối với các class object:

x = (classA if y == 1 else classB)(param1, param2)

Một ví dụ phức tạp hơn:

def small(a, b, c):
    return a if a <= b and a <= c else (b if b <= a and b <= c else c)

print(small(1, 0, 1))
print(small(1, 2, 2))
print(small(2, 2, 3))
print(small(5, 4, 3))

#Output
#0 #1 #2 #3

Lấy đường dẫn của module đã import:

import threading
import socket

print(threading)
print(socket)

#1- <module 'threading' from '/usr/lib/python2.7/threading.py'>
#2- <module 'socket' from '/usr/lib/python2.7/socket.py'>

Tạo một web server đơn giản

Python cho phép bạn tạo một webserver ngay trên máy của bạn rất dễ dàng chỉ với 1 dòng lệnh. Để sử dụng, đơn giản chỉ cần mở Console lên, cd tới thư mục bạn muốn chạy webserver.

Nếu bạn sử dụng Python 2.7:

1
python -m SimpleHTTPServer

Trên Python 3, SimpleHTTPServer đã được gộp chung vào gói http.server:

The SimpleHTTPServer module has been merged into http.server in Python 3.0. The 2to3 tool will automatically adapt imports when converting your sources to 3.0.

1
python -m http.server

Mặc định SimpleHTTPServer sẽ mở port 8000, nội dung của website trả về sẽ là nội dung của folder bạn mở server, trong trường hợp folder chứa file index.html, nội dung trả về chính là nội dung của file index.html đó. Sau khi mở web server, bạn chỉ cần truy cập vào một trong các địa chỉ sau:

Trong trường hợp mở từ máy trong mạng LAN:


Enums

Python không hỗ trợ kiểu enum, tuy nhiên bạn vẫn có thể dùng cách sau để sử dụng tương tự enum:

class Shapes:
    Circle, Square, Triangle, Quadrangle = range(4)

print(Shapes.Circle)
print(Shapes.Square)
print(Shapes.Triangle)
print(Shapes.Quadrangle)

#1-> 0
#2-> 1
#3-> 2
#4-> 3

Trả về nhiều giá trị một lúc từ một hàm

Không giống hầu hết các ngôn ngữ lập trình khác, Python cho phép một hàm có thể trả về nhiều giá trị (thực ra là một tuple) khác nhau:

# function returning multiple values.
def x():
    return 1, 2, 3, 4

# Calling the above function.
a, b, c, d = x()

print(a, b, c, d)

#-> 1 2 3 4

Sử dụng hàm enumerate()

Hàm enumerate() thêm một biến đếm khi chạy vòng lặp.

subjects = ('Python', 'Coding', 'Tips')

for i, subject in enumerate(subjects):
    print(str(i) + "-" str(subject))

Kết quả:

    0-Python
    1-Coding
    2-Tips

Tham khảo: PEP279


Liệt kê danh sách các files trong folder dùng os.walk()

Syntax:

    os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

Example:

import os
for root, dirs, files in os.walk(".", topdown=False):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

Example result:

.\blockchain\tim_hieu_ve_blockchain.md
.\python\checkpython2or3.md
.\python\getuserinput.md
.\python\installpackageinscript.md
.\python\onelinewebserver.md
.\python\openwebpage.md
.\python\python2or3.md
.\python\pythonbeginertips.md
.\python\pythonErrorHandling.md
.\blockchain
.\python

Argument Unpacking

Khi truyền tham số vào hàm, có thể truyền kiển tuple và dictionary:

""" Ví dụ về tuple và dictionary unpacking"""
def product(a, b):
    return a * b

argument_tuple = (1, 1)
argument_dict = {'a': 1, 'b': 1}

print(product(*argument_tuple))
print(product(**argument_dict))

Gọi hàm theo điều kiện

"""calling different functions with same arguments based on condition"""
def product(a, b):
    return a * b

def subtract(a, b):
    return a - b

b = True
print((product if b else subtract)(1, 1))

Chạy vòng while() với điều kiện else

Trong trường hợp break xảy ra, code block trong else sẽ không được thực thi

i = 5

while i > 1:
    print("Whil-ing away!")
    i -= 1
    if i == 3:
        break
else:
    print("Finished up!")

Revert list, string

# Revert string bằng slicing
a = 'abcdefghijklmnopqrstuvwxyz'
print(a[::-1])

# Revert string bằng reversed()
for char in reversed(a):
    print(char)

# In ngược số
num = 123456789
print(int(str(num)[::-1]))

# Revert list
a = [5, 4, 3, 2, 1]
print(a[::-1])

# Revert list bằng reversed()
for ele in reversed(a):
    print(ele)

Header cover image: Batteries included

Tham khảo

tags: beginner, python