2013-01-13 41 views
85

Dấu hoa thị trần trong đối số của hàm là gì?Dấu hoa thị của Python trong đối số hàm

Khi tôi nhìn module dưa, tôi thấy điều này: (http://docs.python.org/3.3/library/pickle.html#pickle.dump)

pickle.dump(obj, file, protocol=None, *, fix_imports=True) 

tôi biết về một dấu hoa thị đơn và kép trước đối số (đối với số lượng đối số biến), nhưng điều này không có trước. Và tôi khá chắc chắn điều này không có gì để làm với dưa chua. Đó có lẽ chỉ là một ví dụ về điều này. Tôi chỉ biết được tên của nó khi tôi gửi thông tin này cho người phiên dịch:

>>> def func(*): 
...  pass 
... 
    File "<stdin>", line 1 
SyntaxError: named arguments must follow bare * 

Nếu nó quan trọng, tôi đang ở trăn 3.3.0.

Trả lời

85

Bare * được sử dụng để buộc người gọi sử dụng đối số được đặt tên - vì vậy bạn không thể xác định hàm với * làm đối số khi bạn không có đối số từ khóa sau.

Xem this answer hoặc Python 3 documentation để biết thêm chi tiết.

+0

Lưu ý rằng tất cả các đối số vị trí (chưa đặt tên), bao gồm '* args', phải xảy ra trước dấu gạch ngang' * '. – BallpointBen

17

Trong khi câu trả lời gốc trả lời câu hỏi hoàn toàn, chỉ cần thêm một chút thông tin liên quan. Hành vi của dấu sao đơn xuất phát từ PEP-3102. Trích dẫn phần có liên quan:

The second syntactical change is to allow the argument name to 
be omitted for a varargs argument. The meaning of this is to 
allow for keyword-only arguments for functions that would not 
otherwise take a varargs argument: 

    def compare(a, b, *, key=None): 
     ... 

Trong đơn giản tiếng Anh, có nghĩa là để vượt qua giá trị cho khóa, bạn sẽ cần phải vượt qua một cách rõ ràng như key="value".

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