Hướng dẫn does python use utf - python có sử dụng utf không
Bạn đã vấp phải vấn đề chung với mã hóa: Làm thế nào tôi có thể biết mã hóa nào là mã hóa? Show
Trả lời: Bạn không thể trừ khi định dạng tệp cung cấp cho điều này. XML, ví dụ, bắt đầu với:
Tiêu đề này đã được lựa chọn cẩn thận để nó có thể được đọc bất kể mã hóa. Trong trường hợp của bạn, không có gợi ý như vậy, do đó, cả biên tập viên và Python của bạn đều không biết chuyện gì đang xảy ra. Do đó, bạn phải sử dụng mô -đun # No extra indentation. 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()0 và sử dụng # No extra indentation. 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()1 cung cấp bit còn thiếu trong Python. Đối với trình soạn thảo của bạn, bạn phải kiểm tra xem nó có cung cấp một số cách để đặt mã hóa tệp không. Điểm của UTF-8 là có thể mã hóa các ký tự 21 bit (Unicode) dưới dạng luồng dữ liệu 8 bit (vì đó là điều duy nhất mà tất cả các máy tính trên thế giới có thể xử lý). Nhưng vì hầu hết các OSS có trước thời đại Unicode, chúng không có công cụ phù hợp để đính kèm thông tin mã hóa vào các tệp trên đĩa cứng. Vấn đề tiếp theo là đại diện trong Python. Điều này được giải thích hoàn hảo trong bình luận của Heikogerlach. Bạn phải hiểu rằng bảng điều khiển của bạn chỉ có thể hiển thị ASCII. Để hiển thị Unicode hoặc bất cứ thứ gì> = Charcode 128, nó phải sử dụng một số phương tiện thoát ra. Trong trình soạn thảo của bạn, bạn không được nhập chuỗi hiển thị thoát nhưng ý nghĩa của chuỗi (trong trường hợp này, bạn phải nhập Umlaut và lưu tệp). Điều đó nói rằng, bạn có thể sử dụng hàm python eval () để biến chuỗi thoát ra thành một chuỗi:
Như bạn có thể thấy, chuỗi "\ xc3" đã được biến thành một ký tự duy nhất. Đây bây giờ là một chuỗi 8 bit, UTF-8 được mã hóa. Để nhận unicode:
Gregg Lind đã hỏi: Tôi nghĩ có một số phần còn thiếu ở đây: Tệp F2 chứa: Hex:
# No extra indentation. 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()2, ví dụ, đọc tất cả chúng trong một ký tự riêng biệt (dự kiến) có cách nào để ghi vào một tệp trong ASCII sẽ hoạt động không? Trả lời: Điều đó phụ thuộc vào ý của bạn. ASCII không thể đại diện cho các ký tự> 127. Vì vậy, bạn cần một số cách để nói "một vài ký tự tiếp theo có nghĩa là một cái gì đó đặc biệt", đó là những gì chuỗi "\ x" làm. Nó nói: Hai ký tự tiếp theo là mã của một ký tự. "\ u" thực hiện tương tự bằng cách sử dụng bốn ký tự để mã hóa Unicode lên đến 0xffff (65535). Vì vậy, bạn không thể trực tiếp viết unicode vào ASCII (vì ASCII đơn giản là không chứa cùng một ký tự). Bạn có thể viết nó dưới dạng chuỗi thoát (như trong F2); Trong trường hợp này, tệp có thể được biểu diễn dưới dạng ASCII. Hoặc bạn có thể viết nó dưới dạng UTF-8, trong trường hợp đó, bạn cần một luồng an toàn 8 bit. Giải pháp của bạn sử dụng # No extra indentation. 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()3 không hoạt động, nhưng bạn phải biết bạn sử dụng bao nhiêu bộ nhớ: gấp ba lần số lượng sử dụng # No extra indentation. 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()4. Hãy nhớ rằng một tệp chỉ là một chuỗi các byte với 8 bit. Cả bit và byte đều không có ý nghĩa. Chính bạn là người nói "65 có nghĩa là 'A'". Vì # No extra indentation. 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()5 sẽ trở thành "à" nhưng máy tính không có cách nào để biết, bạn phải nói bằng cách chỉ định mã hóa được sử dụng khi viết tệp.
Giới thiệuTài liệu này đưa ra các quy ước mã hóa cho mã Python bao gồm thư viện tiêu chuẩn trong phân phối Python chính. Vui lòng xem PEP thông tin đồng hành mô tả các hướng dẫn kiểu cho mã C trong quá trình triển khai C của Python. Tài liệu này và PEP 257 (Công ước DocString) đã được điều chỉnh từ bài tiểu luận hướng dẫn theo phong cách Python gốc của Guido, với một số bổ sung từ Hướng dẫn kiểu Barry Barry [2]. Hướng dẫn phong cách này phát triển theo thời gian khi các quy ước bổ sung được xác định và các quy ước trong quá khứ được đưa ra lỗi thời bởi những thay đổi trong chính ngôn ngữ. Nhiều dự án có hướng dẫn phong cách mã hóa riêng của họ. Trong trường hợp có bất kỳ xung đột nào, các hướng dẫn dành riêng cho dự án như vậy được ưu tiên cho dự án đó. Một quán ngu si là tinh nghịch của tâm trí nhỏMột trong những hiểu biết quan trọng của Guido, là mã được đọc thường xuyên hơn nhiều so với viết. Các hướng dẫn được cung cấp ở đây nhằm cải thiện khả năng đọc của mã và làm cho nó nhất quán trên phổ rộng của mã Python. Như Pep 20 nói, khả năng đọc của người Viking đếm được. Một hướng dẫn phong cách là về tính nhất quán. Sự nhất quán với hướng dẫn phong cách này là quan trọng. Tính nhất quán trong một dự án là quan trọng hơn. Tính nhất quán trong một mô -đun hoặc hàm là quan trọng nhất. Tuy nhiên, biết khi nào nên không nhất quán - đôi khi các khuyến nghị hướng dẫn về phong cách chỉ áp dụng. Khi nghi ngờ, hãy sử dụng phán đoán tốt nhất của bạn. Nhìn vào các ví dụ khác và quyết định những gì trông tốt nhất. Và đừng ngần ngại hỏi! Cụ thể: Không phá vỡ khả năng tương thích ngược chỉ để tuân thủ PEP này! Một số lý do tốt khác để bỏ qua một hướng dẫn cụ thể:
Bố trí mãVết lõmSử 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: # Correct: # 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: # Hanging indents *may* be indented to other than 4 spaces. foo = long_function_name( var_one, var_two, var_three, var_four) Khi phần có điều kiện của ____ ____ 76-statement đủ dài để yêu cầu nó được viết trên nhiều dòng, điều đáng chú ý là sự kết hợp của một từ khóa hai ký tự (tức là Thắng 4 không gian 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 ____ 76-statement, 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) để 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 ________ 76-statement. 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 ở: # No extra indentation. 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', ) 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', ) 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 đaGiớ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 (tài liệu 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à tài liệu/nhận xét đế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 ____ 80 không thể sử dụng tiếp tục ngầm trước Python 3.10, do đó, dấu gạch chéo ngược được chấp nhận cho trường hợp đó: 0. Một trường hợp khác là với các tuyên bố my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )2. 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ừ: 1Để 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: 2Trong 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ốngChứ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 có thể được sử dụng (một cách tiết kiệm) để tách các nhóm chức năng liên quan. 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 ký tự thức ăn điều khiển-l (tức là ^l) 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ồnMã 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à aren 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
Tên Dunder cấp độ mô -đunMức độ mô -đun, Dunders Dunders (tức là tên có hai dấu gạch dưới và hai dấu gạch ngang), chẳng hạn như my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )5, my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )6, my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )7, 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: 9Trích dẫn chuỗiTrong 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ệnhThói xấuTránh khoảng trắng bên ngoài trong các tình huống sau:
Các khuyến nghị khác
Chắc chắn không phải:Khi nào nên sử dụng dấu phẩy kéo dài Dấu phẩy thường là tùy chọn, ngoại trừ chúng là bắt buộc khi tạo ra một yếu tố. Để rõ ràng, nên bao quanh các dấu ngoặc đơn sau (về mặt kỹ thuật): # Correct: # 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)3 # Correct: # 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)2 # Correct: # 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)4 # Correct: # 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)5 Khi dấu phẩy kéo dài, chúng thường hữu ích khi sử dụng hệ thống kiểm soát phiên bản, khi danh sách các giá trị, đối số hoặc các mục nhập được dự kiến sẽ được mở rộng theo thời gian. Mẫu là đặt mỗi giá trị (v.v.) trên một dòng, luôn luôn thêm dấu phẩy kéo dài và thêm dấu ngoặc đơn/giá đỡ/nẹp vào dòng tiếp theo. Tuy nhiên, không có ý nghĩa gì khi có dấu phẩy theo cùng một dòng với dấu phân cách đóng (ngoại trừ trong trường hợp trên của các bộ dữ liệu singleton):Đặt tên quy ước Các quy ước đặt tên của thư viện Python, có một chút lộn xộn, vì vậy chúng tôi sẽ không bao giờ có được sự nhất quán hoàn toàn này - tuy nhiên, đây là các tiêu chuẩn đặt tên hiện đang được khuyến nghị. Các mô -đun và gói mới (bao gồm các khung của bên thứ ba) nên được ghi vào các tiêu chuẩn này, nhưng trong đó một thư viện hiện tại có một phong cách khác, tính nhất quán nội bộ được ưu tiên.Nguyên tắc ghi đè Các tên có thể nhìn thấy cho người dùng là các phần công khai của API nên tuân theo các quy ước phản ánh việc sử dụng thay vì thực hiện.Mô tả: Kiểu đặt tên Có rất nhiều phong cách đặt tên khác nhau. Nó giúp có thể nhận ra phong cách đặt tên đang được sử dụng, độc lập với những gì chúng được sử dụng.
17 (xấu!)Ngoài ra, còn có phong cách sử dụng một tiền tố ngắn độc đáo để nhóm liên quan đến nhóm lại với nhau. Điều này không được sử dụng nhiều trong Python, nhưng nó được đề cập để hoàn thiện. Ví dụ: hàm 18 trả về một tuple mà các mục có truyền thống có tên như 19, 20, 21, v.v. (Điều này được thực hiện để nhấn mạnh sự tương ứng với các trường của cấu trúc cuộc gọi hệ thống POSIX, giúp các lập trình viên quen thuộc với điều đó.)Thư viện X11 sử dụng X hàng đầu cho tất cả các chức năng công cộng của nó. Trong Python, phong cách này thường được coi là không cần thiết bởi vì tên thuộc tính và phương thức được đặt trước với một đối tượng và tên hàm được đặt trước với một tên mô -đun.
>>> x = eval("'Capit\\xc3\\xa1n\\n'") >>> x 'Capit\xc3\xa1n\n' >>> x[5] '\xc3' >>> len(x[5]) 1 28: Các đối tượng hoặc thuộc tính ma thuật của người Hồi giáo sống trong các không gian tên do người dùng điều khiển. Ví dụ. >>> x = eval("'Capit\\xc3\\xa1n\\n'") >>> x 'Capit\xc3\xa1n\n' >>> x[5] '\xc3' >>> len(x[5]) 1 29, >>> x = eval("'Capit\\xc3\\xa1n\\n'") >>> x 'Capit\xc3\xa1n\n' >>> x[5] '\xc3' >>> len(x[5]) 1 30 hoặc >>> x = eval("'Capit\\xc3\\xa1n\\n'") >>> x 'Capit\xc3\xa1n\n' >>> x[5] '\xc3' >>> len(x[5]) 1 31. Không bao giờ phát minh ra những cái tên như vậy; Chỉ sử dụng chúng như tài liệu.Quy định: Đặt tên quy ướcTên cần tránh Không bao giờ sử dụng các ký tự ’Lát (chữ thường el),‘ O, (chữ hoa oh) hoặc ‘I, (mắt chữ hoa) làm tên biến ký tự đơn. Trong một số phông chữ, các ký tự này không thể phân biệt được với số một và không. Khi bị cám dỗ sử dụng ‘L, hãy sử dụng‘ L, thay vào đó.Khả năng tương thích ASCII Các định danh được sử dụng trong thư viện tiêu chuẩn phải tương thích ASCII như được mô tả trong phần chính sách của PEP 3131.Tên gói và tên mô -đun Khi một mô -đun mở rộng được viết bằng C hoặc C ++ có mô -đun Python đi kèm cung cấp giao diện cấp cao hơn (ví dụ: định hướng đối tượng hơn), mô -đun C/C ++ có dấu gạch dưới hàng đầu (ví dụ: 32).Tên lớpTên lớp thường nên sử dụng quy ước Capwords. Thay vào đó, quy ước đặt tên cho các chức năng có thể được sử dụng trong trường hợp giao diện được ghi lại và sử dụng chủ yếu là có thể gọi được. Lưu ý rằng có một quy ước riêng cho các tên tích hợp: hầu hết các tên được xây dựng là các từ đơn (hoặc hai từ chạy cùng nhau), với quy ước Capwords chỉ được sử dụng cho các tên ngoại lệ và hằng số tích hợp. Nhập tên biếnTên của các biến loại được giới thiệu trong PEP 484 thường sử dụng Capwords thích tên ngắn: 33, 34, 35. Nên thêm hậu tố 36 hoặc 37 vào các biến được sử dụng để khai báo hành vi đồng biến hoặc trái ngược tương ứng:# Correct: # 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)7 Tên ngoại lệBởi vì các trường hợp ngoại lệ nên là các lớp, quy ước đặt tên lớp được áp dụng ở đây. Tuy nhiên, bạn nên sử dụng lỗi hậu tố lỗi trên tên ngoại lệ của bạn (nếu ngoại lệ thực sự là một lỗi). Tên biến toàn cầu(Hãy để hy vọng rằng các biến này chỉ được sử dụng trong một mô -đun.) Các quy ước giống như các biến cho các chức năng. Các mô-đun được thiết kế để sử dụng thông qua 23 nên sử dụng cơ chế my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )5 để ngăn chặn xuất khẩu toàn cầu, hoặc sử dụng quy ước cũ của tiền tố như vậy với một dấu gạch dưới (mà bạn có thể muốn làm để chỉ ra những thế giới này là mô-đun không công khai). Tên chức năng và tên biếnTên chức năng phải là chữ thường, với các từ được phân tách bằng dấu gạch dưới khi cần thiết để cải thiện khả năng đọc. Tên biến theo cùng một quy ước với tên chức năng. Mixedcase chỉ được phép trong các bối cảnh mà đó đã là kiểu phổ biến (ví dụ: Threading.py), để giữ lại khả năng tương thích ngược. Các đối số chức năng và phương thứcLuôn luôn sử dụng 40 cho đối số đầu tiên cho các phương thức thể hiện.Luôn luôn sử dụng 41 cho đối số đầu tiên cho các phương thức lớp.Nếu một đối số chức năng Tên tên xung đột với một từ khóa dành riêng, thì tốt hơn là nên nối một dấu gạch ngang duy nhất thay vì sử dụng viết tắt hoặc tham nhũng chính tả. Do đó 42 tốt hơn 43. (Có lẽ tốt hơn là tránh các cuộc đụng độ như vậy bằng cách sử dụng từ đồng nghĩa.)Tên phương thức và biến thể hiệnSử dụng các quy tắc đặt tên chức năng: chữ thường với các từ được phân tách bằng dấu gạch dưới khi cần thiết để cải thiện khả năng đọc. Sử dụng một dấu gạch dưới hàng đầu cho các phương thức và biến thể hiện không công khai. Để tránh các cuộc đụng độ tên với các lớp con, hãy sử dụng hai dấu gạch dưới hàng đầu để gọi tên Python tên quy tắc. Python mang các tên này với tên lớp: Nếu lớp foo có thuộc tính có tên 44, nó không thể được truy cập bởi 45. .Lưu ý: Có một số tranh cãi về việc sử dụng __names (xem bên dưới). Hằng sốCác hằng số thường được xác định ở cấp độ mô -đun và được viết bằng tất cả các chữ cái viết hoa với dấu gạch dưới tách các từ. Ví dụ bao gồm 47 và 48.Thiết kế cho thừa kếLuôn quyết định xem các phương thức và biến thể hiện của lớp (gọi chung là: thuộc tính của người Hồi giáo) nên được công khai hoặc không công khai. Nếu nghi ngờ, chọn không công khai; Nó dễ dàng hơn để công khai muộn hơn là làm cho một thuộc tính công khai không công khai. Các thuộc tính công khai là những thuộc tính mà bạn mong đợi các máy khách không liên quan trong lớp của bạn sẽ sử dụng, với cam kết của bạn để tránh những thay đổi không tương thích ngược. Các thuộc tính không công khai là những thuộc tính không được sử dụng bởi các bên thứ ba; Bạn không đảm bảo rằng các thuộc tính không công khai đã giành được sự thay đổi hoặc thậm chí bị xóa. Chúng tôi không sử dụng thuật ngữ riêng tư ở đây, vì không có thuộc tính nào thực sự riêng tư trong Python (không có số lượng công việc nói chung không cần thiết). Một loại thuộc tính khác là một phần của API phân lớp con (thường được gọi là bảo vệ trực tuyến trong các ngôn ngữ khác). Một số lớp được thiết kế để được kế thừa, để mở rộng hoặc sửa đổi các khía cạnh của hành vi lớp học. Khi thiết kế một lớp như vậy, hãy cẩn thận để đưa ra các quyết định rõ ràng về các thuộc tính nào là công khai, là một phần của API phân lớp và thực sự chỉ được sử dụng bởi lớp cơ sở của bạn. Với suy nghĩ này, đây là các hướng dẫn Pythonic:
Giao diện công khai và nội bộBất kỳ đảm bảo khả năng tương thích ngược chỉ áp dụng cho giao diện công cộng. Theo đó, điều quan trọng là người dùng có thể phân biệt rõ ràng giữa các giao diện công cộng và nội bộ. Các giao diện được ghi nhận được coi là công khai, trừ khi tài liệu tuyên bố rõ ràng chúng là giao diện tạm thời hoặc nội bộ được miễn trừ khỏi các đảm bảo khả năng tương thích ngược thông thường. Tất cả các giao diện không có giấy tờ nên được coi là nội bộ. Để hỗ trợ tốt hơn, các mô -đun nên khai báo rõ ràng các tên trong API công khai của họ bằng thuộc tính my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )5. Cài đặt my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )5 thành một danh sách trống cho thấy mô -đun không có API công khai. Ngay cả với my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )5 được thiết lập một cách thích hợp, các giao diện nội bộ (gói, mô -đun, lớp, chức năng, thuộc tính hoặc tên khác) vẫn phải được đặt trước với một dấu gạch dưới hàng đầu. Một giao diện cũng được coi là nội bộ nếu bất kỳ không gian tên nào (gói, mô -đun hoặc lớp) được coi là nội bộ. Tên nhập khẩu phải luôn được coi là một chi tiết thực hiện. Các mô -đun khác không được dựa vào quyền truy cập gián tiếp vào các tên đã nhập như vậy trừ khi chúng là một phần được ghi chép rõ ràng của API mô -đun có chứa API, chẳng hạn như 53 hoặc một gói mô -đun ____ ____ ____129 hiển thị chức năng từ các mô hình con.Khuyến nghị lập trình
Chú thích chức năngVới sự chấp nhận của PEP 484, các quy tắc phong cách cho các chú thích chức năng đã thay đổi.
Chú thích biếnPEP 526 giới thiệu các chú thích thay đổi. Các đề xuất về kiểu cho chúng tương tự như các chú thích chức năng được mô tả ở trên:
Chú thích Người giới thiệuBản quyềnTài liệu này đã được đặt trong phạm vi công cộng. |