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.”

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.

Một cách lặp các phần tử trong C theo cách idiomatic:

for (i=0; i < mylist_length; i++) {
   do_something(mylist[i]);
}

Cách tương tự trong Python:

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 một cái gì đó như 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)

Một câu hỏi thường gặp trên comp.lang.python liên quan đến cách chuyển hoặc sửa đổi trực tiếp các tham chiếu, một điều không thể thực hiện được trong Python; chỉ có phép gán (và họ hàng gần của nó là các câu lệnh import , class và def ). Điều này chắc chắn đôi khi được thúc đẩy bởi mong muốn viết mã trả về nhiều giá trị từ một hàm. Cách mà idiom để thực hiện điều này trong C và một số ngôn ngữ khác là chuyển tới con trỏ hàm hoặc tham chiếu này:

void foo(int* a, float* b) {
    *a = 3;
    *b = 5.5;
}

...
int alpha;
int beta;
foo(&alpha, &beta);

Trong Python, có thể hack các chiến lược để chuyển kết quả hàm thông qua các đối số, chẳng hạn như thế này:

def foo(a, b):
    a[0] = 3
    b[0] = 5.5

alpha = [0]
beta = [0]
foo(alpha, beta)
alpha = alpha[0]
beta = beta[0]

Tuy nhiên, cách này được coi là cực kỳ khó nhìn, vì theo cách idiomatic để trả về nhiều giá trị từ một hàm khá khác và trông đẹp hơn nhiều. Nó khai thác theo kiểu các tuple và tuple unpacking:

def foo():
    return 3, 5.5

alpha, beta = foo()

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.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments