Hướng dẫn dùng main python python

Hàm main trong Python với ví dụ: Tìm hiểu về __main__

Trước khi đi sâu hơn vào lập trình Python, chúng ta cần làm quen với hàm main trong Python và hiểu rõ sự quan trọng của nó.

Cùng xem đoạn mã sau đây

def main():
    print "hello world!"
print "Guru99"

Ở đây, chúng ta có hai câu lệnh in ra màn hình (print), câu lệnh đầu tiên nằm trong hàm main sẽ in ra “Hello World” và câu lệnh sau đó chạy độc lập và in ra “Guru99”. Khi bạn chạy chương trình:

  • Chỉ có "Guru99" được in ra

  • Cụm từ “Hello World” sẽ không được in ra.

Hướng dẫn dùng main python python

Đó là bởi vì chúng ta đã không khai báo lời gọi hàm "if__name __ ==" __main__ ".

  • Khi trình thông dịch Python đọc một tệp mã nguồn, nó sẽ thực thi tất cả các câu lệnh có trong đó.

  • Khi Python chạy "tệp chứa mã nguồn" dưới vai trò là chương trình chính, nó sẽ gán giá trị (“__main__”) cho biến (__name__).

  • Khi bạn thực thi hàm main, nó sẽ đọc câu lệnh "if" và kiểm tra xem biến __name__ có mang giá trị __main__ không.

  • Trong Python, "if__name __ ==" __main__ " cho phép bạn chạy các tệp chứa mã nguồn Python dưới dạng các mô-đun có thể tái sử dụng hoặc các chương trình độc lập.

Giống như C, Python sử dụng == để so sánh và = để gán. Trình thông dịch Python sử dụng hàm main theo hai cách

  • Khi dùng để nạp: __name __ = tên tệp của mô-đun

Câu lệnh if sẽ không được thỏa mãn và các đoạn mã nguồn trong __main__ sẽ không được thực thi.

  • Khi dùng để chạy trực tiếp: __ name __ = __ main__

Câu lệnh if sẽ được thỏa mãn và các đoạn mã nguồn trong __main__ sẽ được thực thi.

  • Vì vậy, khi mã nguồn được thực thi, nó sẽ kiểm tra tên mô-đun bằng "if."

Cần lưu ý sau khi khai báo hàm main, bạn cần gọi tới mã nguồn bằng câu lệnh: if__name __ == "__main__" và sau đó chạy mã, chỉ khi đó bạn mới nhận được đầu ra "hello world!" trong bảng điều khiển lập trình như hình dưới đây.

Hướng dẫn dùng main python python

Lưu ý : Cần chắc chắn rằng sau khi khai báo hàm main, bạn cần thụt đầu dòng chứ không viết mã nguồn ngay bên dưới câu lệnh “def main ():”; nếu không bạn sẽ gặp phải lỗi thụt lề (indent error).

def main():
    print("Hello World!")


if __name__== "__main__":
    main()
print("Guru99")

Ví dụ trên sử dụng Python 3, nếu bạn muốn sử dụng Python 2, vui lòng chạy đoạn mã nguồn sau:

def main():
    print "Hello World!"


if __name__== "__main__":
    main()
print "Guru99"

Trong Python 3, bạn không cần sử dụng if__name. Chương trình sau vẫn có thể chạy:

def main():
    print("Hello World!")


main()
print("Guru99")

Mục lục bài viết:

  • Một chính Python cơ bản ()
  • Chế độ thực thi bằng Python
    • Thực thi từ dòng lệnh
    • Nhập vào Mô-đun hoặc Trình thông dịch tương tác
  • Các phương pháp hay nhất cho các hàm chính của Python
    • Đặt hầu hết mã vào một hàm hoặc lớp
    • Sử dụng if __name__ == "__main__" để kiểm soát việc thực thi mã của bạn
    • Tạo một hàm được gọi là main () để chứa mã bạn muốn chạy
    • Gọi các chức năng khác từ main ()
    • Tóm tắt các phương pháp hay nhất về hàm chính trong Python
  • Phần kết luận


Nhiều ngôn ngữ lập trình có một chức năng đặc biệt được thực thi tự động khi hệ điều hành bắt đầu chạy một chương trình. Hàm này thường được gọi main()và phải có kiểu trả về cụ thể và các đối số theo tiêu chuẩn ngôn ngữ. Mặt khác, trình thông dịch Python thực thi các tập lệnh bắt đầu từ đầu tệp và không có chức năng cụ thể nào mà Python tự động thực thi.

Tuy nhiên, có một điểm bắt đầu xác định để thực hiện một chương trình rất hữu ích để hiểu cách thức hoạt động của một chương trình. Các lập trình viên Python đã đưa ra một số quy ước để xác định điểm bắt đầu này.

Đến cuối bài viết này, bạn sẽ hiểu:

  • __name__Biến đặc biệt là gì và cách Python định nghĩa nó
  • Tại sao bạn muốn sử dụng một main()trong Python
  • Có những quy ước nào để xác định main()trong Python
  • Các phương pháp hay nhất là gì để đưa mã vào main()

Tải xuống miễn phí: Nhận một chương mẫu từ Thủ thuật Python: Cuốn sách chỉ cho bạn các phương pháp hay nhất của Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã + Pythonic đẹp hơn.

Một chính Python cơ bản ()

Trong một số tập lệnh Python, bạn có thể thấy định nghĩa hàm và câu lệnh điều kiện giống như ví dụ bên dưới:

def main():
    print("Hello World!")

if __name__ == "__main__":
    main()

Trong đoạn mã này, có một hàm được gọi là main()in ra cụm từ Hello World!khi trình thông dịch Python thực thi nó. Ngoài ra còn có một ifcâu lệnh điều kiện (hoặc ) kiểm tra giá trị của __name__và so sánh nó với chuỗi "__main__". Khi ifcâu lệnh đánh giá là True, trình thông dịch Python sẽ thực thi main(). Bạn có thể đọc thêm về câu lệnh điều kiện trong Câu lệnh điều kiện trong Python .

Mẫu mã này khá phổ biến trong các tệp Python mà bạn muốn được thực thi dưới dạng tập lệnh và được nhập trong một mô-đun khác . Để giúp hiểu cách mã này sẽ thực thi, trước tiên bạn nên hiểu cách trình thông dịch Python đặt __name__tùy thuộc vào cách mã đang được thực thi.

Chế độ thực thi bằng Python

Có hai cách chính mà bạn có thể hướng dẫn trình thông dịch Python thực thi hoặc sử dụng mã:

  1. Bạn có thể thực thi tệp Python dưới dạng tập lệnh bằng cách sử dụng dòng lệnh.
  2. Bạn có thể nhập mã từ một tệp Python vào một tệp khác hoặc vào trình thông dịch tương tác.

Bạn có thể đọc thêm nhiều điều về các cách tiếp cận này trong Cách chạy tập lệnh Python của bạn . Bất kể bạn đang sử dụng cách chạy mã nào, Python xác định một biến đặc biệt được gọi là biến __name__chứa một chuỗi có giá trị phụ thuộc vào cách mã đang được sử dụng.

Chúng tôi sẽ sử dụng tệp ví dụ này, được lưu dưới dạng execution_methods.py, để khám phá cách hành vi của mã thay đổi tùy thuộc vào ngữ cảnh:

print("This is my file to test Python's execution methods.")
print("The variable __name__ tells me which context this file is running in.")
print("The value of __name__ is:", repr(__name__))

Trong tệp này, có ba lệnh gọi đến print()được xác định. Hai đầu tiên in một số cụm từ giới thiệu. Đầu print()tiên, thứ ba sẽ in cụm từ The value of __name__ is, và sau đó nó sẽ in phần biểu diễn của __name__biến bằng cách sử dụng tích hợp sẵn của Python repr().

Trong Python, repr()hiển thị biểu diễn có thể in của một đối tượng. Ví dụ này sử dụng repr()để nhấn mạnh rằng giá trị của __name__là một chuỗi. Bạn có thể đọc thêm repr()trong tài liệu Python .

Bạn sẽ thấy tệp từ , mô-đun và tập lệnh được sử dụng trong suốt bài viết này. Thực tế, không có nhiều sự khác biệt giữa chúng. Tuy nhiên, có những khác biệt nhỏ về ý nghĩa nhấn mạnh mục đích của đoạn mã:

  1. Tệp: Thông thường, tệp Python là bất kỳ tệp nào có chứa mã. Hầu hết các tệp Python đều có phần mở rộng .py.

  2. Tập lệnh: Tập lệnh Python là một tệp mà bạn dự định thực thi từ dòng lệnh để hoàn thành một nhiệm vụ.

  3. Mô-đun: Mô-đun Python là một tệp mà bạn dự định nhập từ bên trong một mô-đun khác hoặc một tập lệnh hoặc từ trình thông dịch tương tác. Bạn có thể đọc thêm về các mô-đun trong Mô-đun và Gói Python - Giới thiệu .

Sự khác biệt này cũng được thảo luận trong Cách chạy tập lệnh Python của bạn .

Thực thi từ dòng lệnh

Trong cách tiếp cận này, bạn muốn thực thi tập lệnh Python của mình từ dòng lệnh.

Khi bạn thực thi một tập lệnh, bạn sẽ không thể xác định tương tác mã mà trình thông dịch Python đang thực thi. Chi tiết về cách bạn có thể thực thi Python từ dòng lệnh của mình không quá quan trọng đối với mục đích của bài viết này, nhưng bạn có thể mở rộng hộp bên dưới để đọc thêm về sự khác biệt giữa dòng lệnh trên Windows, Linux và macOS.

Bây giờ bạn nên thực thi execution_methods.pytập lệnh từ dòng lệnh, như hình dưới đây:

$ python3 execution_methods.py
This is my file to test Python's execution methods.
The variable __name__ tells me which context this file is running in.
The value of __name__ is: '__main__'

Trong ví dụ này, bạn có thể thấy rằng __name__có giá trị '__main__', trong đó các ký hiệu trích dẫn ( ') cho bạn biết rằng giá trị có kiểu chuỗi.

Hãy nhớ rằng, trong Python, không có sự khác biệt giữa các chuỗi được xác định bằng dấu nháy đơn ( ') và dấu nháy kép ( "). Bạn có thể đọc thêm về cách xác định chuỗi trong Các kiểu dữ liệu cơ bản trong Python .

Bạn sẽ tìm thấy đầu ra giống hệt nhau nếu bạn bao gồm một dòng shebang trong tập lệnh của mình và thực thi nó trực tiếp ( ./execution_methods.py) hoặc sử dụng %runphép thuật trong IPython hoặc Jupyter Notebooks.

Bạn cũng có thể thấy các tập lệnh Python được thực thi từ bên trong các gói bằng cách thêm -mđối số vào lệnh. Thông thường, bạn sẽ thấy điều này được đề nghị khi bạn đang sử dụng pippython3 -m pip install package_name.

Thêm -mđối số sẽ chạy mã trong __main__.pymô-đun của một gói. Bạn có thể tìm thêm thông tin về __main__.pytệp trong Cách xuất bản Gói Python nguồn mở lên PyPI .

Trong cả ba trường hợp này, __name__đều có cùng giá trị: chuỗi '__main__'.

Chi tiết kỹ thuật: Tài liệu Python xác định cụ thể khi nào __name__sẽ có giá trị '__main__':

Mô-đun __name__được đặt bằng '__main__'khi đọc từ đầu vào chuẩn, tập lệnh hoặc từ lời nhắc tương tác. ( Nguồn )

__name__được lưu trữ trong không gian tên toàn cầu của các mô-đun cùng với __doc____package__và các thuộc tính khác. Bạn có thể đọc thêm về các thuộc tính này trong tài liệu Mô hình dữ liệu Python và, đặc biệt cho các mô-đun và gói, trong tài liệu Nhập Python .

Nhập vào Mô-đun hoặc Trình thông dịch tương tác

Bây giờ chúng ta hãy xem xét cách thứ hai mà trình thông dịch Python sẽ thực thi mã của bạn: nhập khẩu. Khi bạn đang phát triển một mô-đun hoặc tập lệnh, rất có thể bạn sẽ muốn tận dụng các mô-đun mà người khác đã xây dựng, điều này bạn có thể thực hiện với importtừ khóa.

Trong quá trình nhập, Python thực thi các câu lệnh được xác định trong mô-đun được chỉ định (nhưng chỉ trong lần đầu tiên bạn nhập một mô-đun). Để chứng minh kết quả nhập execution_methods.pytệp của bạn , hãy khởi động trình thông dịch Python tương tác và sau đó nhập execution_methods.pytệp của bạn :

>>>

>>> import execution_methods
This is my file to test Python's execution methods.
The variable __name__ tells me which context this file is running in.
The value of __name__ is: 'execution_methods'

Trong đầu ra mã này, bạn có thể thấy rằng trình thông dịch Python thực hiện ba lệnh gọi tới print(). Hai dòng đầu tiên của đầu ra giống hệt như khi bạn thực thi tệp dưới dạng tập lệnh trên dòng lệnh vì không có biến nào trong một trong hai dòng đầu tiên. Tuy nhiên, có sự khác biệt về sản lượng so với thứ ba print().

Khi trình thông dịch Python nhập mã, giá trị của __name__được đặt giống với tên của mô-đun đang được nhập. Bạn có thể thấy điều này trong dòng đầu ra thứ ba ở trên. __name__có giá trị 'execution_methods', là tên của .pytệp mà Python đang nhập từ đó.

Lưu ý rằng nếu bạn importlại mô-đun mà không thoát Python, thì sẽ không có đầu ra.

Các phương pháp hay nhất cho các hàm chính của Python

Bây giờ bạn có thể thấy sự khác biệt trong cách Python xử lý các chế độ thực thi khác nhau của nó, điều này rất hữu ích cho bạn khi biết một số phương pháp hay nhất để sử dụng. Những điều này sẽ áp dụng bất cứ khi nào bạn muốn viết mã mà bạn có thể chạy dưới dạng tập lệnh và nhập vào một mô-đun khác hoặc một phiên tương tác.

Bạn sẽ tìm hiểu về bốn phương pháp hay nhất để đảm bảo rằng mã của bạn có thể phục vụ một mục đích kép:

  1. Đặt hầu hết mã vào một hàm hoặc lớp.
  2. Sử dụng __name__để kiểm soát việc thực thi mã của bạn.
  3. Tạo một hàm được gọi main()để chứa mã bạn muốn chạy.
  4. Gọi các chức năng khác từ main().

Đặt hầu hết mã vào một hàm hoặc lớp

Hãy nhớ rằng trình thông dịch Python thực thi tất cả mã trong một mô-đun khi nó nhập mô-đun. Đôi khi mã bạn viết sẽ có các tác dụng phụ mà bạn muốn người dùng kiểm soát, chẳng hạn như:

  • Chạy một tính toán mất nhiều thời gian
  • Ghi vào tệp trên đĩa
  • In thông tin có thể làm lộn xộn thiết bị đầu cuối của người dùng

Trong những trường hợp này, bạn muốn người dùng kiểm soát việc kích hoạt việc thực thi mã này, thay vì để trình thông dịch Python thực thi mã khi nó nhập mô-đun của bạn.

Do đó, cách tốt nhất là đưa hầu hết mã vào bên trong một hàm hoặc một lớp . Điều này là do khi trình thông dịch Python gặp defhoặc classtừ khóa, nó chỉ lưu trữ các định nghĩa đó để sử dụng sau này và không thực sự thực thi chúng cho đến khi bạn yêu cầu.

Lưu đoạn mã dưới đây vào một tệp được gọi là best_practices.pyđể thể hiện ý tưởng này:

 1from time import sleep
 2
 3print("This is my file to demonstrate best practices.")
 4
 5def process_data(data):
 6    print("Beginning data processing...")
 7    modified_data = data + " that has been modified"
 8    sleep(3)
 9    print("Data processing finished.")
10    return modified_data

Trong mã này, trước tiên bạn nhập sleep()từ timemô-đun .

sleep()tạm dừng trình thông dịch trong bao nhiêu giây mà bạn đưa ra làm đối số và sẽ tạo ra một hàm mất nhiều thời gian để chạy cho ví dụ này. Tiếp theo, bạn sử dụng print()để in một câu mô tả mục đích của đoạn mã này.

Sau đó, bạn xác định một hàm có tên process_data()thực hiện năm việc:

  1. In một số đầu ra để cho người dùng biết rằng quá trình xử lý dữ liệu đang bắt đầu
  2. Sửa đổi dữ liệu đầu vào
  3. Tạm dừng việc thực thi trong ba giây bằng cách sử dụng sleep()
  4. In một số đầu ra để cho người dùng biết rằng quá trình xử lý đã hoàn tất
  5. Trả về dữ liệu đã sửa đổi

Thực thi tệp các phương pháp hay nhất trên dòng lệnh

Bây giờ, điều gì sẽ xảy ra khi bạn thực thi tệp này dưới dạng tập lệnh trên dòng lệnh?

Trình thông dịch Python sẽ thực thi các dòng from time import sleepvà print()dòng nằm ngoài định nghĩa hàm, sau đó nó sẽ tạo định nghĩa của hàm được gọi process_data(). Sau đó, tập lệnh sẽ thoát ra mà không cần làm gì thêm, vì tập lệnh không có bất kỳ mã nào thực thi process_data().

Khối mã bên dưới hiển thị kết quả của việc chạy tệp này dưới dạng tập lệnh:

$ python3 best_practices.py
This is my file to demonstrate best practices.

Đầu ra mà chúng ta có thể thấy ở đây là kết quả của đầu tiên print(). Lưu ý rằng nhập từ timevà xác định process_data()không tạo ra đầu ra. Cụ thể, kết quả đầu ra của các lệnh gọi đến print()bên trong định nghĩa của process_data()sẽ không được in ra!

Nhập tệp Các phương pháp hay nhất trong Mô-đun khác hoặc Trình thông dịch tương tác

Khi bạn nhập tệp này trong một phiên tương tác (hoặc một mô-đun khác), trình thông dịch Python sẽ thực hiện chính xác các bước giống như khi thực thi tệp dưới dạng tập lệnh.

Sau khi trình thông dịch Python nhập tệp, bạn có thể sử dụng bất kỳ biến, lớp hoặc hàm nào được xác định trong mô-đun bạn đã nhập. Để chứng minh điều này, chúng tôi sẽ sử dụng trình thông dịch Python tương tác. Khởi động trình thông dịch tương tác và sau đó nhập import best_practices:

>>>

>>> import best_practices
This is my file to demonstrate best practices.

Đầu ra duy nhất từ ​​việc nhập best_practices.pytệp là từ lệnh print()gọi đầu tiên được xác định bên ngoài process_data(). Nhập từ timevà xác định process_data()không tạo ra đầu ra, giống như khi bạn thực thi mã từ dòng lệnh.

Sử dụng if __name__ == "__main__"để kiểm soát việc thực thi mã của bạn

Điều gì sẽ xảy ra nếu bạn muốn process_data()thực thi khi bạn chạy tập lệnh từ dòng lệnh nhưng không phải khi trình thông dịch Python nhập tệp?

Bạn có thể sử dụng if __name__ == "__main__"thành ngữ để xác định ngữ cảnh thực thi và process_data()chỉ chạy có điều kiện khi __name__bằng "__main__". Thêm mã bên dưới vào cuối best_practices.pytệp của bạn :

11if __name__ == "__main__":
12    data = "My data read from the Web"
13    print(data)
14    modified_data = process_data(data)
15    print(modified_data)

Trong mã này, bạn đã thêm một câu lệnh điều kiện để kiểm tra giá trị của __name__. Điều kiện này sẽ đánh giá Truekhi nào __name__bằng chuỗi "__main__". Hãy nhớ rằng các giá trị đặc biệt của "__main__"cho __name__biến có nghĩa là thông dịch Python được thực hiện kịch bản của bạn và không nhập khẩu nó.

Bên trong khối điều kiện, bạn đã thêm bốn dòng mã (dòng 12, 13, 14 và 15):

  • Dòng 12 và 13: Bạn đang tạo một biến datalưu trữ dữ liệu bạn có được từ Web và in nó.
  • Dòng 14: Bạn đang xử lý dữ liệu.
  • Dòng 15: Bạn đang in dữ liệu đã sửa đổi.

Bây giờ, hãy chạy best_practices.pytập lệnh của bạn từ dòng lệnh để xem kết quả đầu ra sẽ thay đổi như thế nào:

$ python3 best_practices.py
This is my file to demonstrate best practices.
My data read from the Web
Beginning data processing...
Data processing finished.
My data read from the Web that has been modified

Đầu tiên, đầu ra hiển thị kết quả của print()cuộc gọi bên ngoài process_data().

Sau đó, giá trị của datađược in ra. Điều này xảy ra vì biến __name__có giá trị "__main__"khi trình thông dịch Python thực thi tệp dưới dạng tập lệnh, vì vậy câu lệnh điều kiện được đánh giá là True.

Tiếp theo, tập lệnh của bạn được gọi process_data()và chuyển datavào để sửa đổi. Khi process_data()thực thi, nó sẽ in một số thông báo trạng thái đến đầu ra. Cuối cùng, giá trị của modified_datađược in ra.

Bây giờ bạn nên kiểm tra điều gì sẽ xảy ra khi bạn nhập best_practices.pytệp từ trình thông dịch tương tác (hoặc một mô-đun khác). Ví dụ dưới đây minh họa tình huống này:

>>>

>>> import best_practices
This is my file to demonstrate best practices.

Lưu ý rằng bạn nhận được hành vi giống như trước khi bạn thêm câu lệnh điều kiện vào cuối tệp! Điều này là do __name__biến có giá trị "best_practices", vì vậy Python đã không thực thi mã bên trong khối, bao gồm process_data(), bởi vì câu lệnh điều kiện được đánh giá là False.

Tạo một hàm được gọi là main () để chứa mã bạn muốn chạy

Bây giờ bạn có thể viết mã Python có thể chạy từ dòng lệnh dưới dạng tập lệnh và được nhập mà không có tác dụng phụ không mong muốn. Tiếp theo, bạn sẽ tìm hiểu về cách viết mã của mình để giúp các lập trình viên Python khác dễ dàng làm theo ý bạn.

Nhiều ngôn ngữ, chẳng hạn như C , C ++ , Java và một số ngôn ngữ khác, xác định một hàm đặc biệt phải được gọi main()mà hệ điều hành tự động gọi khi nó thực thi chương trình đã biên dịch. Hàm này thường được gọi là điểm vào bởi vì nó là nơi thực thi đi vào chương trình.

Ngược lại, Python không có một chức năng đặc biệt nào đóng vai trò là điểm vào của một tập lệnh. Bạn thực sự có thể đặt cho hàm điểm nhập trong một tập lệnh Python bất kỳ tên nào bạn muốn!

Mặc dù Python không gán bất kỳ ý nghĩa nào cho một hàm được đặt tên main(), nhưng cách tốt nhất là đặt tên cho hàm điểm nhậpmain() . Bằng cách đó, bất kỳ lập trình viên nào khác khi đọc tập lệnh của bạn đều biết ngay rằng chức năng này là điểm bắt đầu của mã hoàn thành nhiệm vụ chính của tập lệnh.

Ngoài ra, main()phải chứa bất kỳ mã nào bạn muốn chạy khi trình thông dịch Python thực thi tệp. Điều này tốt hơn là đặt mã trực tiếp vào khối có điều kiện vì người dùng có thể sử dụng lại main()nếu họ nhập mô-đun của bạn.

Thay đổi best_practices.pytệp để tệp trông giống như mã bên dưới:

 1from time import sleep
 2
 3print("This is my file to demonstrate best practices.")
 4
 5def process_data(data):
 6    print("Beginning data processing...")
 7    modified_data = data + " that has been modified"
 8    sleep(3)
 9    print("Data processing finished.")
10    return modified_data
11
12def main():
13    data = "My data read from the Web"
14    print(data)
15    modified_data = process_data(data)
16    print(modified_data)
17
18if __name__ == "__main__":
19    main()

Trong ví dụ này, bạn đã thêm định nghĩa của main()điều đó bao gồm mã trước đó nằm bên trong khối điều kiện. Sau đó, bạn đã thay đổi khối điều kiện để nó thực thi main(). Nếu bạn chạy mã này dưới dạng tập lệnh hoặc nhập nó, bạn sẽ nhận được đầu ra giống như trong phần trước.

Gọi các chức năng khác từ main ()

Một thực tế phổ biến bằng Python là có main()thực hiện các chức năng khác , chứ không phải là bao gồm cả mã nhiệm vụ hoàn thành trong main(). Điều này đặc biệt hữu ích khi bạn có thể soạn tác vụ tổng thể của mình từ một số tác vụ con nhỏ hơn có thể thực thi độc lập.

Ví dụ: bạn có thể có một tập lệnh thực hiện những việc sau:

  1. Đọc tệp dữ liệu từ một nguồn có thể là cơ sở dữ liệu, tệp trên đĩa hoặc API web
  2. Xử lý dữ liệu
  3. Ghi dữ liệu đã xử lý đến một vị trí khác

Nếu bạn triển khai từng nhiệm vụ con này trong các chức năng riêng biệt, thì bạn (hoặc người dùng khác) sẽ dễ dàng sử dụng lại một vài bước trong số các bước và bỏ qua những bước bạn không muốn. Sau đó, bạn có thể tạo một quy trình làm việc mặc định trong đó main()và bạn có thể có cả hai thế giới tốt nhất.

Việc có áp dụng phương pháp này cho mã của bạn hay không là do bạn tự đánh giá. Việc chia nhỏ công việc thành nhiều chức năng giúp việc sử dụng lại dễ dàng hơn nhưng lại làm tăng khó khăn cho người khác đang cố gắng diễn giải mã của bạn vì họ phải thực hiện theo một số bước nhảy trong quy trình của chương trình.

Sửa đổi best_practices.pytệp của bạn để tệp trông giống như mã bên dưới:

 1from time import sleep
 2
 3print("This is my file to demonstrate best practices.")
 4
 5def process_data(data):
 6    print("Beginning data processing...")
 7    modified_data = data + " that has been modified"
 8    sleep(3)
 9    print("Data processing finished.")
10    return modified_data
11
12def read_data_from_web():
13    print("Reading data from the Web")
14    data = "Data from the web"
15    return data
16
17def write_data_to_database(data):
18    print("Writing data to a database")
19    print(data)
20
21def main():
22    data = read_data_from_web()
23    modified_data = process_data(data)
24    write_data_to_database(modified_data)
25
26if __name__ == "__main__":
27    main()

Trong mã ví dụ này, 10 dòng đầu tiên của tệp có cùng nội dung mà chúng đã có trước đó. Định nghĩa hàm thứ hai trên dòng 12 tạo và trả về một số dữ liệu mẫu và định nghĩa hàm thứ ba trên dòng 17 mô phỏng việc ghi dữ liệu đã sửa đổi vào cơ sở dữ liệu.

Trên dòng 21, main()được xác định. Trong ví dụ này, bạn đã sửa đổi main()để nó gọi lần lượt các chức năng đọc dữ liệu, xử lý dữ liệu và ghi dữ liệu.

Đầu tiên, cái datađược tạo ra từ read_data_from_web(). Điều này datađược chuyển đến process_data(), trả về modified_data. Cuối cùng, modified_datađược chuyển vào write_data_to_database().

Hai dòng cuối cùng của tập lệnh là khối điều kiện kiểm tra __name__và chạy main()nếu ifcâu lệnh là True.

Bây giờ, bạn có thể chạy toàn bộ quy trình xử lý từ dòng lệnh, như được hiển thị bên dưới:

$ python3 best_practices.py
This is my file to demonstrate best practices.
Reading data from the Web
Beginning data processing...
Data processing finished.
Writing processed data to a database
Data from the web that has been modified

Trong đầu ra từ thực hiện điều này, bạn có thể thấy rằng trình thông dịch Python thực hiện main(), trong đó thực hiện read_data_from_web()process_data()và write_data_to_database(). Tuy nhiên, bạn cũng có thể nhập best_practices.pytệp và sử dụng lại process_data()cho một nguồn dữ liệu đầu vào khác, như được hiển thị bên dưới:

>>>

>>> import best_practices as bp
This is my file to demonstrate best practices.
>>> data = "Data from a file"
>>> modified_data = bp.process_data(data)
Beginning data processing...
Data processing finished.
>>> bp.write_data_to_database(modified_data)
Writing processed data to a database
Data from a file that has been modified

Trong ví dụ này, bạn đã nhập best_practicesvà rút ngắn tên bpcho mã này.

Quá trình nhập khiến trình thông dịch Python thực thi tất cả các dòng mã trong best_practices.pytệp, do đó, đầu ra hiển thị dòng giải thích mục đích của tệp.

Sau đó, bạn lưu trữ dữ liệu từ một tệp trong datađó thay vì đọc dữ liệu từ Web. Sau đó, bạn sử dụng lại process_data()và write_data_to_database()từ best_practices.pytệp. Trong trường hợp này, bạn đã tận dụng lợi thế của việc sử dụng lại mã của mình thay vì xác định tất cả logic trong main().

Tóm tắt các phương pháp hay nhất về hàm chính trong Python

Dưới đây là bốn phương pháp hay nhất chính về main()Python mà bạn vừa xem:

  1. Đặt mã mất nhiều thời gian để chạy hoặc có các hiệu ứng khác trên máy tính vào một hàm hoặc lớp, để bạn có thể kiểm soát chính xác thời điểm mã đó được thực thi.

  2. Sử dụng các giá trị khác nhau của __name__để xác định ngữ cảnh và thay đổi hành vi của mã của bạn bằng một câu lệnh điều kiện.

  3. Bạn nên đặt tên cho hàm điểm nhập của mình main()để truyền đạt ý định của hàm, mặc dù Python không gán bất kỳ ý nghĩa đặc biệt nào cho một hàm được đặt tên main().

  4. Nếu bạn muốn sử dụng lại chức năng từ mã của mình, hãy xác định logic trong các hàm bên ngoài main()và gọi các hàm đó bên trong main().

Phần kết luận

Xin chúc mừng! Bây giờ bạn đã biết cách tạo các main()hàm Python .

Bạn đã học được những điều sau:

  • Biết giá trị của __name__biến là điều quan trọng để viết mã phục vụ mục đích kép của tập lệnh thực thi và mô-đun có thể nhập.

  • __name__nhận các giá trị khác nhau tùy thuộc vào cách bạn thực thi tệp Python của mình. __name__sẽ bằng:

    • "__main__"khi tệp được thực thi từ dòng lệnh hoặc với python -m(để thực thi __main__.pytệp của gói )
    • Tên của mô-đun, nếu mô-đun đang được nhập
  • Các lập trình viên Python đã phát triển một tập hợp các phương pháp hay để sử dụng khi bạn muốn phát triển mã có thể tái sử dụng.

Bây giờ bạn đã sẵn sàng để viết một số main()mã hàm Python tuyệt vời!