2010-05-28 36 views
5

tài liệu Các Python xác định đó là hợp pháp để bỏ qua các dấu ngoặc đơn nếu một chức năng chỉ mất một tham số duy nhất, nhưngCó thể gọi hàm Python tham số đơn không sử dụng dấu ngoặc đơn?

myfunction "Hello!" 

tạo ra một lỗi cú pháp. Vậy thỏa thuận là gì?

(Tôi đang sử dụng Python 3.1)

EDIT:

Những tuyên bố rằng tôi đọc chỉ áp dụng cho generator expressions:

 
    The parentheses can be omitted on calls with only one argument. 
+2

Bạn có chắc chắn không? Bạn có thể cho chúng tôi biết bạn đọc quy tắc đó ở đâu không? Bạn đang bối rối với ruby? –

+1

Bạn có thể khó hiểu Python với Ruby hoặc Lua, đôi khi có thể bỏ qua các dấu ngoặc đơn. – interjay

+2

@Jen: chúng nói về dấu ngoặc đơn biểu thị trình tạo, chứ không phải hàm gọi. – SilentGhost

Trả lời

6

Đối với chỉnh sửa của bạn:

Nếu bạn viết ra một biểu thức máy phát điện, như stuff = (f(x) for x in items) bạn cần khung, giống như bạn cần [ .. ] xung quanh một sự hiểu biết danh sách.

Nhưng khi bạn truyền thứ gì đó từ biểu thức máy phát đến chức năng (đó là một mẫu khá phổ biến, vì đó là ý tưởng lớn đằng sau máy phát) thì bạn không cần hai bộ ngoặc vuông - thay vì một cái gì đó như s = sum((f(x) for x in items)) (dấu ngoặc bên ngoài để chỉ ra một cuộc gọi hàm, bên trong cho biểu thức máy phát), bạn chỉ có thể viết sum(f(x) for x in items)

2

Nếu không có ngoặc những sẽ không functions nhưng statements hoặc keywords (ngôn ngữ nội tại).

This StackOverflow thread (với một số câu trả lời rất hay) contains a lead as cách người ta có thể tự tạo bằng Python thuần túy (thông qua tin tặc nâng cao và không phải là ý tưởng hay trong 99,99% trường hợp).

0

Khi tôi hiểu quy tắc chỉ về biểu thức của trình tạo ... ví dụ: tổng (x 2 cho x trong phạm vi (10)), nhưng bạn vẫn phải viết: giảm (operator.add, (x 2 cho x trong phạm vi (10))).

Điều này không áp dụng cho các chức năng chung.

3

Bạn có thể làm điều đó với iPython - dòng lệnh tùy chọn điều khiển -autocall tính năng này (sử dụng -autocall 0 để vô hiệu hóa tính năng này, -autocall 1, mặc định, để có nó chỉ có tác dụng khi một cuộc tranh cãi là hiện tại, và -autocall 2 để có nó làm việc ngay cả đối với các cuộc gọi ít đối số).

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