2010-07-23 31 views
9

Tại sao python cho tôi biết "TypeError: pow mong đợi 2 đối số, có 3" mặc dù nó hoạt động trong IDLE (đôi khi nó cho tôi biết trong IDLE)? im chỉ cần thực hiện pow(a,b,c). chương trình của tôi là rất ngắn và tôi không thay đổi định nghĩa của pow bất cứ lúc nào kể từ khi tôi cần phải sử dụng nó cho một số exponentiation.Tại sao Python nói pow chỉ có 2 đối số

Chú ý: Đây là pow từ __builtin__, không Math

Trả lời

14

Được xây dựng trong pow mất hai hoặc ba đối số. Nếu bạn làm from math import * thì nó được thay thế bằng số pow của toán, chỉ mất hai đối số. Khuyến nghị của tôi là làm import math hoặc liệt kê rõ ràng các hàm bạn sử dụng trong danh sách nhập. Sự cố tương tự xảy ra với open so với os.open.

+0

ah ... có thể đó là lý do. cảm ơn!!!!! err ... liệu một tệp nhập từ một tệp khác có ảnh hưởng đến nó không? im nhập một chương trình khác mà tôi đã viết cũng có 'từ nhập khẩu toán học *' – calccrypto

+0

@calccrypto: Nếu bạn đang nhập một chương trình khác với 'từ p import *' thì có. Sử dụng 'import p' hoặc liệt kê rõ ràng' từ p import [...] '. – sdcvvc

0

http://docs.python.org/release/2.6.5/library/functions.html

pow(x, y[, z]) Return x to the power y; if z is present, return x to the power y, modulo z (computed more efficiently than pow(x, y) % z). The two-argument form pow(x, y) is equivalent to using the power operator: x**y.

The arguments must have numeric types. With mixed operand types, the coercion rules for binary arithmetic operators apply. For int and long int operands, the result has the same type as the operands (after coercion) unless the second argument is negative; in that case, all arguments are converted to float and a float result is delivered. For example, 102 returns 100, but 10-2 returns 0.01. (This last feature was added in Python 2.2. In Python 2.1 and before, if both arguments were of integer types and the second argument was negative, an exception was raised.) If the second argument is negative, the third argument must be omitted. If z is present, x and y must be of integer types, and y must be non-negative. (This restriction was added in Python 2.2. In Python 2.1 and before, floating 3-argument pow() returned platform-dependent results depending on floating-point rounding accidents.)

Có lẽ bạn đang vi phạm phần in đậm?

+0

không. im chắc chắn rằng tất cả các giá trị là số nguyên dương chỉnh sửa: yep. a, b, c = 9, 4, 225 – calccrypto

1

Nếu bạn đang sử dụng chức năng toán học rất nhiều và các phiên bản ba tham số của pow thường xuyên một khoảng cách này trong python 2.7 nhập khẩu __builtin__ và gọi __builtin__ .pow cho 3 paramete

+0

Nên có hai ký tự gạch dưới hai bên của 'builitin' trong cả hai trường hợp nhưng định dạng được hiểu là phông chữ đậm - không chắc chắn phải làm gì về thaat. –

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