Giả sử tôi có một tuyên bố if
với
if[A > B]:
return A+1
else:
return A-1
0. Từ góc độ hiệu quả, tôi nên sử dụngif[A > B]:
return A+1
return A-1
hoặc
if[A > B]:
return A+1
else:
return A-1
Tôi có nên thích cái này hay người khác khi sử dụng ngôn ngữ được biên dịch [c] hoặc một kịch bản [python] không?
hỏi ngày 8 tháng 2 năm 2012 lúc 10:20Feb 8, 2012 at 10:20
Jorge Leitaojorge LeitaoJorge Leitao
17.8K17 Huy hiệu vàng82 Huy hiệu bạc116 Huy hiệu đồng17 gold badges82 silver badges116 bronze badges
9
Vì câu lệnh
if[A > B]:
return A+1
else:
return A-1
0 chấm dứt việc thực thi hàm hiện tại, hai hình thức là tương đương [mặc dù hình thức thứ hai có thể đọc được nhiều hơn so với đầu tiên].Hiệu quả của cả hai hình thức là tương đương nhau, mã máy cơ bản phải thực hiện một bước nhảy nếu điều kiện if
là sai.
Lưu ý rằng Python hỗ trợ một cú pháp cho phép bạn chỉ sử dụng một câu lệnh
if[A > B]:
return A+1
else:
return A-1
0 trong trường hợp của bạn:return A+1 if A > B else A-1
Đã trả lời ngày 8 tháng 2 năm 2012 lúc 10:25Feb 8, 2012 at 10:25
Frédéric Hamidifrédéric HamidiFrédéric Hamidi
253K41 Huy hiệu vàng477 Huy hiệu bạc471 Huy hiệu Đồng41 gold badges477 silver badges471 bronze badges
9
Từ hướng dẫn phong cách của Chromium:
Không sử dụng khác sau khi trở lại:
# Bad
if [foo]
return 1
else
return 2
# Good
if [foo]
return 1
return 2
return 1 if foo else 2
Đã trả lời ngày 31 tháng 1 năm 2015 lúc 10:20Jan 31, 2015 at 10:20
skeller88skeller88skeller88
3,8271 Huy hiệu vàng29 Huy hiệu bạc33 Huy hiệu đồng1 gold badge29 silver badges33 bronze badges
10
Cá nhân tôi tránh
if[A > B]:
return A+1
else:
return A-1
4 khối khi có thể. Xem chiến dịch chống IFNgoài ra, họ không tính phí 'thêm' cho dòng, bạn biết: p
"Đơn giản là tốt hơn phức tạp" & "Khả năng đọc là vua"
delta = 1 if [A > B] else -1
return A + delta
Đã trả lời ngày 26 tháng 11 năm 2018 lúc 23:21Nov 26, 2018 at 23:21
PerceBusperCebuspercebus
7391 Huy hiệu vàng8 Huy hiệu bạc20 Huy hiệu đồng1 gold badge8 silver badges20 bronze badges
5
Về phong cách mã hóa:
Hầu hết các tiêu chuẩn mã hóa bất kể ngôn ngữ cấm nhiều câu lệnh hoàn trả từ một chức năng như thực tiễn xấu.
.
Sự đồng thuận từ tất cả các tiêu chuẩn mã hóa công nghiệp là biểu thức nên được viết là:
int result;
if[A > B]
{
result = A+1;
}
else
{
result = A-1;
}
return result;
Về hiệu quả:
Ví dụ trên và hai ví dụ trong câu hỏi đều hoàn toàn tương đương về hiệu quả. Mã máy trong tất cả các trường hợp này phải so sánh A> B, sau đó phân nhánh với tính toán A+1 hoặc A-1, sau đó lưu trữ kết quả của đó trong thanh ghi CPU hoặc trên ngăn xếp.
CHỈNH SỬA :
Sources:
- Misra-C: 2004 Quy tắc 14.7, đến lượt nó trích dẫn ...:
- IEC 61508-3. Phần 3, Bảng B.9.
- IEC 61508-7. C.2.9.
Đã trả lời ngày 8 tháng 2 năm 2012 lúc 10:47Feb 8, 2012 at 10:47
LundinlundinLundin
Phim thương hiệu vàng 180K3838 gold badges244 silver badges375 bronze badges
7
Với bất kỳ trình biên dịch hợp lý nào, bạn nên quan sát không có sự khác biệt; Chúng nên được biên dịch thành mã máy giống hệt nhau vì chúng tương đương.
Đã trả lời ngày 8 tháng 2 năm 2012 lúc 10:22Feb 8, 2012 at 10:22
Phiên bản A đơn giản hơn và đó là lý do tại sao tôi sẽ sử dụng nó.
Và nếu bạn bật tất cả các cảnh báo trình biên dịch trong Java, bạn sẽ nhận được cảnh báo về phiên bản thứ hai vì nó không cần thiết và bật lên độ phức tạp của mã.
Đã trả lời ngày 8 tháng 2 năm 2012 lúc 10:23Feb 8, 2012 at 10:23
Juergen Djuergen djuergen d
198K36 Huy hiệu vàng282 Huy hiệu bạc348 Huy hiệu đồng36 gold badges282 silver badges348 bronze badges
Đây là một câu hỏi về phong cách [hoặc sở thích] vì thông dịch viên không quan tâm. Cá nhân tôi sẽ cố gắng không đưa ra câu lệnh cuối cùng của một hàm trả về một giá trị ở mức thụt lề khác với cơ sở chức năng. Cái khác trong ví dụ 1 che khuất, nếu chỉ một chút, nơi kết thúc của hàm.
Theo sở thích tôi sử dụng:
return A+1 if [A > B] else A-1
Vì nó tuân theo cả quy ước tốt về việc có một tuyên bố trả lại duy nhất là câu lệnh cuối cùng trong hàm [như đã đề cập] và mô hình lập trình chức năng tốt để tránh kết quả trung gian phong cách bắt buộc.
Đối với các chức năng phức tạp hơn, tôi thích chia chức năng thành nhiều chức năng phụ để tránh lợi nhuận sớm nếu có thể. Nếu không, tôi trở lại bằng cách sử dụng một biến kiểu bắt buộc gọi là RVAL. Tôi cố gắng không sử dụng nhiều câu lệnh trả về trừ khi hàm là tầm thường hoặc câu lệnh trả về trước khi kết thúc là kết quả của lỗi. Trở lại sớm làm nổi bật thực tế là bạn không thể tiếp tục. Đối với các chức năng phức tạp được thiết kế để phân nhánh thành nhiều phần phụ, tôi cố gắng mã hóa chúng dưới dạng các câu lệnh [ví dụ được điều khiển bởi một dict].
Một số áp phích đã đề cập đến tốc độ hoạt động. Tốc độ thời gian chạy là thứ yếu đối với tôi vì nếu bạn cần tốc độ thực hiện Python không phải là ngôn ngữ tốt nhất để sử dụng. Tôi sử dụng Python làm hiệu quả của mã hóa [nghĩa là viết mã miễn phí lỗi] mà quan trọng đối với tôi.
Đã trả lời ngày 16 tháng 2 năm 2017 lúc 16:25Feb 16, 2017 at 16:25
Stephen Ellwoodstephen EllwoodStephen Ellwood
3641 Huy hiệu vàng2 Huy hiệu bạc1 gold badge2 silver badges10 bronze badges
4
Tôi biết câu hỏi được gắn thẻ Python, nhưng nó đề cập đến các ngôn ngữ động nên tôi nên đề cập đến điều đó trong Ruby, câu lệnh IF thực sự có loại trả về để bạn có thể làm điều gì đó như
def foo
rv = if [A > B]
A+1
else
A-1
end
return rv
end
Hoặc bởi vì nó cũng có lợi nhuận ngầm đơn giản
def foo
if [A>B]
A+1
else
A-1
end
end
mà xung quanh vấn đề phong cách không có nhiều lợi nhuận khá độc đáo.
Đã trả lời ngày 1 tháng 2 năm 2018 lúc 12:59Feb 1, 2018 at 12:59
Jamie Cookjamie CookJamie Cook
4.2053 Huy hiệu vàng39 Huy hiệu bạc52 Huy hiệu Đồng3 gold badges39 silver badges52 bronze badges
Từ quan điểm hiệu suất, không quan trọng trong Python và tôi cho rằng điều tương tự cho mọi ngôn ngữ hiện đại ngoài kia.
Nó thực sự đi vào phong cách và khả năng đọc. Tùy chọn thứ hai của bạn [khối IF-Else] dễ đọc hơn so với đầu tiên và dễ đọc hơn nhiều so với hoạt động ternary một lớp.
Đã trả lời ngày 26 tháng 2 năm 2021 lúc 16:08Feb 26, 2021 at 16:08
Scarface97Scarface97Scarface97
571 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges