Чтобы функция возвращала тот же тип, что и на входе, можно использовать несколько подходов в зависимости от того, какие типы вы хотите поддерживать. Вот пример реализации на Python, который возвращает тот же тип, что и на входе:
def return_same_type(value):
# Получаем тип входного значения
value_type = type(value)
# Если это строка, пытаемся преобразовать её в число
if value_type is str:
try:
return int(value)
except ValueError:
try:
return float(value)
except ValueError:
return value # Если не удалось преобразовать, возвращаем исходную строку
# Если это число, преобразуем его в строку
elif value_type is int or value_type is float:
return str(value)
# Для других типов возвращаем значение как есть
return value
# Примеры использования:
print(return_same_type('234')) # Вернёт 234 (int)
print(return_same_type(234)) # Вернёт '234' (str)
print(return_same_type(23.4)) # Вернёт '23.4' (str)
print(return_same_type('abc')) # Вернёт 'abc' (str, так как не удалось преобразовать в число)
Объяснение:
Определение типа входного значения: Используем type(value), чтобы определить тип входного значения.
Обработка строк: Если входное значение — строка, пытаемся преобразовать её в целое число (int), а если не получается — в число с плавающей точкой (float). Если оба преобразования не удаются, возвращаем исходную строку.
Обработка чисел: Если входное значение — целое число (int) или число с плавающей точкой (float), преобразуем его в строку (str).
Другие типы: Для всех остальных типов возвращаем значение как есть.
Если нужно поддерживать пользовательские типы:
Если вы хотите поддерживать пользовательские типы, которые могут иметь свои методы __str__ или __repr__, можно использовать следующий подход:
def return_same_type(value):
value_type = type(value)
if value_type is str:
try:
return int(value)
except ValueError:
try:
return float(value)
except ValueError:
return value
elif value_type is int or value_type is float:
return str(value)
else:
# Для пользовательских типов вызываем __str__ или __repr__
return str(value) # или repr(value), в зависимости от того, что вам нужно
# Пример с пользовательским типом:
class MyClass:
def __str__(self):
return "MyClass instance"
def __repr__(self):
return "MyClass()"
obj = MyClass()
print(return_same_type(obj)) # Вернёт "MyClass instance" (str)
В этом случае, если входное значение — это объект пользовательского класса, будет вызван его метод __str__ (или __repr__, если вы используете repr(value)), и результат будет возвращён как строка.р