вызов функции Python с помощью кортежа - PullRequest
0 голосов
/ 26 февраля 2019

Я пишу код, использующий кортеж для вызова функции

def get_apple():
    print('you got an apple.')

def get_pear():
    print('you got a pear.')

fruits = (get_apple, get_pear)

print('0. apple\n1. pear')
s = eval(input('which one : '))

fruits[s]()

Но как только я выполняю этот скрипт, он возвращает только «TypeError: объект« function »не подписан» для «fruitss».

У кого-нибудь есть идея?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019
def get_apple():
    print('you got an apple.')

def get_pear():
    print('you got a pear.')

fruits = (get_apple, get_pear)

print('0. apple\n1. pear')
s = eval(str(input('which one : ')))

fruits[s]()

Этот код работал как в python 2.7.5, так и в python 3.7.1.

eval() принимает входную строку в качестве ввода.Следовательно, преобразование ввода в str.

0 голосов
/ 26 февраля 2019

Вы могли бы просто сделать это:

def get_apple():
    print('you got an apple.')

def get_pear():
    print('you got a pear.')

fruits = (get_apple, get_pear)

n = int(input('0. apple\n1. pear'))

fruits[n]()

нет необходимости в eval.

, вам, конечно, придется проверять нецелочисленный ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...