Có thể chuyển tiếp khai báo một hàm trong Python không? Tôi muốn sắp xếp một danh sách bằng cách sử dụng cmp
chức năng của riêng tôi trước khi nó được khai báo.
print "\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)])
Tôi đã tổ chức mã của mình để đặt định nghĩa của cmp_configs
phương thức sau khi gọi. Nó không thành công với lỗi này:
NameError: name 'cmp_configs' is not defined
Có cách nào để "khai báo" cmp_configs
phương thức trước khi sử dụng không? Nó sẽ làm cho mã của tôi trông sạch hơn?
Tôi cho rằng một số người sẽ bị cám dỗ nói với tôi rằng tôi nên tổ chức lại mã của mình để không gặp phải vấn đề này. Tuy nhiên, có những trường hợp khi điều này có lẽ là không thể tránh khỏi, ví dụ như khi thực hiện một số hình thức đệ quy. Nếu bạn không thích ví dụ này, giả sử rằng tôi có một trường hợp thực sự cần thiết để chuyển tiếp khai báo một hàm.
Hãy xem xét trường hợp này khi việc khai báo chuyển tiếp một hàm sẽ là cần thiết trong Python:
def spam():
if end_condition():
return end_result()
else:
return eggs()
def eggs():
if end_condition():
return end_result()
else:
return spam()
Ở đâu end_condition
và end_result
đã được xác định trước đó.
Là giải pháp duy nhất để sắp xếp lại mã và luôn đặt định nghĩa trước khi gọi?