2016-03-19 15 views
5

Hoàn toàn có thể là câu hỏi này là trùng lặp, nhưng tôi không biết khái niệm này được gọi là gì vì vậy tôi thậm chí không biết cách tìm kiếm nó.Tên và lý do cho các tham số hàm Python của kiểu `name = value`

Tôi mới đến Python và cố gắng tìm hiểu chức năng này từ một Caffe example:

def conv_relu(bottom, ks, nout, stride=1, pad=0, group=1): 
    conv = L.Convolution(bottom, kernel_size=ks, stride=stride, 
           num_output=nout, pad=pad, group=group) 
    return conv, L.ReLU(conv, in_place=True) 

Tôi nhận thấy các thông số stride=1, pad=1, vv trong định nghĩa hàm conv_relu là những giá trị ban đầu mặc định, nhưng sau đó những gì làm kernel_size=ks, stride=stride, v.v. trong cuộc gọi có nghĩa là L.Convolution? Nó giống như một cặp tên/giá trị?

Nếu không có gì khác, ai đó có thể vui lòng cho tôi biết điều này được gọi là gì không?

+3

Chúng được gọi là đối số từ khóa. –

+2

Tôi khuyên bạn nên đọc hướng dẫn Python; [điều này và nhiều thứ khác được giải thích ở đó] (https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments) –

+0

@AnttiHaapala: Không phải là một ý tưởng tồi. Tôi đã thực hiện theo cách của mình thông qua nó, nhưng từng phần khi cần thiết – marcman

Trả lời

6

Đó là các đối số từ khóa.

some_function(x=y, z=zz) 

x là tên của các tham số khi hàm được khai báo, và y là giá trị đó được thông qua vào

lý do để sử dụng đối số từ khóa:.

  • Bạn có thể cung cấp cho họ theo thứ tự bất kỳ, thay vì chỉ theo thứ tự trong định nghĩa hàm
  • Khi bạn nhìn lại mã sau, nếu các tham số có tên tốt, bạn có thể ngay lập tức cho biết mục đích của các biến được truyền thay vì cần kiểm tra định nghĩa hàm hoặc tài liệu để xem dữ liệu có ý nghĩa gì.
5

Bạn có một call expression sử dụng đối số từ khóa. Mỗi cặp name=value gán giá trị cho một tham số cụ thể mà hàm chấp nhận.

Đối số từ khóa có thể được sử dụng theo bất kỳ thứ tự nào. Nếu tham số được đặt tên trong chữ ký hàm có giá trị mặc định, giá trị trong cuộc gọi sẽ ghi đè giá trị mặc định đó. Nếu bạn bỏ qua một đối số cụ thể, giá trị mặc định sẽ được sử dụng.

4

Trong Python, các đối số có thể được cung cấp theo vị trí hoặc theo từ khóa.

Ví dụ, nói rằng bạn có chức năng sau:

def foo(bar, baz=1, qux=2): 
    pass 

Bạn có thể gọi nó như foo(3), vì vậy trong phạm vi callee, bar sẽ 3. bazqux sẽ được gán giá trị mặc định của chúng - lần lượt là 12 - do đó bạn không phải cung cấp chúng một cách rõ ràng.

Bạn cũng có thể gọi hàm này bằng cách sử dụng đối số từ khóa (đó là cụm từ bạn đang tìm kiếm). Cuộc gọi chính xác giống với số bar làm đối số được đặt tên sẽ là foo(bar=3).

Tất nhiên, chúng tôi chỉ muốn sử dụng foo(3) vì nó ngắn gọn hơn, trừ khi có lý do cụ thể để sử dụng đối số được đặt tên.Ví dụ về lý do đó là nếu chúng tôi muốn cung cấp đối số không mặc định cho qux, trong khi để lại đối số mặc định cho baz không thay đổi: foo(3, qux=4).

+1

Tài liệu Python gọi các đối số * từ khóa * này, không phải là đối số được đặt tên. –

+0

Tôi thề một ngôn ngữ khác sử dụng thuật ngữ "có tên". Tôi nghĩ đó là nơi sự nhầm lẫn xuất phát từ đó. – Carcigenicate

+0

@MartijnPieters: cảm ơn, tôi đã sửa câu trả lời của mình. Đối với những gì nó có giá trị, "đối số được đặt tên" là thuật ngữ được sử dụng bởi Dive Into Python: http://www.diveintopython.net/power_of_introspection/optional_arguments.html –

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