Sunday, January 19, 2025

[Python] Lesson 59 – If name == ‘__main__’

-

if __name__ == '__main__' là một câu lệnh điều kiện trong Python thường được sử dụng để kiểm tra xem một module được thực thi trực tiếp hay là được import vào một module khác.

Cú pháp khai báo if __name__ == '__main__' trong Python được sử dụng để kiểm tra xem module đang được thực thi như một chương trình độc lập hay là được import vào một module khác.

Khi một file Python được chạy trực tiếp bằng câu lệnh python file_name.py thì biến __name__ của module sẽ có giá trị là __main__. Tức là, câu lệnh if __name__ == '__main__' sẽ trả về giá trị True và những dòng lệnh nằm trong khối lệnh của nó sẽ được thực thi.

Tuy nhiên, khi module đó được import vào một module khác, biến __name__ của module sẽ có giá trị là tên của module đó. Trong trường hợp này, câu lệnh if __name__ == '__main__' sẽ trả về giá trị False và những dòng lệnh nằm trong khối lệnh của nó sẽ không được thực thi.

Ví dụ 1:

File my_module.py:

def my_function():
    print("Hello world!")

if __name__ == '__main__':
    my_function()

Khi file my_module.py được thực thi bằng cách chạy python my_module.py, hàm my_function() sẽ được thực thi và kết quả đầu ra sẽ là “Hello world!”.

Tuy nhiên, nếu file my_module.py được import vào một file khác:

File main.py:

import my_module

Trong trường hợp này, hàm my_function() trong my_module.py sẽ không được thực thi khi file main.py được chạy.

Ví dụ 2:

def foo():
    print('This is a function in my_module')
    
if __name__ == '__main__':
    print('This is my_module')
    foo()

Nếu ta thực thi module này trực tiếp bằng lệnh python my_module.py, output sẽ là:

This is my_module
This is a function in my_module

Nhưng nếu ta import module này vào một module khác bằng lệnh import my_module, thì chỉ có câu lệnh This is my_module được thực thi và không có gì được in ra từ hàm foo().

Ví dụ 3:

if __name__ == '__main__': là một cấu trúc thường được sử dụng trong các chương trình Python để kiểm tra xem một tệp mã nguồn Python được thực thi trực tiếp hay được nhập vào từ một tệp khác.

Khi một tệp Python được thực thi trực tiếp (tức là bạn chạy tệp đó bằng lệnh python filename.py), biến đặc biệt __name__ của tệp đó sẽ được đặt thành "__main__". Nhưng nếu tệp đó được nhập vào từ một tệp khác (sử dụng import), thì __name__ sẽ là tên của tệp đó.

Đây là ví dụ minh họa:

# file_example.py

def say_hello():
    print("Hello, World!")

# Kiểm tra nếu tệp này được thực thi trực tiếp
if __name__ == '__main__':
    say_hello()

Trong trường hợp này, nếu bạn chạy tệp file_example.py bằng lệnh python file_example.py, nó sẽ in ra “Hello, World!” vì điều kiện if __name__ == '__main__': đúng. Tuy nhiên, nếu bạn nhập tệp này từ một tệp khác bằng cách sử dụng import, ví dụ:

# another_file.py

import file_example

Trong trường hợp này, khi bạn chạy another_file.py, điều kiện if __name__ == '__main__': trong file_example.py sẽ không được thực thi và chương trình sẽ không in ra “Hello, World!” khi bạn chạy another_file.py. Điều này cho phép bạn sử dụng các đoạn mã trong một tệp Python mà không cần thực thi nó khi bạn nhập nó từ một tệp khác.

Ví dụ 4:

Chúng ta có một module Python có tên là my_module.py với nội dung như sau:

def add_numbers(a, b):
    return a + b

if __name__ == '__main__':
    result = add_numbers(2, 3)
    print(result)

Trong trường hợp này, nếu chúng ta chạy module my_module.py trực tiếp bằng cách gọi python my_module.py từ command line, lệnh print(result) sẽ được thực thi và kết quả sẽ được hiển thị ra màn hình.

Tuy nhiên, nếu module my_module.py được import vào một module khác bằng lệnh import my_module, lệnh print(result) sẽ không được thực thi và kết quả sẽ không được hiển thị. Thay vào đó, module my_module.py chỉ định nghĩa hàm add_numbers() có thể được sử dụng bởi các module khác thông qua lệnh from my_module import add_numbers.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories