Python Hàm và phương thức chính: Hiểu hàm def Main()

⚡ Tóm tắt thông minh

Python Hàm main đánh dấu điểm bắt đầu mà trình thông dịch bắt đầu chạy chương trình. Được định nghĩa bằng def main() và đi kèm với điều kiện if __name__ == “__main__”, nó tách biệt mã mô-đun có thể tái sử dụng khỏi việc thực thi kịch bản độc lập.

  • 🚀 Điểm vào: Hàm chính xác định điểm bắt đầu thực thi, nhờ đó người đọc có thể theo dõi luồng hoạt động của chương trình từ một điểm khởi đầu rõ ràng.
  • 🧩 def main():: Quấnping Logic bên trong hàm `def main()` giữ cho quá trình thiết lập và thực thi tách biệt khỏi định nghĩa hàm và lớp.
  • 🔒 __name__ guard: Điều kiện kiểm tra __name__ == “__main__” chỉ chạy hàm main() khi thực thi trực tiếp, không bao giờ chạy khi import.
  • 🔁 Các mô-đun có thể tái sử dụng: Mã được bảo vệ cho phép các tập lệnh khác nhập các hàm của bạn mà không kích hoạt toàn bộ chương trình.
  • ⌨️ Nhập lệnh từ dòng lệnh: Hàm main() là nơi thích hợp nhất để đọc các đối số sys.argv và trả về trạng thái thoát.
  • 🤖 Hỗ trợ AI: Các trợ lý AI như GitHub Copilot tạo ra mã mẫu main() và điều kiện kiểm tra __name__ từ một lời nhắc ngắn gọn.

Python Chức năng chính

Là gì Python Chức năng chính?

Python chức năng chính là điểm khởi đầu của bất kỳ chương trình nào. Khi chương trình được chạy, Python Trình thông dịch chạy mã theo trình tự. Hàm chính chỉ được thực thi khi nó được chạy dưới dạng một trình thông dịch khác. Python chương trình. Nó sẽ không chạy hàm chính nếu được nhập khẩu như một mô-đun.

Hàm def main() trong PythonĐể hiểu điều này, hãy xem xét đoạn mã ví dụ sau, một phần cốt lõi của hệ thống. Python lập trình những điều cơ bản:

def main() Ví dụ 1

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

Python Chức năng chính

Ở đây, chúng ta có hai đoạn mã in - một đoạn được định nghĩa trong hàm chính là “Hello World!” và đoạn còn lại độc lập, đó là “Guru99”. Khi bạn chạy hàm def main():

  • Chỉ một "GuruBản in 99”
  • chứ không phải mã “Xin chào thế giới!”

Đó là vì chúng ta đã không khai báo cuộc gọi chức năng “if__name__==”__main__”.

Điều quan trọng là sau khi định nghĩa hàm main, bạn gọi mã bằng if__name__== “__main__” rồi 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. Hãy xem xét mã sau

def main() Ví dụ 2

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

if __name__ == "__main__":
    main()

print("Guru99")

GuruTrong trường hợp này, số 99 được in ra.

Python Chức năng chính

Đây là lời giải thích,

  • Thời Gian Python trình thông dịch đọc một tệp nguồn, nó sẽ thực thi tất cả mã được tìm thấy trong đó.
  • Thời Gian Python chạy “tệp nguồn” làm chương trình chính, nó đặt biến đặc biệt (__name__) có giá trị (“__main__”).
  • Khi bạn thực thi hàm main trong python, nó sẽ đọc câu lệnh “if” và kiểm tra xem __name__ có bằng __main__ hay không.
  • In Python “if__name__== “__main__” cho phép bạn chạy Python các tập tin như các mô-đun có thể tái sử dụng hoặc các chương trình độc lập.

Tại sao lại sử dụng hàm main() trong... Python?

Python Việc sử dụng cú pháp `def main()` không bắt buộc, tuy nhiên các lập trình viên giàu kinh nghiệm hầu như đều sử dụng nó trong mọi kịch bản phức tạp. Cú pháp `def main()` mang lại trật tự cho tệp và giúp mã nguồn an toàn để tái sử dụng. Dưới đây là những lý do chính để sử dụng nó:

  • Điểm vào rõ ràng: Hàm main() cho người đọc biết chính xác chương trình bắt đầu từ đâu, do đó logic rất dễ theo dõi.
  • Các mô-đun có thể tái sử dụng: Code Được bảo vệ bởi điều kiện `if __name__ == “__main__”`, hàm này chỉ chạy khi được thực thi trực tiếp, do đó các tệp khác có thể nhập các hàm của bạn mà không gây ra tác dụng phụ.
  • Phạm vi địa phương: Các biến được tạo bên trong hàm main() sẽ giữ nguyên phạm vi cục bộ, điều này tránh được xung đột ngẫu nhiên với các tên biến toàn cục ở những nơi khác trong mô-đun.
  • Kiểm tra dễ dàng hơn: Việc tách biệt logic trong hàm main() cho phép bộ kiểm thử gọi trực tiếp hàm đó và kiểm tra kết quả.
  • Quy ước chung: Hàm main() là một dấu hiệu được công nhận rộng rãi về điểm bắt đầu của chương trình, giúp cải thiện khả năng bảo trì giữa các nhóm.

Tóm lại, hàm main() là tùy chọn trong... PythonNhưng nó giúp các chương trình lớn hơn vẫn dễ đọc, dễ kiểm thử và an toàn khi nhập khẩu.

Biến __name__ và Python Mô-đun

Để hiểu tầm quan trọng của biến __name__ trong Python phương thức hàm chính, hãy xem xét đoạn mã sau:

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

if __name__ == "__main__":
    main()

print("Guru99")

print("Value in built variable name is:  ",__name__)

Biến __name__ và Python Mô-đun

Bây giờ hãy xem xét, mã được nhập dưới dạng mô-đun

import MainFunction

print("done")

Biến __name__ và Python Mô-đun

Đây là giải thích mã: Giống như C, Python sử dụng == để so sánh trong khi = để gán. Python trình thông dịch sử dụng chức năng chính theo hai cách

chạy trực tiếp:

  • __tên__=__chính__
  • câu lệnh if == True và tập lệnh trong _main_sẽ được thực thi

nhập dưới dạng mô-đun

  • __name__= tên tệp của mô-đun
  • câu lệnh if == false và tập lệnh trong __main__ sẽ không được thực thi

Khi mã được thực thi, nó sẽ kiểm tra tên mô-đun bằng “if”. Cơ chế này đảm bảo chức năng chính chỉ được thực thi dưới dạng chạy trực tiếp chứ không phải khi được nhập dưới dạng mô-đun.

Các ví dụ trên là Python 3 mã, nếu bạn muốn sử dụng Python 2, hãy xem xét đoạn mã sau

def main():
  print "Hello World!"
  
if __name__== "__main__":
  main()

print "Guru99"

In Python 3, bạn không cần sử dụng if__name. Mã sau cũng hoạt động

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

Lưu ý: Hãy đảm bảo rằng sau khi định nghĩa hàm main, bạn để lại một chút thụt lề và không khai báo mã ngay bên dưới hàm def main(): nếu không, sẽ xảy ra lỗi thụt lề.

Cách truyền các đối số dòng lệnh cho Python chức năng chính

Hàm main() là nơi lý tưởng để xử lý dữ liệu đầu vào do người dùng cung cấp trên dòng lệnh. Python lưu trữ các giá trị này trong danh sách sys.argv, do mô-đun sys tiêu chuẩn cung cấp. Mục đầu tiên, sys.argv[0], là tên tập lệnh và mọi giá trị sau đó là một đối số do người dùng cung cấp.

Ví dụ sau đây đọc và in các đối số dòng lệnh từ bên trong hàm main():

import sys

def main():
    print("Script name:", sys.argv[0])
    print("Arguments passed:", sys.argv[1:])

if __name__ == "__main__":
    main()

Nếu bạn lưu tệp dưới dạng script.py và chạy python script.py alpha betaChương trình in ra tên tập lệnh và danh sách ['alpha', 'beta']. Vì các giá trị được đưa vào bên trong hàm main(), logic được sắp xếp gọn gàng và dễ kiểm tra.

Dưới đây là một vài mẹo thực tế khi làm việc với nhập liệu dòng lệnh:

  • Cắt bỏ tên kịch bản: Sử dụng sys.argv[1:] để chỉ đọc các đối số mà người dùng đã nhập.
  • Hãy sử dụng argparse cho các công cụ thực sự: Mô-đun argparse tích hợp sẵn phân tích các cờ, tùy chọn và văn bản trợ giúp một cách an toàn hơn nhiều so với việc đọc sys.argv bằng tay.
  • Trả về mã thoát: Bọc lệnh gọi đó dưới dạng sys.exit(main()) để giá trị trả về của main() trở thành trạng thái thoát của tiến trình.
  • Xác thực sớm: Hãy kiểm tra số lượng và kiểu dữ liệu của các tham số ở đầu hàm main() trước khi chạy phần còn lại của chương trình.

Mẫu này biến một đoạn mã đơn giản thành một công cụ dòng lệnh đáng tin cậy trong khi vẫn giữ được...ping Mọi bước đều nằm trong một hàm main() duy nhất, có thể kiểm thử được.

Python Hàm main() so với các ngôn ngữ lập trình khác

Các nhà phát triển đến từ C, C++, hoặc là Java thường mong đợi một hàm main() bắt buộc. Python Nó hoạt động khác biệt vì nó là một ngôn ngữ thông dịch, vì vậy trình thông dịch chỉ đơn giản là chạy một tập tin từ dòng đầu tiên đến dòng cuối cùng. Hàm main() trong Python Do đó, nó là một quy ước hơn là một quy tắc.

  • C, C++, C#, và Java: Hàm main() là điểm vào bắt buộc. Hệ thống thực thi sẽ tự động gọi hàm này, và mỗi chương trình chỉ được phép có một hàm main().
  • Python: Không cần hàm main(). Quá trình thực thi bắt đầu từ dòng đầu tiên của tập tin, và hàm def main() chỉ chạy nếu mã của bạn gọi nó.
  • Người bảo vệ: Khối lệnh if __name__ == “__main__” cho phép thực hiện điều này. Python Một mục đích tương tự như hàm main() đã được biên dịch, đó là đánh dấu đoạn mã chỉ nên chạy khi tệp đó là chương trình chính.

Vì vậy, trong khi các ngôn ngữ khác bắt buộc phải có điểm vào main(), Python Nó để lại sự lựa chọn cho bạn, mang lại sự rõ ràng tương tự thông qua quy ước thay vì quy tắc của trình biên dịch.

Câu Hỏi Thường Gặp

__main__ là tên Python Cung cấp tập lệnh cấp cao nhất, được phát hiện thông qua biến __name__. main() là một hàm do người dùng định nghĩa thông thường chứa logic chương trình của bạn. Chúng hoạt động cùng nhau, nhưng __main__ là tên môi trường trong khi main() là một hàm.

Đặt nó ở vị trí cuối cùng đảm bảo Python Mọi hàm và lớp ở trên đã được định nghĩa trước khi khối lệnh gọi main(). Việc chạy nó sớm hơn có thể tham chiếu đến các tên chưa được định nghĩa và gây ra lỗi NameError.

STT Python Tên hàm `main` không mang ý nghĩa đặc biệt nào. Bạn có thể đặt tên cho hàm khởi tạo là bất kỳ tên nào bạn thích, nhưng việc đặt tên là `main()` là một quy ước mạnh mẽ báo hiệu điểm bắt đầu của chương trình cho các nhà phát triển khác.

Đúng vậy. Hàm main() có thể trả về một giá trị, và một mẫu phổ biến là viết sys.exit(main()) để giá trị trả về đó trở thành mã thoát của tiến trình. Trả về 0 báo hiệu thành công, trong khi một giá trị khác 0 báo hiệu lỗi.

Nếu không có điều kiện kiểm tra, hàm main() sẽ chạy cả khi tệp được thực thi trực tiếp và khi nó được nhập. Các chương trình khác chỉ muốn sử dụng lại các hàm của nó sẽ kích hoạt việc thực thi không mong muốn và các tác dụng phụ.

Phần thân của hàm main() phải được thụt lề bên dưới dòng def main():. Việc viết câu lệnh tiếp theo sát lề trái sẽ khiến hàm không có khối thụt lề, vì vậy Python Gây ra lỗi IndentationError. Hãy thêm khoảng trắng nhất quán hoặc dấu tab.

GitHub Copilot tự động hoàn thành khung sườn `def main()` và điều kiện `if __name__ == “__main__”` từ một đoạn chú thích ngắn. Nó cũng đề xuất cách phân tích đối số và chuỗi tài liệu, cho phép bạn tập trung vào logic chương trình thay vì những đoạn mã lặp đi lặp lại.

Trong các dự án trí tuệ nhân tạo và học máy, hàm main() là điểm khởi đầu cho các kịch bản huấn luyện hoặc suy luận. Nó đọc các siêu tham số từ các đối số dòng lệnh, giữ cho các tiện ích có thể được nhập để tái sử dụng và giúp việc thử nghiệm và tự động hóa dễ dàng hơn.

Tóm tắt bài viết này với: