2017-06-07 16 views
5

Giả sử tôi có hai hàm trong tập lệnh: sum_numbersprint_sum. Việc triển khai của chúng như sau:Thứ tự các hàm trong một kịch bản Python có quan trọng không?

def sum_numbers(a, b): 
    return a + b 

def print_sum(a, b): 
    print(sum_numbers(a, b)) 

Vì vậy, câu hỏi của tôi là: thứ tự trong đó hàm được viết có quan trọng không? Nếu tôi đã viết hàm print_sum trước và sau đó là sum_numbers, mã sẽ vẫn hoạt động? Nếu câu trả lời là có, nó có luôn hoạt động không?

+1

"? * ... sẽ mã vẫn làm việc *" <- - đó là nghĩa đen nhanh hơn để thử phần này hơn là hỏi về nó. Bất cứ khi nào bạn muốn hỏi "* điều làm việc trong python? *", Hãy thử nó đầu tiên. Nếu kết quả này khiến bạn khó chịu, bạn sẽ có thể đặt ra một câu hỏi thú vị và cụ thể hơn. –

Trả lời

9

Điều duy nhất mà Python quan tâm là tên được xác định khi nó thực sự được tìm kiếm. Đó là tất cả.

Trong trường hợp của bạn, điều này là tốt, thứ tự không thực sự quan trọng vì bạn chỉ cần xác định hai chức năng. Tức là, bạn chỉ giới thiệu hai cái tên mới, không có cái nhìn nào cả.

Bây giờ, nếu bạn gọi một trong những (có hiệu lực, thực hiện một cái nhìn lên) và chuyển trật tự xung quanh:

def print_sum(a, b): 
    print(sum_numbers(a, b)) 

print_sum(2, 4) 

def sum_numbers(a, b): 
    return a + b 

bạn sẽ gặp rắc rối (NameError) bởi vì nó sẽ cố gắng tìm một tên (sum_numbers) mà chỉ chưa tồn tại.

Vì vậy, nói chung, có, thứ tự không vấn đề; không có cẩu tên trong Python như có bằng các ngôn ngữ khác (ví dụ: JavaScript).

6

Không quan trọng thứ tự các chức năng được tạo. Nó chỉ quan trọng khi cuộc gọi đến chức năng được thực hiện:

def print_sum(a, b): 
    print(sum_numbers(a, b)) 

def sum_numbers(a, b): 
    return a + b 

print_sum(1, 3) 
# 4 

hoạt động vì tại thời điểm print_sum được gọi là cả hai chức năng đều tồn tại. Tuy nhiên nếu bạn gọi hàm trước khi xác định sum_numbers nó sẽ thất bại vì sum_numbers không được định nghĩa được nêu ra:

def print_sum(a, b): 
    print(sum_numbers(a, b)) 

print_sum(1, 3) 

def sum_numbers(a, b): 
    return a + b 

ném:

--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-34-37c0e3733861> in <module>() 
     2  print(sum_numbers(a, b)) 
     3 
----> 4 print_sum(1, 3) 
     5 
     6 def sum_numbers(a, b): 

<ipython-input-34-37c0e3733861> in print_sum(a, b) 
     1 def print_sum(a, b): 
----> 2  print(sum_numbers(a, b)) 
     3 
     4 print_sum(1, 3) 
     5 

NameError: name 'sum_numbers' is not defined 
Các vấn đề liên quan