Автоматический запуск функций в python?

«Я составляю список функций в python, но когда я запускаю программу, все функции в списке вызываются автоматически».

«Я пробовал это на python 3.7.3, и ту же концепцию я пробовал и на C++, но и там он делает то же самое».

    def a():
        print ('a')
    def b():
        print('b')
    def c():
        print('c')
    def d():
        print('d')
    aa=[a(),b(),c(),d()]
    print(aa[1])

«Я ожидаю, что вывод aa[1] будет «b», но при выводе вызываются все функции, и он дает вывод а б с г Никто "

ваши функции ничего не возвращают.

Paritosh Singh 12.06.2019 19:16

поменяй print(#) на return #

depperm 12.06.2019 19:16

Здесь вы явно вызываете все свои функции: aa=[a(),b(),c(),d()].

juanpa.arrivillaga 12.06.2019 19:17

Ваши функции являются запускаются, хотя и не автоматически; вы явно вызываете их в выражении, определяющем aa. Проблема в том, что вы путаете стандартный вывод со значением вызова функции.

chepner 12.06.2019 19:17

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

Prune 12.06.2019 19:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
2 622
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

ваши функции ничего не возвращают. Они только печатают письмо и возвращают None.

использовать

def a():
    print ('a')
    return 'a'

...

вместо

Вы явно вызвали все функции, когда писали [а(), б(), с(), г()] так что все они работают (в данном случае печать письма) - это действительно ожидаемый результат. Я считаю, что вы хотите сначала собрать вызываемые объекты в списке не звоня им. Если вы хотите, чтобы желаемая функция из этого списка выполнялась путем индексации, вы можете сделать это, вызвав ее только после этого.

Например,

def a():
    print ('a')
def b():
    print('b')
def c():
    print('c')
def d():
    print('d')

# placeholder for the functions
funcs = [a, b, c, d]

Затем вы можете вызвать любую из функций путем индексации:

# call any of them by indexing whenever you feel like it.
funcs[1]()

Output: b
Ответ принят как подходящий

Используйте return вместо print. Когда вы создаете свой список aa, каждый элемент вызывается немедленно, потому что вы написали () после каждого элемента, поэтому каждый оператор печати запускается по мере создания вашего списка. Кроме того, когда функция явно не возвращает значение, она возвращает None. Когда вы print(aa[1]), вы затем печатаете возвращаемое значение b(), которое равно None. Таким образом, вы получаете:

a     # because it's printed in a()
b     # because it's printed in b()
c     # because it's printed in c()
d     # because it's printed in d()
None  # because it's returned from b()

Если вы используете return вместо print в каждой функции, каждый элемент списка будет содержать значение вернулся для каждой функции (ваш список фактически станет aa = ['a', 'b', 'c', 'd']). Затем, когда вы затем print(aa[1]), вы напечатаете значение aa в позиции 1, что будет 'b'.

def a():
    return 'a'
def b():
    return 'b'
def c(): 
    return 'c' 
def d():
    return 'd'
aa=[a(),b(),c(),d()] 
print(aa[1])

В качестве альтернативы, если вы хотите сохранить свои операторы печати в каждой функции, вы можете создать свой список с использованная литература для каждой функции вместо вызова каждой функции, а затем запустить результат:

def a():
    print ('a')
def b():
    print('b')
def c():
    print('c')
def d():
    print('d')
aa=[a,b,c,d]
print(aa[1]())

Ставя () после aa[1], вы говорите, попробуйте запустить все, что возвращается из aa[1]. Поскольку aa[1] содержит ссылка для функции b, вы фактически вызываете b() в этот момент, который затем запускает ваш оператор print('b').

Другие вопросы по теме