def sub3(n):
return n - 3
def square(n):
return n * n
Đó là chết dễ dàng thao tác các chức năng trong python:Làm thế nào để nhân các hàm trong python?
>>> my_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [square(sub3(n)) for n in my_list]
[9, 4, 1, 0, 1, 4, 9, 16, 25, 36]
Thật không may, khi muốn sử dụng các thành phần như một chính, nó là loại què:
>>> sorted(my_list, key=lambda n: square(sub3(n)))
[3, 2, 4, 1, 5, 0, 6, 7, 8, 9]
nên Đây thực sự chỉ là sorted(my_list, key=square*sub3)
, vì heck, chức năng __mul__
không được sử dụng cho bất kỳ mục đích nào khác:
>>> square * sub3
TypeError: unsupported operand type(s) for *: 'function' and 'function'
Chúng ta hãy định nghĩa nó sau đó!
>>> type(sub3).__mul__ = 'something'
TypeError: can't set attributes of built-in/extension type 'function'
D'oh!
>>> class CoolerFunction(types.FunctionType):
... pass
...
TypeError: Error when calling the metaclass bases
type 'function' is not an acceptable base type
D'oh!
class Hack(object):
def __init__(self, function):
self.function = function
def __call__(self, *args, **kwargs):
return self.function(*args, **kwargs)
def __mul__(self, other):
def hack(*args, **kwargs):
return self.function(other(*args, **kwargs))
return Hack(hack)
Hey, bây giờ chúng tôi đang nhận được ở đâu đó ..
>>> square = Hack(square)
>>> sub3 = Hack(sub3)
>>> [square(sub3(n)) for n in my_list]
[9, 4, 1, 0, 1, 4, 9, 16, 25, 36]
>>> [(square*sub3)(n) for n in my_list]
[9, 4, 1, 0, 1, 4, 9, 16, 25, 36]
>>> sorted(my_list, key=square*sub3)
[3, 2, 4, 1, 5, 0, 6, 7, 8, 9]
Nhưng tôi không muốn có một lớp callable Hack
! Các quy tắc phạm vi là hoàn toàn khác nhau theo những cách tôi không hiểu đầy đủ, và điều này thậm chí còn xấu hơn so với "lameda" được cho là. Tôi muốn monkeypatch các chức năng . Làm thế nào tôi có thể làm điều đó?
chưa bao giờ thấy bất cứ điều gì tương tự như sau, có bạn đã cố gắng sử dụng 'partials' thay vào đó, tương tự cho' Hack' nhưng có lẽ nhẹ tốt hơn – dashesy
Tại sao không: 'key = lambda n: square (n) * sub3 (n)' –
@MalikBrahimi không phải là thành phần chức năng, đó là những gì wim muốn. http: //en.wikipedia.org/wiki/Function_composition –