2016-03-21 5 views

Antwort

2

Wenn es eine Instanz Konzept für Typ existiert x, die ein einzelnes Argument vom Typ nimmt y und das Richtige tut, könnte man einfach anrufen type(x)(y):

>>> x = 100.0 
>>> y = "100.0" 
>>> type(x) 
<class 'float'> 
>>> type(x)(y) 
100.0 

Dies ist für das Beispiel im OP gegeben arbeitet, aber wird in anderen Fällen subtile oder Fehler oder direkte Fehler ergeben.

Aber "über ein Lambda" macht nicht viel Sinn. Ein Lambda ist nur eine bestimmte, nicht sehr mächtige Syntax, um eine anonyme Funktion zu definieren. Es ist keine spezielle Art von Funktion. Sie können

>>> def f(x,y): return type(x)(y) 
>>> f(100.0, "200.0") 
200.0 

schreiben Wenn Sie wirklich darauf bestanden, Sie

>>> f = lambda x,y: type(x)(y) 
>>> f(100.0, "200.0") 
200.0 

schreiben könnte, aber das wird die meisten Python-Programmierer fragen sich, wenn Sie auf Python neu sind, weil es keinen Grund gibt, einen Lambda zu verwenden, um Definieren Sie eine anonyme Funktion und geben Sie ihr sofort einen Namen.

+0

Dies funktioniert für den expliziten OP-Fall, weil es einfach eine Methode zum Erstellen von Einargument-Instanzen von float gibt, die zufällig einen String nimmt und ihn als Float interpretiert. Abgesehen von einigen sehr engen Fällen wie diesem, wird dieser Ansatz sehr wahrscheinlich nicht funktionieren, ein einfaches Beispiel wäre "x = []; y = '100.00''. – msw

+1

@msw: nun ja. Nur Nötigungen, die nativ vom Zieltyp unterstützt werden, funktionieren; Alles andere würde angesichts der Zweideutigkeit raten, und das ist eine Versuchung, die wir offiziell ablehnen sollten. – DSM

Verwandte Themen