2012-02-26 23 views
33

Dựa trên thisĐối số vị trí v.s. từ khóa luận

Một lập luận vị trí là một cái tên mà không được theo sau bởi một dấu bằng (=) và giá trị mặc định.

Đối số từ khóa được theo sau bởi dấu bằng và biểu thức cho giá trị mặc định của nó.

def rectangleArea(width, height): 
    return width * height 

print rectangleArea(width=1, height=2) 

Câu hỏi> Tôi giả định rằng cả hai widthheight là đối số vị trí. Vậy tại sao chúng ta cũng có thể gọi nó bằng cú pháp đối số thực sự từ khóa?

+0

"tại sao chúng tôi cũng có thể gọi nó bằng cú pháp đối số thực của từ khóa?" Bởi vì đó là cách ngôn ngữ hoạt động. –

Trả lời

68

Văn bản bạn trích dẫn là dành cho định nghĩa của hàm và không liên quan gì đến các cuộc gọi đến hàm. Trong số gọi đối với chức năng đó, bạn đang sử dụng tính năng "đối số được đặt tên". Liên kết mà bạn cung cấp không phải là một chất lượng rất tốt, các tác giả có vẻ bối rối giữa hai thứ khác nhau.

Tham chiếu Python chỉ đề cập đến các đối số vị trí và từ khóa chỉ liên quan đến cuộc gọi đến một hàm (xem section 5.3.4 Calls).

Khi họ nói về định nghĩa của hàm trong section 7.6 Function definitions, đó là cụm từ hoàn toàn khác "giá trị thông số mặc định".

tôi nghi ngờ những người đặt lại với nhau rằng nhiên-ware không hoàn toàn quen thuộc với Python :-)


Bằng một ví dụ, hãy tham khảo các định nghĩa sau đây và kêu gọi:

def fn (a, b, c = 1): 
    return a * b + c 

print fn (1, 2)    # returns 3, positional and default. 
print fn (1, 2, 3)    # returns 5, positional. 
print fn (c = 5, b = 2, a = 2) # returns 9, named. 
print fn (b = 2, a = 2)  # returns 5, named and default. 
print fn (5, c = 2, b = 1)  # returns 7, positional and named. 
print fn (8, b = 0)   # returns 1, positional, named and default. 

Ý nghĩa của các thay đổi =, tùy thuộc vào việc nó có trong định nghĩa hoặc trong cuộc gọi hay không.

Trong định nghĩa, nó đánh dấu đối số tùy chọn và đặt giá trị mặc định.

Trong cuộc gọi, nó chỉ cho phép bạn chỉ định đối số nào là giá trị nào, theo bất kỳ thứ tự nào bạn muốn.

3

Đối số vị trí có thể được gọi bằng cách sử dụng giá trị theo thứ tự hoặc bằng cách đặt tên từng giá trị. Ví dụ: cả ba điều sau đây sẽ hoạt động theo cùng một cách:

def rectangleArea(width, height): 
    return width * height 

print(rectangleArea(1, 2)) 
print(rectangleArea(width=1, height=2)) 
print(rectangleArea(height=2, width=1)) 
6

Đối số từ khóa chỉ là đối số vị trí với giá trị mặc định. Bạn phải chỉ định tất cả các đối số không có giá trị mặc định. Nói cách khác, đối số từ khóa chỉ "tùy chọn" vì chúng sẽ được đặt thành giá trị mặc định của chúng nếu không được cung cấp cụ thể.

Các vấn đề liên quan