[A] Điều này hoạt động:
def func[]:
x = 1
print[x]
return
[B] Điều này không hoạt động:
def func[]:
x = 1
print[x]
return
[C] Điều này cũng không hoạt động: [Ở đây tôi đang sử dụng '_' để chỉ một không gian trắng]
def func[]:
x = 1
____
print[x]
return
[D] Điều này hoạt động:
def func[]:
x = 1
____# some comment
print[x]
return
Trong cả hai [b] và [c] Tôi nhận được các lỗi sau:
- NameError: tên 'x' không được xác định
- Cú pháp: 'Trả về' Hàm bên ngoài
Tôi đang sử dụng Eclipse và PYDEV Plug-in. Phiên bản Python là 3,5 và phiên bản PYDEV là 4,5.
----------update----------
Vấn đề không thể tái tạo trong Notebook Jupyter và Pycharm.
Trong Eclipse, tôi đã bật "Hiển thị các ký tự khoảng trắng". Các vết lõm trong [c] thực sự bao gồm 4 khoảng trắng được hiển thị dưới dạng 4 chấm trong trình soạn thảo. Nếu đó là một tab, trong trình soạn thảo Eclipse, nó sẽ được hiển thị là ">>".
Với tôi thông qua điều tra và các bình luận/câu trả lời dưới đây, tôi khá chắc chắn rằng đây là một lỗi ngu ngốc của Eclipse và/hoặc Pydev.
Cảm ơn tất cả các bạn đã giúp đỡ.
Đã hỏi ngày 6 tháng 11 năm 2017 lúc 16:16Nov 6, 2017 at 16:16
GocurrygocurryGoCurry
8998 Huy hiệu bạc 30 Huy hiệu Đồng8 silver badges30 bronze badges
6
Hãy cẩn thận với các tab và không gian, chúng không giống nhau, vì vậy:
[_ không gian với không gian]
def func[]:
____x = 1
____
____print[x]
____return
Nó sẽ chỉ làm việc tốt
không giống như
[+ là tab, _ không gian trắng]
def func[]:
++x = 1
__
++print[x]
++return
Sẽ không hoạt động
Đã trả lời ngày 6 tháng 11 năm 2017 lúc 16:23Nov 6, 2017 at 16:23
Damian Lattenerodamian LatteneroDamian Lattenero
15.4K3 Huy hiệu vàng41 Huy hiệu bạc72 Huy hiệu đồng3 gold badges41 silver badges72 bronze badges
1
Trả lời câu hỏi chính của bạn: Dòng trống không được phép trong các chức năng Python?Blank line is not allowed in python functions?
Dòng trống chắc chắn được cho phép trong các chức năng Python.is definitely allowed in python functions.
Tất cả các ví dụ của bạn [A, B, C, D] nên hoạt động và vấn đề có thể [chắc chắn] có liên quan đến "Eclipse và PYDEV Plug-in".
Cân nhắc di chuyển sang một IDE khác như:
- Spyder - //pypi.python.org/pypi/spyder
- Pycharm - //www.jetbrains.com/pycharm/
Và xem xét sử dụng máy tính xách tay Jupyter để giúp phát triển của bạn.
Đã trả lời ngày 6 tháng 11 năm 2017 lúc 16:23Nov 6, 2017 at 16:23
Alber8295Alber8295Alber8295
Damian Lattenerodamian Lattenero1 gold badge8 silver badges19 bronze badges
Khi nào nên sử dụng hai dòng trống? Hướng dẫn phong cách Pep 8
Hai quy tắc sau đây sẽ cung cấp cho bạn một heuristic đủ khi sử dụng hai 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.top-level function and class definitions with two blank lines.
- Chèn hai dòng trống sau các câu lệnh nhập nếu mã theo sau bắt đầu với hàm cấp cao nhất hoặc định nghĩa lớp.import statements if the code that follows starts with a top-level function or class definition.
Quy tắc thứ hai là hậu quả của quy tắc đầu tiên để nó có thể được thực hiện về mặt kỹ thuật.
Khi nào nên sử dụng các dòng trống đơn? Hướng dẫn phong cách Pep 8
Bốn quy tắc sau đây sẽ cung cấp cho bạn một heuristic đủ khi sử dụng một dòng trống duy nhất:
- Sử dụng một hoặc thêm các dòng trống đơn để tách các nhóm chức năng liên quan.
- Sử dụng một dòng trống duy nhất trong các chức năng để tách các phần logic.
- Sử dụng một dòng trống duy nhất để định nghĩa phương thức vòm bên trong một lớp.
- Không sử dụng một ranh giới trống giữa một lớp lót Python liên quan.
Hãy cùng xem một số ví dụ trong mã tiếp theo!
Hai chức năng cấp cao nhất của các dòng trống
#1.1-Hàm cấp cao nhất bao quanh với hai dòng trống.
WRONG:
import x def f[]: pass f[]
CORRECT:
import x def f[]: pass f[]
Một chức năng không có mức độ trống
#1.2-Hàm không có mức độ cao nhất với các dòng trống đơn.
WRONG:
import x def f[]: def g[]: pass g[] f[]
CORRECT:
import x def f[]: def g[]: pass g[] f[]
Hai dòng trống Định nghĩa lớp cấp cao nhất
#1.3-Định nghĩa lớp cấp cao nhất với hai dòng trống.
WRONG:
def func[]:
x = 1
print[x]
return
0CORRECT:
def func[]:
x = 1
print[x]
return
1Lưu ý rằng các định nghĩa lớp không ở cấp độ đầu
def func[]:
x = 1
____
print[x]
return
1 và def func[]:
x = 1
____
print[x]
return
2 không được bao quanh với hai dòng trống là chính xác và theo quy tắc.Hai dòng trống Nhập câu lệnh
Mặc dù nhiều nguồn trực tuyến nói rằng sẽ có hai dòng trống sau các câu lệnh
def func[]:
x = 1
____
print[x]
return
3 trước khi mã bắt đầu, điều này thường không chính xác. PEP 8 chỉ nói rằng hàm cấp cao nhất hoặc định nghĩa lớp nên được bao quanh bởi hai dòng trống!Pep 8 không nói về các tuyên bố
3 cụ thể liên quan đến việc chèn hai dòng trống!def func[]:
x = 1
____
print[x]
return
- Nếu khối
3 được theo sau bởi một hàm hoặc định nghĩa lớp, bạn nên chèn hai dòng trống theo quy tắc này.def func[]: x = 1 ____ print[x] return
- Nếu khối
3 được theo sau, giả sử, một định nghĩa biến toàn cầu, bạn không nên chèn hai dòng trống một là đủ!def func[]: x = 1 ____ print[x] return
Nhập câu lệnh theo sau là hai dòng trống:
Đoạn mã sau đây minh họa việc chèn chính xác hai dòng trống sau câu lệnh
def func[]:
x = 1
____
print[x]
return
3. Nhưng các dòng trống không có ở đó vì tuyên bố nhập khẩu. Họ ở đó vì định nghĩa hàm cấp cao nhất của def func[]:
x = 1
____
print[x]
return
8.def func[]:
x = 1
print[x]
return
2Nhập báo cáo không theo sau là hai dòng trống:
Đoạn mã sau đây minh họa việc chèn chính xác chỉ một dòng trống sau câu lệnh
def func[]:
x = 1
____
print[x]
return
3 vì chúng tôi xác định biến toàn cầu def func[]:
x = 1
____# some comment
print[x]
return
0 không phải là một lớp cũng không định nghĩa chức năng và do đó, không nên được bao quanh bởi hai dòng trống!def func[]:
x = 1
print[x]
return
3Hàm ý logic là các câu lệnh
def func[]:
x = 1
____
print[x]
return
3 nên được theo sau bởi hai dòng trống là không chính xác!def func[]:
x = 1
____
print[x]
return
3 statements should be followed by two blank lines is incorrect!Tiếp theo, chúng tôi sẽ khám phá một số ví dụ trong đó chỉ có một dòng trống duy nhất có thể hoặc nên được chèn vào.
Các dòng trống đơn
#3 - Sử dụng một hoặc thêm các dòng trống đơn để tách các nhóm chức năng liên quan.
def func[]:
x = 1
print[x]
return
4#4 - Sử dụng một dòng trống duy nhất trong các chức năng để tách các phần logic.
def func[]:
x = 1
print[x]
return
5#5 - Sử dụng một dòng trống duy nhất để định nghĩa phương thức vòm bên trong một lớp.
def func[]:
x = 1
print[x]
return
6Một lỗi phong cách phổ biến là các định nghĩa phương pháp bao quanh hai dòng thay vì một vì mọi người nhớ sai Quy tắc số 1.
Ở đây, một ví dụ sai như vậy:
def func[]:
x = 1
print[x]
return
7Quá nhiều khoảng trắng!
Không bao quanh các định nghĩa phương pháp với hai dòng trống!
Các đường trống xung quanh một lớp lót
#6-Không sử dụng một đường trống duy nhất giữa một lớp Python liên quan.
Ví dụ: nếu bạn viết thông số kỹ thuật của ba chức năng để thực hiện sau này, bạn chỉ cần bỏ qua các dòng trống xung quanh các định nghĩa hàm một lớp để tránh quá nhiều khoảng trắng trong mã.
Như vậy:
def func[]:
x = 1
print[x]
return
8Dự kiến 2 dòng trống, được tìm thấy 0 [E302]
Python có thể gây ra lỗi hoặc tin nhắn thông tin:
2def func[]: x = 1 ____# some comment print[x] return
3def func[]: x = 1 ____# some comment print[x] return
Để khắc phục lỗi này, bao quanh hàm cấp cao nhất hoặc định nghĩa lớp với hai dòng trống thay vì 0 hoặc một để tuân thủ hướng dẫn kiểu PEP 8.
Không! Không làm điều này:
def func[]:
x = 1
print[x]
return
9Đúng! Thay vào đó làm điều này:
def func[]:
x = 1
____
print[x]
return
0Dưới đây là một số tài liệu tham khảo nhanh để đọc thêm.
References:
- //stackoverflow.com/questions/2953250/python-pep8-blank-lines-convention
- //peps.python.org/pep-0008/#blank-lines
- //www.reddit.com/r/learnprogramming/comments/tnmhwe/when_to_use_blank_lines_in_python_in_order_to/
- //www.flake8rules.com/rules/E302.html
Lập trình viên hài hước
Trong khi làm việc như một nhà nghiên cứu trong các hệ thống phân tán, Tiến sĩ Christian Mayer đã tìm thấy tình yêu của mình đối với việc dạy các sinh viên khoa học máy tính.
Để giúp học sinh đạt được thành công cao hơn của Python, ông đã thành lập trang web giáo dục chương trình Finxter.com. Ông là tác giả của cuốn sách lập trình phổ biến Python Oneer [Nostarch 2020], đồng tác giả của loạt sách Break Break Python, những cuốn sách tự xuất bản, người đam mê khoa học máy tính, freelancer và chủ sở hữu của một trong 10 blog Python lớn nhất trên toàn thế giới.
Niềm đam mê của ông là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ tăng cường các kỹ năng của họ. Bạn có thể tham gia học viện email miễn phí của anh ấy ở đây.