Когда я нахожусь в настроении C, я обычно использую zip и списки для поведения, подобного scanf. Как это:
input = '1 3.0 false hello'
(a, b, c, d) = [t(s) for t,s in zip((int,float,strtobool,str),input.split())]
print (a, b, c, d)
Обратите внимание, что для более сложных строк формата вам необходимо использовать регулярные выражения:
import re
input = '1:3.0 false,hello'
(a, b, c, d) = [t(s) for t,s in zip((int,float,strtobool,str),re.search('^(\d+):([\d.]+) (\w+),(\w+)$',input).groups())]
print (a, b, c, d)
Обратите внимание, что вам нужны функции преобразования для всех типов, которые вы хотите преобразовать. Например, выше я использовал что-то вроде:
strtobool = lambda s: {'true': True, 'false': False}[s]