Написание обобщенной функции как для строк, так и для списков на python

Итак, я зеленый, как трава, и учусь программированию у Как думать как компьютерный ученый: Изучите python 3 . Я могу ответить на вопрос (см. Ниже), но боюсь, что пропускаю урок.

Напишите функцию (с именем insert_at_end), которая будет передавать (возвращать полужирный шрифт с учетом двух аргументов перед) для всех трех:

test(insert_at_end(5, [1, 3, 4, 6]), **[1, 3, 4, 6, 5]**)
test(insert_at_end('x', 'abc'),  **'abcx'**)
test(insert_at_end(5, (1, 3, 4, 6)), **(1, 3, 4, 6, 5)**)

В книге дается такой намек: «Эти упражнения хорошо иллюстрируют, что абстракция последовательности является общей, (, потому что нарезка, индексирование и конкатенация являются общими), поэтому можно писать общие функции, которые работают со всеми типами последовательностей. ".

В этой версии нет онлайн-решений (которые я смог найти), но я нашел чьи-то ответы на предыдущую версию текста (для python 2.7), и они сделали это следующим образом:

def encapsulate(val, seq):
    if type(seq) == type(""):
        return str(val)
    if type(seq) == type([]):
        return [val]
    return (val,)

def insert_at_end(val, seq): 
    return seq + encapsulate(val, seq)

Что, кажется, решать вопрос, различая списки и строки ... идя против намека. Так как насчет этого. Есть ли способ ответить на вопрос (и еще около 10 похожих), не различая? я.e без использования "type ()"

7
задан Duncan 19 January 2012 в 19:45
поделиться