Hướng dẫn python list colon comma - danh sách python dấu hai chấm

Nói chung:

foo[somestuff]

gọi là __getitem__ hoặc __setitem__. . Bây giờ, nếu somestuff có dấu phẩy trong đó, Python sẽ chuyển tuple cho chức năng cơ bản:

foo[1,2]  # passes a tuple

Nếu có

foo[1,2]  # passes a tuple
0, Python sẽ vượt qua một lát cắt:

foo[:]  # passes `slice[None, None, None]`
foo[1:2]  # passes `slice[1, 2, None]`
foo[1:2:3]  # passes `slice[1, 2, 3]
foo[1::3]  # passes `slice[1, None, 3]

Hy vọng bạn có được ý tưởng. Bây giờ nếu có dấu phẩy và đại tràng, Python sẽ vượt qua một tuple có chứa một lát cắt. Trong ví dụ của bạn:

foo[:, 1]  # passes the tuple `[slice[None, None, None], 1]`

Những gì đối tượng [

foo[1,2]  # passes a tuple
1] làm với đầu vào hoàn toàn tùy thuộc vào đối tượng.

Hãy nói về việc sử dụng dấu chấm phẩy trong Python. Ý nghĩa chung của dấu chấm phẩy [;] trong các ngôn ngữ lập trình khác nhau là chấm dứt hoặc ngừng tuyên bố hiện tại. & NBSP;

Nội phân Chính showShow

  • Tại sao dấu chấm phẩy được phép trong Python?
  • Làm thế nào để in một dấu chấm phẩy trong Python?
  • Phân chia các tuyên bố với dấu chấm phẩy
  • Sử dụng dấu chấm phẩy với các vòng trong Python
  • Giới thiệu
  • Một quán ngu si là tinh nghịch của tâm trí nhỏ
  • Bố trí mã
  • Vết lõm
  • Tab hoặc không gian?
  • Chiều dài đường tối đa
  • Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?
  • Các dòng trống
  • Mã hóa tập tin nguồn
  • Tên Dunder cấp độ mô -đun
  • Trích dẫn chuỗi
  • Khoảng trắng trong biểu thức và câu lệnh
  • Các khuyến nghị khác
  • Khi nào nên sử dụng dấu phẩy kéo dài
  • Đặt tên quy ước
  • Nguyên tắc ghi đè
  • Mô tả: Kiểu đặt tên
  • Quy định: Đặt tên quy ước
  • Giao diện công khai và nội bộ
  • Khuyến nghị lập trình
  • Chú thích chức năng
  • Chú thích biến

Nội phân chính

  • Tại sao dấu chấm phẩy được phép trong Python?
  • Làm thế nào để in một dấu chấm phẩy trong Python?
  • Phân chia các tuyên bố với dấu chấm phẩy
  • Sử dụng dấu chấm phẩy với các vòng trong Python
  • Giới thiệu
  • Một quán ngu si là tinh nghịch của tâm trí nhỏ
  • Bố trí mã
  • Vết lõm
  • Tab hoặc không gian?
  • Chiều dài đường tối đa
  • Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?
  • Các dòng trống
  • Mã hóa tập tin nguồn
  • Tên Dunder cấp độ mô -đun
  • Trích dẫn chuỗi
  • Khoảng trắng trong biểu thức và câu lệnh
  • Các khuyến nghị khác
  • Khi nào nên sử dụng dấu phẩy kéo dài
  • Đặt tên quy ước
  • Nguyên tắc ghi đè
  • Mô tả: Kiểu đặt tên
  • Quy định: Đặt tên quy ước
  • Giao diện công khai và nội bộ
  • Khuyến nghị lập trình
  • Chú thích chức năng
  • Chú thích biến

Nội phân chính

  • Tại sao dấu chấm phẩy được phép trong Python?
  • Làm thế nào để in một dấu chấm phẩy trong Python?
  • Phân chia các tuyên bố với dấu chấm phẩy
  • Sử dụng dấu chấm phẩy với các vòng trong Python
  • Giới thiệu
  • Một quán ngu si là tinh nghịch của tâm trí nhỏ
  • Bố trí mã
  • Vết lõm
  • Tab hoặc không gian?
  • Chiều dài đường tối đa
  • Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?
  • Các dòng trống
  • Mã hóa tập tin nguồn
  • Tên Dunder cấp độ mô -đun
  • Trích dẫn chuỗi
  • Khoảng trắng trong biểu thức và câu lệnh
  • Các khuyến nghị khác
  • Khi nào nên sử dụng dấu phẩy kéo dài
  • Đặt tên quy ước
  • Nguyên tắc ghi đè
  • Mô tả: Kiểu đặt tên
  • Quy định: Đặt tên quy ước
  • Giao diện công khai và nội bộ
  • Khuyến nghị lập trình
  • Chú thích chức năng
  • Chú thích biến

Nội phân chính

Tại sao dấu chấm phẩy được phép trong Python?

Trong các ngôn ngữ lập trình như C, C ++ và Java, sử dụng dấu chấm phẩy là cần thiết để chấm dứt dòng mã. Tuy nhiên, đó không phải là trường hợp với Python. Vậy sử dụng dấu chấm phẩy có tạo ra sự khác biệt nào trong lập trình Python không? Hãy cùng tìm hiểu.

Python không & nbsp; yêu cầu & nbsp; bán đại hội để chấm dứt các câu lệnh. Semicolons & nbsp; Can & nbsp; được sử dụng để phân định các câu lệnh nếu bạn muốn đặt nhiều câu lệnh trên cùng một dòng.semicolon in Python denotes separation, rather than termination. It allows you to write multiple statements on the same line. This syntax also makes it legal to put a semicolon at the end of a single statement. So, it’s actually two statements where the second one is empty.

Làm thế nào để in một dấu chấm phẩy trong Python?

A & nbsp; semicolon & nbsp; in & nbsp; python & nbsp; biểu thị sự tách biệt, thay vì chấm dứt. Nó cho phép bạn viết nhiều câu lệnh trên cùng một dòng. Cú pháp này cũng làm cho nó & nbsp; Legal & nbsp; để đặt a & nbsp; semicolon & nbsp; vào cuối một tuyên bố. Vì vậy, nó thực sự là hai tuyên bố trong đó câu thứ hai trống rỗng.

Output:

Hãy để xem những gì xảy ra khi chúng ta cố gắng in một dấu chấm phẩy như một chuỗi thông thường trong Python

Phân chia các tuyên bố với dấu chấm phẩy

Nó đối xử với dấu chấm phẩy không khác nhau và in nó ra.

Syntax:

Bây giờ, hãy để Lừa xem làm thế nào chúng ta có thể phân chia các tuyên bố trong Python với việc sử dụng dấu chấm phẩy. Trong trường hợp này, chúng tôi sẽ cố gắng có nhiều hơn 2 câu trên cùng một dòng với việc sử dụng dấu chấm phẩy.

Ví dụ:

Dưới đây là ba tuyên bố trong Python mà không có dấu chấm phẩy

>>> in ['HI'] >>> in ['Xin chào'] >>> in ['hola!']]

Bây giờ, hãy để sử dụng cùng ba câu lệnh với dấu chấm phẩy

Output:

In ['Hi']; In ['Xin chào']; In ['Hola!']]

Sử dụng dấu chấm phẩy với các vòng trong Python

Như bạn có thể thấy, Python thực hiện ba tuyên bố riêng lẻ sau khi chúng tôi chia chúng bằng dấu chấm phẩy. Nếu không sử dụng điều đó, thông dịch viên sẽ cho chúng ta một lỗi.

Example:

Trong các vòng như ‘cho vòng lặp‘, một dấu chấm phẩy có thể được sử dụng nếu toàn bộ câu lệnh bắt đầu bằng một vòng lặp và bạn sử dụng một dấu chấm phẩy để tạo thành một câu lệnh mạch lạc như thân của vòng lặp.

Output:

cho tôi trong phạm vi [4]: ​​in ['hi']; In ['Xin chào']

Xin chào xin chào xin chào xin chào xin chào xin chào xin chào

Example:

Python sẽ ném một lỗi nếu bạn sử dụng dấu chấm phẩy để tách biệt biểu thức bình thường từ một câu lệnh khối i.e vòng lặp.

In ['Hi']; Đối với tôi trong phạm vi [4]: ​​in ['xin chào']]

Đầu ra:

Sự kết luận

  • Điều này đưa chúng ta đến cuối mô -đun ngắn gọn này về việc sử dụng dấu chấm phẩy trong Python. Hãy để tóm tắt hướng dẫn với hai con trỏ:
  • Một dấu chấm phẩy trong Python chủ yếu được sử dụng để phân tách nhiều câu lệnh được viết trên một dòng.

Semicolon được sử dụng để viết tuyên bố nhỏ và dự trữ một chút không gian - như name = marie; Tuổi = 23; In [Tên, Tuổi]

Tác giả: Guido Van Rossum, Barry Warsaw, Nick Coghlan Tình trạng: Activetype: ProcessCreated: 05-Jul-2001post-History: 05-Jul-2001, 01-Aug-2013:Guido van Rossum , Barry Warsaw , Nick Coghlan Status:ActiveType:ProcessCreated:05-Jul-2001Post-History:05-Jul-2001, 01-Aug-2013
Mục lục
  • Giới thiệu
  • Một quán ngu si là tinh nghịch của tâm trí nhỏ
  • Bố trí mã
    • Vết lõm
    • Tab hoặc không gian?
    • Chiều dài đường tối đa
    • Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?
    • Các dòng trống
    • Mã hóa tập tin nguồn
    • Nhập khẩu
    • Tên Dunder cấp độ mô -đun
  • Trích dẫn chuỗi
  • Khoảng trắng trong biểu thức và câu lệnh
    • Thói xấu
    • Các khuyến nghị khác
  • Khi nào nên sử dụng dấu phẩy kéo dài
  • Bình luận
    • Khối ý kiến
    • Ý kiến ​​nội tuyến
    • Chuỗi tài liệu
  • Đặt tên quy ước
    • Nguyên tắc ghi đè
    • Mô tả: Kiểu đặt tên
    • Quy định: Đặt tên quy ước
      • Tên cần tránh
      • Khả năng tương thích ASCII
      • Tên gói và tên mô -đun
      • Tên lớp
      • Nhập tên biến
      • Tên ngoại lệ
      • Tên biến toàn cầu
      • Tên chức năng và tên biến
      • Các đối số chức năng và phương thức
      • Tên phương thức và biến thể hiện
      • Hằng số
      • Thiết kế cho thừa kế
    • Giao diện công khai và nội bộ
  • Khuyến nghị lập trình
    • Chú thích chức năng
    • Chú thích biến
  • Người giới thiệu
  • Bản quyền

Giới thiệu

Một quán ngu si là tinh nghịch của tâm trí nhỏ

Bố trí mã

Vết lõm

Tab hoặc không gian?

Một quán ngu si là tinh nghịch của tâm trí nhỏ

Bố trí mã

Vết lõm

Tab hoặc không gian?

Chiều dài đường tối đa

Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?

  1. Các dòng trống
  2. Mã hóa tập tin nguồn
  3. Bởi vì mã trong câu hỏi có trước việc giới thiệu hướng dẫn và không có lý do nào khác để sửa đổi mã đó.
  4. Khi mã cần giữ tương thích với các phiên bản Python cũ hơn mà không ủng hộ tính năng được đề xuất bởi Hướng dẫn kiểu.

Bố trí mã

Vết lõm

Sử dụng 4 không gian trên mỗi cấp độ thụt.

Các dòng tiếp tục nên căn chỉnh các phần tử được bọc theo chiều dọc bằng cách sử dụng đường thẳng của Python, nối bên trong dấu ngoặc đơn, dấu ngoặc và niềng răng hoặc sử dụng thụt lề treo [1]. Khi sử dụng thụt lề treo sau đây nên được xem xét; Không nên có đối số trên dòng đầu tiên và nên sử dụng thụt thêm để phân biệt rõ ràng là một dòng tiếp tục:

# Đúng:# được căn chỉnh với mở delimiter.foo = long_function_name [var_one, var_two, var_three, var_four] print [var_one]# treo indents nên thêm một cấp.foo = long_function_name [var_one, var_two, var_three, var_four]# sai:# đối số trên dòng đầu tiên bị cấm ]# Yêu cầu thụt thêm như thụt lề không phân biệt được.deflong_function_name [var_one, var_two, var_three, var_four]: in [var_one] # Aligned with opening delimiter. foo = long_function_name[var_one, var_two, var_three, var_four] # Add 4 spaces [an extra level of indentation] to distinguish arguments from the rest. def long_function_name[ var_one, var_two, var_three, var_four]: print[var_one] # Hanging indents should add a level. foo = long_function_name[ var_one, var_two, var_three, var_four] # Wrong: # Arguments on first line forbidden when not using vertical alignment. foo = long_function_name[var_one, var_two, var_three, var_four] # Further indentation required as indentation is not distinguishable. def long_function_name[ var_one, var_two, var_three, var_four]: print[var_one]

Quy tắc 4 không gian là tùy chọn cho các dòng tiếp tục.

Optional:

# Treo indents * có thể * được thụt vào khác với 4 không gian.foo = long_function_name [var_one, var_two, var_three, var_four] foo = long_function_name[ var_one, var_two, var_three, var_four]

Khi phần có điều kiện của một câu chuyện if đủ dài để yêu cầu nó được viết trên nhiều dòng, nó đáng chú ý là sự kết hợp của một từ khóa hai ký tự [tức là. Nếu], cộng với một không gian duy nhất, cộng với dấu ngoặc đơn tạo ra một thụt 4 không gian tự nhiên cho các dòng tiếp theo của điều kiện đa dòng. Điều này có thể tạo ra một cuộc xung đột trực quan với bộ mã được thụt vào lồng bên trong sự tuyên bố của IF, cũng sẽ tự nhiên được thụt vào 4 không gian. PEP này không có vị trí rõ ràng về cách [hoặc liệu] có phân biệt trực quan các dòng có điều kiện như vậy với bộ lồng nhau bên trong sự tuyên bố của IF hay không. Các tùy chọn chấp nhận được trong tình huống này bao gồm, nhưng không giới hạn ở:if-statement is long enough to require that it be written across multiple lines, it’s worth noting that the combination of a two character keyword [i.e. if], plus a single space, plus an opening parenthesis creates a natural 4-space indent for the subsequent lines of the multiline conditional. This can produce a visual conflict with the indented suite of code nested inside the if-statement, which would also naturally be indented to 4 spaces. This PEP takes no explicit position on how [or whether] to further visually distinguish such conditional lines from the nested suite inside the if-statement. Acceptable options in this situation include, but are not limited to:

# Không có thêm thụt lề.if [this_is_one_thingandthat_is_another_thing]: do_somoth Thêm một số thụt thêm vào dòng tiếp tục có điều kiện.if [this_is_one_thingandthat_is_another_thing]: do_somothing [] if [this_is_one_thing and that_is_another_thing]: do_something[] # Add a comment, which will provide some distinction in editors # supporting syntax highlighting. if [this_is_one_thing and that_is_another_thing]: # Since both conditions are true, we can frobnicate. do_something[] # Add some extra indentation on the conditional continuation line. if [this_is_one_thing and that_is_another_thing]: do_something[]

[Cũng xem các cuộc thảo luận về việc nên phá vỡ trước hay sau các nhà khai thác nhị phân bên dưới.]

Đóng nẹp/giá đỡ/dấu ngoặc đơn trên các cấu trúc đa dòng có thể xếp theo ký tự không phải là màu đầu tiên của dòng danh sách cuối cùng, như trong:

my_list=[1,2,3,4,5,6,]result=some_function_that_takes_arguments['a','b','c','d','e','f',] = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments[ 'a', 'b', 'c', 'd', 'e', 'f', ]

Hoặc nó có thể được xếp hàng dưới ký tự đầu tiên của dòng bắt đầu cấu trúc đa dòng, như trong:

my_list=[1,2,3,4,5,6,]result=some_function_that_takes_arguments['a','b','c','d','e','f',] = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments[ 'a', 'b', 'c', 'd', 'e', 'f', ]

Tab hoặc không gian?

Không gian là phương pháp thụt đầu tiên ưa thích.

Các tab chỉ nên được sử dụng để duy trì sự phù hợp với mã đã được thụt vào với các tab.

Python không hoàn toàn trộn lẫn các tab và không gian để thụt vào.

Chiều dài đường tối đa

Giới hạn tất cả các dòng ở mức tối đa 79 ký tự.

Đối với các khối văn bản dài với các hạn chế cấu trúc ít hơn [DocStrings hoặc nhận xét], độ dài dòng phải được giới hạn ở 72 ký tự.

Giới hạn chiều rộng cửa sổ Trình soạn thảo cần thiết cho phép có một số tệp mở cạnh nhau và hoạt động tốt khi sử dụng các công cụ đánh giá mã trình bày hai phiên bản trong các cột liền kề.

Việc gói mặc định trong hầu hết các công cụ phá vỡ cấu trúc trực quan của mã, khiến nó khó hiểu hơn. Các giới hạn được chọn để tránh bọc trong các trình chỉnh sửa với chiều rộng cửa sổ được đặt thành 80, ngay cả khi công cụ đặt một glyph điểm trong cột cuối cùng khi các dòng gói. Một số công cụ dựa trên web có thể không cung cấp kết thúc dòng động.

Một số đội thích mạnh mẽ một dòng dài hơn. Đối với mã được duy trì độc quyền hoặc chủ yếu bởi một nhóm có thể đạt được thỏa thuận về vấn đề này, có thể tăng giới hạn độ dài dòng lên tới 99 ký tự, với điều kiện là nhận xét và tài liệu vẫn được gói ở 72 ký tự.

Thư viện tiêu chuẩn Python là bảo thủ và yêu cầu giới hạn các dòng cho 79 ký tự [và docstrings/bình luận đến 72].

Cách ưa thích để gói các đường dài là bằng cách sử dụng sự tiếp tục dòng ngụ ý của Python, bên trong ngoặc đơn, ngoặc và thanh giằng. Các đường dài có thể được phá vỡ trên nhiều dòng bằng cách gói các biểu thức trong ngoặc đơn. Chúng nên được sử dụng theo sở thích để sử dụng dấu gạch chéo ngược để tiếp tục dòng.

Backslashes vẫn có thể phù hợp đôi khi. Ví dụ, dài, nhiều người không thể sử dụng tiếp tục ngầm trước Python 3.10, do đó, các dấu gạch chéo ngược được chấp nhận cho trường hợp đó:with-statements could not use implicit continuation before Python 3.10, so backslashes were acceptable for that case:

withopen ['/path/to/some/file/bạn/want/to/read'] asfile_1, \ open ['/path/to/some/file/breat/writing', 'w'] [file_1.read []] open['/path/to/some/file/you/want/to/read'] as file_1, \ open['/path/to/some/file/being/written', 'w'] as file_2: file_2.write[file_1.read[]]

[Xem các cuộc thảo luận trước đây về các câu chuyện if đa dòng để biết thêm về suy nghĩ về thụt lề của các câu chuyện đa dòng như vậy.]with-statements.]

Một trường hợp như vậy là với các tuyên bố khẳng định.assert statements.

Hãy chắc chắn để thụt dòng dòng tiếp tục một cách thích hợp.

Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?

Trong nhiều thập kỷ, phong cách được đề xuất là phá vỡ sau khi các nhà khai thác nhị phân. Nhưng điều này có thể làm tổn thương khả năng đọc theo hai cách: các nhà khai thác có xu hướng nằm rải rác trên các cột khác nhau trên màn hình và mỗi toán tử được chuyển ra khỏi toán hạng của nó và vào dòng trước. Ở đây, mắt phải làm thêm để cho biết mục nào được thêm vào và cái nào được trừ:

# Sai:# Các nhà khai thác ngồi cách xa Toán tử của họ = [Gross_Wages+Taxable_interest+[Cổ tức-đủ điều kiện_dividends] -IRA_DEDIONSTION-student_loan_interest] # operators sit far away from their operands income = [gross_wages + taxable_interest + [dividends - qualified_dividends] - ira_deduction - student_loan_interest]

Để giải quyết vấn đề dễ đọc này, các nhà toán học và các nhà xuất bản của họ tuân theo quy ước ngược lại. Donald Knuth giải thích quy tắc truyền thống trong các máy tính và loạt sắp xếp của mình: Mặc dù các công thức trong một đoạn văn luôn bị phá vỡ sau các hoạt động và quan hệ nhị phân, các công thức hiển thị luôn bị phá vỡ trước khi hoạt động nhị phân [3].

Theo truyền thống từ toán học thường dẫn đến mã dễ đọc hơn:

# Đúng:# Dễ dàng phù hợp với các toán tử với operandsincome = [gross_wages+Taxable_interest+[cổ tức-đủ điều kiện_dividends] -IRA_DEDUSION-student_loan_interest] # easy to match operators with operands income = [gross_wages + taxable_interest + [dividends - qualified_dividends] - ira_deduction - student_loan_interest]

Trong mã Python, được phép phá vỡ trước hoặc sau một toán tử nhị phân, miễn là quy ước là nhất quán tại địa phương. Đối với phong cách mới Knuth Knuth được đề xuất.

Các dòng trống

Chức năng cấp cao nhất và định nghĩa lớp với hai dòng trống.

Các định nghĩa phương pháp bên trong một lớp được bao quanh bởi một dòng trống duy nhất.

Các dòng trống thêm có thể được sử dụng [một cách tiết kiệm] cho các nhóm chức năng liên quan riêng biệt. Các dòng trống có thể được bỏ qua giữa một loạt các lớp lót liên quan [ví dụ: một tập hợp các triển khai giả].

Sử dụng các dòng trống trong các chức năng, một cách tiết kiệm, để chỉ ra các phần logic.

Python chấp nhận điều khiển-l [tức là ^L] tạo thành ký tự thức ăn là khoảng trắng; Nhiều công cụ coi các ký tự này là dấu phân cách trang, vì vậy bạn có thể sử dụng chúng để tách các trang liên quan đến tệp của mình. Lưu ý, một số trình chỉnh sửa và người xem mã dựa trên web có thể không nhận ra Control-L là nguồn cấp dữ liệu biểu mẫu và sẽ hiển thị một glyph khác ở vị trí của nó.

Mã hóa tập tin nguồn

Mã trong phân phối Python cốt lõi phải luôn luôn sử dụng UTF-8 và không nên có khai báo mã hóa.

Trong thư viện tiêu chuẩn, các mã hóa không phải UTF-8 chỉ nên được sử dụng cho mục đích thử nghiệm. Sử dụng các ký tự không phải ASCII một cách tiết kiệm, tốt nhất là chỉ để biểu thị địa điểm và tên người. Nếu sử dụng các ký tự không phải ASCII làm dữ liệu, hãy tránh các ký tự unicode ồn ào như z̯̯͡a̧͎̺l̡͓̫g̹̲o̡̼̘ và các dấu lệnh byte.

Tất cả các định danh trong thư viện tiêu chuẩn Python phải sử dụng các định danh chỉ ASCII-ASCII và nên sử dụng các từ tiếng Anh ở bất cứ nơi nào khả thi [trong nhiều trường hợp, viết tắt và thuật ngữ kỹ thuật được sử dụng mà tiếng Anh].

Các dự án nguồn mở với khán giả toàn cầu được khuyến khích áp dụng chính sách tương tự.

Nhập khẩu

  • Nhập khẩu thường phải ở trên các dòng riêng biệt:# Đúng: Nhập trí# Correct: import os import sys

    Nó có thể nói điều này mặc dù:

    # Đúng: FromsubProcessImportPopen, ống from subprocess import Popen, PIPE
  • Nhập khẩu luôn được đặt ở đầu tệp, ngay sau khi bất kỳ bình luận và tài liệu mô -đun nào, và trước khi mô -đun toàn cầu và hằng số.

    Nhập khẩu phải được nhóm theo thứ tự sau:

    1. Nhập khẩu thư viện tiêu chuẩn.
    2. Nhập khẩu của bên thứ ba liên quan.
    3. Ứng dụng cục bộ/Thư viện nhập khẩu cụ thể.

    Bạn nên đặt một dòng trống giữa mỗi nhóm nhập khẩu.

  • Nhập khẩu tuyệt đối được khuyến nghị, vì chúng thường dễ đọc hơn và có xu hướng hoạt động tốt hơn [hoặc ít nhất là đưa ra thông báo lỗi tốt hơn] nếu hệ thống nhập được cấu hình không chính xác [chẳng hạn như khi thư mục bên trong gói kết thúc trên sys.path]: Nhập khẩuMypkg.SiBlingFrommyPkGimportsiBlingFrommypkg.SiBlingImportExamplesys.path]:import mypkg.sibling from mypkg import sibling from mypkg.sibling import example

    Tuy nhiên, nhập khẩu tương đối rõ ràng là một sự thay thế có thể chấp nhận được đối với nhập khẩu tuyệt đối, đặc biệt là khi xử lý các bố cục gói phức tạp trong đó sử dụng nhập khẩu tuyệt đối sẽ là dòng chảy không cần thiết:

    from.importsiblingfrom.siblingimportexample . import sibling from .sibling import example

    Mã thư viện tiêu chuẩn nên tránh bố cục gói phức tạp và luôn sử dụng nhập khẩu tuyệt đối.

  • Khi nhập một lớp từ một mô-đun chứa lớp, nó thường ổn khi đánh vần điều này: FromMyClassImportMyClassFromfoo.bar.yourClassImportyourClassfrom myclass import MyClass from foo.bar.yourclass import YourClass

    Nếu chính tả này gây ra tiếng vang địa phương, thì hãy đánh vần chúng một cách rõ ràng:

    importmyclassimportfoo.bar.yourclass myclass import foo.bar.yourclass

    và sử dụng các loại myclass.myclass và và foo.bar.yourclass.yourclass.

  • Nên tránh nhập ký tự đại diện [FromImport*], vì chúng làm cho nó không rõ tên nào có trong không gian tên, gây nhầm lẫn cho cả người đọc và nhiều công cụ tự động. Có một trường hợp sử dụng có thể phòng thủ để nhập thẻ đại diện, đó là tái xuất bản giao diện nội bộ như một phần của API công khai [ví dụ, ghi đè lên việc triển khai Python thuần túy của giao diện với các định nghĩa từ mô -đun tăng tốc tùy chọn và chính xác định nghĩa nào sẽ là Ghi đè không được biết trước].from import *] should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools. There is one defensible use case for a wildcard import, which is to republish an internal interface as part of a public API [for example, overwriting a pure Python implementation of an interface with the definitions from an optional accelerator module and exactly which definitions will be overwritten isn’t known in advance].

    Khi xuất bản lại tên theo cách này, các hướng dẫn dưới đây liên quan đến giao diện công cộng và nội bộ vẫn được áp dụng.

Tên Dunder cấp độ mô -đun

Mức độ mô -đun Dunders Dunders [tức là Tên có hai dấu gạch dưới hàng đầu và hai dấu gạch ngang] như __all__, __Author__, __version__, v.v. Python bắt buộc rằng các phiên bản tương lai phải xuất hiện trong mô-đun trước bất kỳ mã nào khác ngoại trừ DocStrings:__all__, __author__, __version__, etc. should be placed after the module docstring but before any import statements except from __future__ imports. Python mandates that future-imports must appear in the module before any other code except docstrings:

"" "Đây là mô -đun ví dụ. Mô -đun này làm công cụ." " This module does stuff. """ from __future__ import barry_as_FLUFL __all__ = ['a', 'b', 'c'] __version__ = '0.1' __author__ = 'Cardinal Biggles' import os import sys

Trích dẫn chuỗi

Trong Python, các chuỗi được trích xuất đơn và chuỗi được trích xuất kép là như nhau. PEP này không đưa ra khuyến nghị cho việc này. Chọn một quy tắc và bám vào nó. Tuy nhiên, khi một chuỗi chứa các ký tự trích dẫn đơn hoặc kép, hãy sử dụng chuỗi khác để tránh dấu gạch chéo ngược trong chuỗi. Nó cải thiện khả năng đọc.

Đối với các chuỗi được trích dẫn ba, luôn sử dụng các ký tự trích dẫn kép để phù hợp với quy ước DocString trong PEP 257.

Khoảng trắng trong biểu thức và câu lệnh

Thói xấu

Tránh khoảng trắng bên ngoài trong các tình huống sau:

  • Ngay lập tức bên trong dấu ngoặc đơn, ngoặc hoặc niềng răng:# đúng: spam [HAM [1], {trứng: 2}]# sai: spam [Ham [1], {trứng: 2}]# Correct: spam[ham[1], {eggs: 2}] # Wrong: spam[ ham[ 1 ], { eggs: 2 } ]
  • Giữa dấu phẩy kéo dài và dấu ngoặc đơn sau:
  • Ngay lập tức trước dấu phẩy, dấu chấm phẩy hoặc dấu hai chấm:# đúng: ifx == 4: in [x, y]; x, y = y, x# sai: ifx == 4: in [x, y]; x, y = y = y, x# Correct: if x == 4: print[x, y]; x, y = y, x # Wrong: if x == 4 : print[x , y] ; x , y = y , x
  • Tuy nhiên, trong một lát cắt, ruột kết hoạt động giống như một toán tử nhị phân và nên có số lượng bằng nhau ở hai bên [coi nó là người vận hành có mức độ ưu tiên thấp nhất]. Trong một lát mở rộng, cả hai dấu chấm đều phải có cùng một khoảng cách được áp dụng. Ngoại lệ: Khi một tham số lát cắt bị bỏ qua, không gian bị bỏ qua:# đúng: Ham [1: 9], Ham [1: 9: 3], Ham [: 9: 3], Ham [1 :: 3], Ham [1: 9:] Ham [Lower: Upper], Ham [Lower: Upper ], ham [:: Step_fn [x]] ham [thấp hơn+bù: trên+bù] 1: 9: 3] HAM [LOWER :: Upper] Ham [: Upper]# Correct: ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:] ham[lower:upper], ham[lower:upper:], ham[lower::step] ham[lower+offset : upper+offset] ham[: upper_fn[x] : step_fn[x]], ham[:: step_fn[x]] ham[lower + offset : upper + offset] # Wrong: ham[lower + offset:upper + offset] ham[1: 9], ham[1 :9], ham[1:9 :3] ham[lower : : upper] ham[ : upper]
  • Ngay trước khi dấu ngoặc đơn khởi động danh sách đối số của một cuộc gọi chức năng:
  • Ngay trước dấu ngoặc đơn mở bắt đầu lập chỉ mục hoặc cắt:# đúng: dct ['key'] = lst [index]# sai: dct ['key'] = lst [index]# Correct: dct['key'] = lst[index] # Wrong: dct ['key'] = lst [index]
  • Nhiều hơn một khoảng trống xung quanh một toán tử [hoặc khác] để căn chỉnh nó với một toán tử khác:# đúng: x = 1y = 2Long_varable = 3# sai: x = 1y = 2Long_varable = 3# Correct: x = 1 y = 2 long_variable = 3 # Wrong: x = 1 y = 2 long_variable = 3

Các khuyến nghị khác

  • Tránh kéo theo khoảng trắng ở bất cứ đâu. Bởi vì nó thường vô hình, nó có thể gây nhầm lẫn: ví dụ: Một dấu gạch chéo ngược theo sau là một không gian và một dòng mới không được tính là điểm đánh dấu tiếp tục dòng. Một số biên tập viên don don bảo tồn nó và nhiều dự án [như chính Cpython] có các móc tiền trước từ chối nó.
  • Luôn bao quanh các toán tử nhị phân này với một không gian duy nhất ở hai bên: gán [=], gán tăng cường [+=, -= v.v.], so sánh [==,,! =,, =, In, notin, is, isnot] , Booleans [và, hoặc, không].=], augmented assignment [+=, -= etc.], comparisons [==, , !=, , =, in, not in, is, is not], Booleans [and, or, not].
  • Nếu các toán tử có các ưu tiên khác nhau được sử dụng, hãy xem xét thêm khoảng trắng xung quanh các toán tử có mức ưu tiên thấp nhất [IES]. Sử dụng phán đoán của riêng bạn; Tuy nhiên, không bao giờ sử dụng nhiều hơn một không gian và luôn có cùng một lượng khoảng trắng ở cả hai bên của toán tử nhị phân:# đúng: i = i+1Submited+= 1x = x*2-1 -hypot2 = x*x+y*yc = .# Correct: i = i + 1 submitted += 1 x = x*2 - 1 hypot2 = x*x + y*y c = [a+b] * [a-b] # Wrong: i=i+1 submitted +=1 x = x * 2 - 1 hypot2 = x * x + y * y c = [a + b] * [a - b]
  • Chú thích chức năng nên sử dụng các quy tắc thông thường cho các dấu chấm và luôn có khoảng trống xung quanh mũi tên -> nếu có. [Xem các chú thích chức năng bên dưới để biết thêm về chú thích chức năng.] []-> Rồi: ...-> arrow if present. [See Function Annotations below for more about function annotations.]:# Correct: def munge[input: AnyStr]: ... def munge[] -> PosInt: ... # Wrong: def munge[input:AnyStr]: ... def munge[]->PosInt: ...
  • Không sử dụng các khoảng trắng xung quanh = dấu khi được sử dụng để chỉ ra đối số từ khóa hoặc khi được sử dụng để chỉ ra giá trị mặc định cho tham số hàm không được bảo vệ:# đúng: defcomplex [real, hình ảnh = 0,0] = hình ảnh]# Sai: defcomplex [real, hình ảnh = 0,0]: returnMagic [r = real, i = imag]= sign when used to indicate a keyword argument, or when used to indicate a default value for an unannotated function parameter:# Correct: def complex[real, imag=0.0]: return magic[r=real, i=imag] # Wrong: def complex[real, imag = 0.0]: return magic[r = real, i = imag]

    Tuy nhiên, khi kết hợp chú thích đối số với giá trị mặc định, hãy sử dụng các khoảng trống xung quanh = dấu hiệu:= sign:

    # Đúng: defmunge [sep: anystr = none]: ... defmunge [input: anystr, sep: anystr = none, limitS defmunge [đầu vào: anystr, giới hạn = 1000]: ... def munge[sep: AnyStr = None]: ... def munge[input: AnyStr, sep: AnyStr = None, limit=1000]: ... # Wrong: def munge[input: AnyStr=None]: ... def munge[input: AnyStr, limit = 1000]: ...
  • Các câu lệnh ghép [Nhiều câu lệnh trên cùng một dòng] thường không được khuyến khích:# đúng: iffoo == 'blah': do_blah_thing [] do_one [] do_two [] do_three []# Correct: if foo == 'blah': do_blah_thing[] do_one[] do_two[] do_three[]

    Thay vì không:

    # Sai: iffoo == 'blah': do_blah_thing [] do_one []; do_two []; do_three [] if foo == 'blah': do_blah_thing[] do_one[]; do_two[]; do_three[]
  • Mặc dù đôi khi, nó có thể đặt một if/for/trong khi có một cơ thể nhỏ trên cùng một dòng, không bao giờ làm điều này cho các câu lệnh đa điểm. Cũng tránh gấp những dòng dài như vậy!

    Thay vì không:

    # Sai: iffoo == 'blah': do_blah_thing [] do_one []; do_two []; do_three [] if foo == 'blah': do_blah_thing[] for x in lst: total += x while t x với x = x với xy > x with x = x with x = 0: returnMath.sqrt [x]return None, and an explicit return statement should be present at the end of the function [if reachable]:# Correct: def foo[x]: if x >= 0: return math.sqrt[x] else: return None def bar[x]: if x = 0: return math.sqrt[x] def bar[x]: if x

Bài Viết Liên Quan

Chủ Đề