Pythonic là gì?

Khái niệm Pythonic

    Pythonic là một Idioms mô tả cách tiếp cận lập trình phù hợp với triết lý sáng lập của ngôn ngữ lập trình Python . Có nhiều cách để viết code tương tự nhau trong Python, nhưng có một cách được ưu thích hơn để thực hiện nó. Cách ưa thích này được gọi là “pythonic.” Ngược lại, code khó hiểu hoặc đọc giống như một bản phiên âm thô từ một ngôn ngữ lập trình khác được gọi là "unpythonic".

Triết lý viết code trong Python

  • Đẹp đẽ tốt hơn xấu xí
  • Minh bạch tốt hơn che đậy
  • Đơn giản tốt hơn phức tạp
  • Phức tạp tốt hơn rắc rối
  • Dễ đọc

    Chúng ta hãy cùng tham khảo một vài ví dụ dưới đây.

i = 0
while i < mylist_length:
   do_something(mylist[i])
   i += 1

    Mặc dù đoạn code trên hoạt động tốt, nhưng nó không được coi là Pythonic. Nó không phải là một idiom mà ngôn ngữ Python khuyến khích. Chúng ta có thể cải thiện nó. Một idiom điển hình trong Python để tạo tất cả các số trong list sẽ là sử dụng hàm range () được tích hợp sẵn:

for i in range(mylist_length):
   do_something(mylist[i])

    Tuy nhiên, đây vẫn không phải là Pythonic. Đây là cách Pythonic, được chính ngôn ngữ khuyến khích:

for element in mylist:
   do_something(element)

7 Ví dụ về code pythonic

1. Hoán đổi giá trị giữa 2 biến

    Bad

tmp = a
a = b
b = tmp

    Pythonic

a,b = b,a

2. Sử dụng list

    Bad

my_list = []
for i in range(10):
    my_list.append(i*2)

    Pythonic

my_list = [i*2 for i in range(10)]

3. Duyệt mảng có đánh thứ tự

    Bad

for i in range(len(my_list)):
    print(i, "-->", my_list[i])

    Pythonic

for i,item in enumerate(my_list):
    print(i, "-->",item)

4. Unpacking

    Pythonic

a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]

a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4

5. Nối các phần tử trong mảng

    Bad

letters = ['s', 'p', 'a', 'm']
s=""
for let in letters:
    s += let

    Pythonic

letters = ['s', 'p', 'a', 'm']
word = ''.join(letters)

6. Kiểm tra điều kiện

    Badpython

if attr == True:
    print 'True!'

if attr == None:
    print 'attr is None!'

    Pythonic

if attr:
    print 'attr is truthy!'

if not attr:
    print 'attr is falsey!'

if attr is None:
    print 'attr is None!'

7. Hoạt động của mảng

    Bad

a = [3, 4, 5]
b = []
for i in a:
    if i > 4:
        b.append(i)

    Pythonic

a = [3, 4, 5]
b = [i for i in a if i > 4]
# Or:
b = filter(lambda x: x > 4, a)

    Bad

a = [3, 4, 5]
for i in range(len(a)):
    a[i] += 3

    Pythonic

a = [3, 4, 5]
a = [i + 3 for i in a]
# Or:
a = map(lambda i: i + 3, a)

Nguồn: Viblo

Bình luận
Vui lòng đăng nhập để bình luận
Một số bài viết liên quan