Gibt es eine eingebaute Identitätsfunktion in Python?


Answers

Deines wird gut funktionieren. Wenn die Anzahl der Parameter fest ist, können Sie eine anonyme Funktion wie diese verwenden:

lambda x: x
Question

Ich möchte auf eine Funktion hinweisen, die nichts bewirkt:

def identity(*args)
    return args

Mein Anwendungsfall ist so etwas

try:
    gettext.find(...)
    ...
    _ = gettext.gettext
else:
    _ = identity

Natürlich könnte ich die oben definierte identity , aber eine eingebaute würde sicherlich schneller laufen (und die von mir eingeführten Fehler vermeiden).

Anscheinend verwenden map und filter None für die Identität, aber dies ist spezifisch für ihre Implementierungen.

>>> _=None
>>> _("hello")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable



Nein, da ist es nicht.

Beachten Sie, dass Ihre identity :

  1. entspricht lambda * args: args
  2. Will box seine Argumente - dh

    In [6]: id = lambda *args: args
    
    In [7]: id(3)
    Out[7]: (3,)
    

Sie können also lambda arg: arg wenn Sie eine echte Identitätsfunktion wünschen.




Der Thread ist ziemlich alt. Trotzdem wollte ich das hier posten.

Es ist möglich, eine Identitätsmethode für Argumente und Objekte zu erstellen. Im folgenden Beispiel ist ObjOut eine Identität für ObjIn. Alle anderen obigen Beispiele haben sich nicht mit dict ** kwargs befasst.

class test(object):
    def __init__(self,*args,**kwargs):
        self.args = args
        self.kwargs = kwargs
    def identity (self):
        return self

objIn=test('arg-1','arg-2','arg-3','arg-n',key1=1,key2=2,key3=3,keyn='n')
objOut=objIn.identity()
print('args=',objOut.args,'kwargs=',objOut.kwargs)

#If you want just the arguments to be printed...
print(test('arg-1','arg-2','arg-3','arg-n',key1=1,key2=2,key3=3,keyn='n').identity().args)
print(test('arg-1','arg-2','arg-3','arg-n',key1=1,key2=2,key3=3,keyn='n').identity().kwargs)

$ py test.py
args= ('arg-1', 'arg-2', 'arg-3', 'arg-n') kwargs= {'key1': 1, 'keyn': 'n', 'key2': 2, 'key3': 3}
('arg-1', 'arg-2', 'arg-3', 'arg-n')
{'key1': 1, 'keyn': 'n', 'key2': 2, 'key3': 3}