Làm cách nào để trả lại tập lệnh python?

tên của môi trường cấp cao nhất của chương trình, có thể được kiểm tra bằng cách sử dụng biểu thức

>>> __name__
'__main__'
1;

  • tệp

    >>> __name__
    '__main__'
    
    2 trong các gói Python

  • Cả hai cơ chế này đều liên quan đến các mô-đun Python; . Chúng được giải thích chi tiết dưới đây. Nếu bạn chưa quen với các mô-đun Python, hãy xem phần hướng dẫn để biết phần giới thiệu

    >>> __name__
    '__main__'
    
    1

    Khi một mô-đun hoặc gói Python được nhập,

    >>> __name__
    '__main__'
    
    4 được đặt thành tên của mô-đun. Thông thường, đây là tên của chính tệp Python không có phần mở rộng
    >>> __name__
    '__main__'
    
    5

    >>> import configparser
    >>> configparser.__name__
    'configparser'
    

    Nếu tệp là một phần của gói, thì

    >>> __name__
    '__main__'
    
    4 cũng sẽ bao gồm đường dẫn của gói gốc

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    

    Tuy nhiên, nếu mô-đun được thực thi trong môi trường mã cấp cao nhất, thì

    >>> __name__
    '__main__'
    
    4 của nó được đặt thành chuỗi
    >>> __name__
    '__main__'
    
    8

    "Môi trường mã cấp cao nhất" là gì?

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9 là tên của môi trường nơi mã cấp cao nhất được chạy. “Mã cấp cao nhất” là mô-đun Python do người dùng chỉ định đầu tiên bắt đầu chạy. Đó là "cấp cao nhất" vì nó nhập tất cả các mô-đun khác mà chương trình cần. Đôi khi “mã cấp cao nhất” được gọi là điểm vào ứng dụng

    Môi trường mã cấp cao nhất có thể là

    • phạm vi của lời nhắc tương tác

      >>> __name__
      '__main__'
      

    • mô-đun Python được chuyển tới trình thông dịch Python dưới dạng đối số tệp

      >>> __name__
      '__main__'
      
      2

    • mô-đun hoặc gói Python được chuyển tới trình thông dịch Python với đối số

      >>> __name__
      '__main__'
      
      3

    • Mã Python được trình thông dịch Python đọc từ đầu vào tiêu chuẩn

      >>> __name__
      '__main__'
      
      4

    • Mã Python được chuyển tới trình thông dịch Python với đối số

      >>> __name__
      '__main__'
      
      5

    Trong mỗi tình huống này,

    >>> __name__
    '__main__'
    
    4 của mô-đun cấp cao nhất được đặt thành
    >>> __name__
    '__main__'
    
    8

    Kết quả là, một mô-đun có thể khám phá xem nó có đang chạy trong môi trường cấp cao nhất hay không bằng cách kiểm tra

    >>> __name__
    '__main__'
    
    4 của chính nó, điều này cho phép một thành ngữ chung cho mã thực thi có điều kiện khi mô-đun không được khởi tạo từ câu lệnh nhập

    >>> __name__
    '__main__'
    
    9

    Xem thêm

    Để có cái nhìn chi tiết hơn về cách thiết lập

    >>> __name__
    '__main__'
    
    4 trong mọi tình huống, hãy xem phần hướng dẫn

    Cách sử dụng thành ngữ

    Một số mô-đun chứa mã chỉ dành cho mục đích sử dụng tập lệnh, chẳng hạn như phân tích đối số dòng lệnh hoặc tìm nạp dữ liệu từ đầu vào tiêu chuẩn. Nếu một mô-đun như thế này được nhập từ một mô-đun khác, chẳng hạn như để kiểm tra đơn vị nó, mã tập lệnh cũng sẽ vô tình thực thi

    Đây là nơi sử dụng khối mã

    >>> __name__
    '__main__'
    
    26 có ích. Mã trong khối này sẽ không chạy trừ khi mô-đun được thực thi trong môi trường cấp cao nhất

    Đặt càng ít câu lệnh càng tốt vào khối bên dưới

    >>> __name__
    '__main__'
    
    27 có thể cải thiện độ rõ ràng và chính xác của mã. Thông thường, một hàm có tên
    >>> __name__
    '__main__'
    
    28 gói gọn hành vi chính của chương trình

    >>> __name__
    '__main__'
    
    4

    Lưu ý rằng nếu mô-đun không đóng gói mã bên trong hàm

    >>> __name__
    '__main__'
    
    28 mà thay vào đó đặt nó trực tiếp trong khối
    >>> __name__
    '__main__'
    
    26, thì biến
    >>> __name__
    '__main__'
    
    31 sẽ là toàn cục cho toàn bộ mô-đun. Điều này dễ xảy ra lỗi vì các chức năng khác trong mô-đun có thể vô tình sử dụng biến toàn cục thay vì tên cục bộ. Hàm
    >>> __name__
    '__main__'
    
    28 giải quyết vấn đề này

    Sử dụng hàm

    >>> __name__
    '__main__'
    
    28 có thêm lợi ích là bản thân hàm
    >>> __name__
    '__main__'
    
    34 được tách biệt và có thể nhập ở nơi khác. Khi
    >>> __name__
    '__main__'
    
    35 được nhập, các hàm
    >>> __name__
    '__main__'
    
    34 và
    >>> __name__
    '__main__'
    
    28 sẽ được xác định, nhưng cả hai hàm này sẽ không được gọi, bởi vì
    >>> __name__
    '__main__'
    
    38

    cân nhắc đóng gói

    Các hàm

    >>> __name__
    '__main__'
    
    28 thường được sử dụng để tạo các công cụ dòng lệnh bằng cách chỉ định chúng làm điểm nhập cho tập lệnh bảng điều khiển. Khi điều này được thực hiện, pip sẽ chèn lệnh gọi hàm vào tập lệnh mẫu, trong đó giá trị trả về của
    >>> __name__
    '__main__'
    
    28 được chuyển vào. Ví dụ

    >>> __name__
    '__main__'
    
    7

    Vì cuộc gọi đến

    >>> __name__
    '__main__'
    
    28 được gói gọn trong , kỳ vọng là chức năng của bạn sẽ trả về một số giá trị được chấp nhận làm đầu vào cho ;

    Bằng cách chủ động tuân theo quy ước này, mô-đun của chúng ta sẽ có hành vi tương tự khi chạy trực tiếp [i. e.

    >>> __name__
    '__main__'
    
    46] như nó sẽ có nếu sau này chúng tôi đóng gói nó dưới dạng điểm nhập tập lệnh bảng điều khiển trong gói có thể cài đặt pip

    Đặc biệt, hãy cẩn thận về việc trả về các chuỗi từ hàm

    >>> __name__
    '__main__'
    
    28 của bạn. sẽ diễn giải một đối số chuỗi dưới dạng thông báo lỗi, vì vậy chương trình của bạn sẽ có mã thoát là
    >>> __name__
    '__main__'
    
    49, biểu thị lỗi và chuỗi sẽ được ghi vào. Ví dụ
    >>> __name__
    '__main__'
    
    35 từ trước minh họa bằng cách sử dụng quy ước
    >>> __name__
    '__main__'
    
    52

    Xem thêm

    Hướng dẫn sử dụng gói Python chứa một tập hợp các hướng dẫn và tài liệu tham khảo về cách phân phối và cài đặt các gói Python bằng các công cụ hiện đại

    >>> __name__
    '__main__'
    
    2 trong Gói Python

    Nếu bạn không quen thuộc với các gói Python, hãy xem phần hướng dẫn. Thông thường nhất, tệp

    >>> __name__
    '__main__'
    
    2 được sử dụng để cung cấp giao diện dòng lệnh cho gói. Hãy xem xét gói giả thuyết sau đây, “bandclass”

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    0

    >>> __name__
    '__main__'
    
    2 sẽ được thực thi khi chính gói đó được gọi trực tiếp từ dòng lệnh bằng cờ. Ví dụ

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    1

    Lệnh này sẽ khiến

    >>> __name__
    '__main__'
    
    2 chạy. Cách bạn sử dụng cơ chế này sẽ phụ thuộc vào bản chất của gói bạn đang viết, nhưng trong trường hợp giả định này, có thể hợp lý nếu cho phép giáo viên tìm kiếm học sinh

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    2

    Lưu ý rằng

    >>> __name__
    '__main__'
    
    58 là một ví dụ về nhập tương đối. Kiểu nhập này có thể được sử dụng khi tham chiếu các mô-đun trong một gói. Để biết thêm chi tiết, xem trong phần hướng dẫn

    Cách sử dụng thành ngữ

    Nội dung của

    >>> __name__
    '__main__'
    
    2 thường không được rào bằng các khối
    >>> __name__
    '__main__'
    
    26. Thay vào đó, các tệp đó được giữ ngắn gọn, các chức năng để thực thi từ các mô-đun khác. Những mô-đun khác sau đó có thể dễ dàng kiểm tra đơn vị và có thể tái sử dụng đúng cách

    Nếu được sử dụng, khối

    >>> __name__
    '__main__'
    
    26 sẽ vẫn hoạt động như mong đợi đối với tệp
    >>> __name__
    '__main__'
    
    2 trong một gói vì thuộc tính
    >>> __name__
    '__main__'
    
    4 của nó sẽ bao gồm đường dẫn của gói nếu được nhập

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    3

    Điều này sẽ không hoạt động đối với các tệp

    >>> __name__
    '__main__'
    
    2 trong thư mục gốc của một. tập tin zip mặc dù. Do đó, để đảm bảo tính nhất quán, tối thiểu
    >>> __name__
    '__main__'
    
    2 như đề cập bên dưới được ưu tiên

    Xem thêm

    Xem ví dụ về gói có

    >>> __name__
    '__main__'
    
    2 tối thiểu trong thư viện chuẩn. Nó không chứa khối
    >>> __name__
    '__main__'
    
    26. Bạn có thể gọi nó bằng
    >>> __name__
    '__main__'
    
    40

    Xem để biết thêm chi tiết về cờ cho trình thông dịch thực thi

    Xem để biết cách chạy các ứng dụng được đóng gói dưới dạng. tập tin zip. Trong trường hợp này, Python tìm tệp

    >>> __name__
    '__main__'
    
    2 trong thư mục gốc của kho lưu trữ

    >>> __name__
    '__main__'
    
    45

    Bất kể chương trình Python được bắt đầu với mô-đun nào, các mô-đun khác đang chạy trong cùng chương trình đó có thể nhập phạm vi của môi trường cấp cao nhất [] bằng cách nhập mô-đun

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9. Thao tác này không nhập tệp
    >>> __name__
    '__main__'
    
    2 mà nhập bất kỳ mô-đun nào nhận được tên đặc biệt
    >>> __name__
    '__main__'
    
    8

    Đây là một mô-đun ví dụ sử dụng không gian tên

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    4

    Ví dụ sử dụng mô-đun này có thể như sau

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    5

    Bây giờ, nếu chúng ta bắt đầu chương trình của mình, kết quả sẽ như thế này

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    6

    Mã thoát của chương trình sẽ là 1, cho biết có lỗi. Bỏ ghi chú dòng với

    >>> __name__
    '__main__'
    
    70 sửa chương trình và bây giờ chương trình thoát với mã trạng thái 0, biểu thị thành công

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    7

    Lưu ý rằng việc nhập

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9 không gây ra bất kỳ sự cố nào với mã cấp cao nhất chạy ngoài ý muốn dành cho việc sử dụng tập lệnh được đặt trong khối
    >>> __name__
    '__main__'
    
    72 của mô-đun
    >>> __name__
    '__main__'
    
    73. Tại sao điều này làm việc?

    Python chèn một mô-đun

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9 trống vào khi khởi động trình thông dịch và điền vào mô-đun đó bằng cách chạy mã cấp cao nhất. Trong ví dụ của chúng tôi, đây là mô-đun
    >>> __name__
    '__main__'
    
    73 chạy từng dòng và nhập
    >>> __name__
    '__main__'
    
    77. Đổi lại,
    >>> __name__
    '__main__'
    
    77 nhập khẩu
    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9 [thực ra là
    >>> __name__
    '__main__'
    
    73]. Đó là một chu kỳ nhập khẩu. May mắn thay, vì mô-đun
    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9 được điền một phần có trong , nên Python chuyển mô-đun đó tới
    >>> __name__
    '__main__'
    
    77. Xem trong tài liệu tham khảo của hệ thống nhập khẩu để biết chi tiết về cách thức hoạt động của nó

    REPL của Python là một ví dụ khác về “môi trường cấp cao nhất”, vì vậy mọi thứ được định nghĩa trong REPL đều trở thành một phần của phạm vi

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    8

    Lưu ý rằng trong trường hợp này, phạm vi

    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    9 không chứa thuộc tính
    >>> from concurrent.futures import process
    >>> process.__name__
    'concurrent.futures.process'
    
    06 vì nó tương tác

    Làm cách nào để trả về dữ liệu từ tập lệnh Python?

    Câu lệnh return được sử dụng để kết thúc việc thực thi lệnh gọi hàm và “trả về” kết quả [giá trị của biểu thức theo sau từ khóa return] cho người gọi . Các câu lệnh sau câu lệnh return không được thực thi. Nếu câu lệnh trả về không có bất kỳ biểu thức nào, thì giá trị đặc biệt Không được trả về.

    Bạn có thể trả lại bản in Python không?

    Hàm print[] viết, i. e. , "prints", một chuỗi hoặc một số trên bảng điều khiển. Câu lệnh return không in ra giá trị mà nó trả về khi hàm được gọi . Tuy nhiên, nó khiến hàm thoát hoặc kết thúc ngay lập tức, ngay cả khi đó không phải là câu lệnh cuối cùng của hàm.

    Hàm trả về là gì?

    Trả về là giá trị mà một hàm trả về tập lệnh gọi hoặc hàm khi nó hoàn thành tác vụ của mình . Giá trị trả về có thể là bất kỳ một trong bốn loại biến. xử lý, số nguyên, đối tượng hoặc chuỗi. Loại giá trị mà hàm của bạn trả về phụ thuộc phần lớn vào tác vụ mà nó thực hiện.

    Chủ Đề