Python вызов функции несколько раз

Как вызвать функцию два или более раз подряд в python?

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

8 ответов

на _ — это Соглашение для переменной, значение которой вас не волнует.

вы также можете увидеть некоторые люди пишут:

однако это немного дороже, потому что он создает список, содержащий возвращаемые значения каждого вызова do() (даже если это None ), а затем выбрасывает полученный список. Я бы не предложил использовать это, если вы are использование списка возврата ценности.

вы можете определить функцию, которая повторяет переданную функцию N раз.

def repeat_fun(times, f): for i in range(times): f() 

Если вы хотите сделать его еще более гибким, вы даже можете передать аргументы повторяемой функции:

def repeat_fun(times, f, *args): for i in range(times): f(*args) 
>>> def do(): . print 'Doing' . >>> def say(s): . print s . >>> repeat_fun(3, do) Doing Doing Doing >>> repeat_fun(4, say, 'Hello!') Hello! Hello! Hello! Hello! 

или, если вы заинтересованы в результатах и хотите их собрать, с бонусом быть 1 лайнером:

(I) я думаю, используя map также может быть опция, хотя требуется создание дополнительного списка с None s в некоторых случаях и всегда нуждается в списке аргументов:

def do(): print 'hello world' l=map(lambda x: do(), range(10)) 

(II) itertools содержат функции, которые могут быть использованы для итерации через другие функции, а также https://docs.python.org/2/library/itertools.html

(III) использование списков функций пока не упоминалось, я думаю (и это на самом деле самый близкий по синтаксису к тому, который первоначально обсуждался):

from itertools import repeat list(repeat(f(), x)) # for pure f [f() for f in repeat(f, x)] # for impure f 

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

  • вызов iter() встроенная функция С необязательным аргументом sentinel и
  • С помощью itertools рецепт для продвижения итератора n шаги (см. рецепт для consume() ).
Читайте также:  Java объявить массив string

складывая их вместе, мы получаем:

next(islice(iter(do, object()), 3, 3), None) 

(идея передать object() как часовой приходит от этой принятый ответ переполнения стека.)

и вот как это выглядит из интерактивной командной строки:

>>> def do(): . print("called") . >>> next(itertools.islice(iter(do, object()), 3, 3), None) called called called 
from itertools import repeat, starmap results = list(starmap(do, repeat((), 3))) 

посмотреть repeatfunc рецепт из модуля itertools, который на самом деле намного мощнее. Если вам нужно просто вызвать метод, но не заботитесь о возвращаемых значениях, вы можете использовать его в цикле for:

for _ in starmap(do, repeat((), 3)): pass 

но это становится уродливым.

Источник

Функции в Питоне

Функция в программировании не совсем то же самое, что функция в математике. В математике функция принимает одно значение и возвращает другое. В программировании — это программа в программе, отдельный участок кода, к которому можно обратиться по имени.

функции в математике и программировании

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

  • Встроенные функции
    • Параметры и аргументы функции
    • Функции и методы
    • Объявление и вызов функции
    • Пустое тело функции
    • Функция print() вместо return
    • Параметры собственных функций
    • Аннотация функции
    • Дополнительные возможности функций
    • Результат вызова функции
    • Использование библиотек
    • Глобальные и локальные переменные
    • Lambda-функция внутри функции filter()
    • Lambda-функция внутри функции sorted()
    • Немедленно вызываемые функции
    • *args
    • **kwargs
    • Вопросы для закрепления
    • Ответы на вопросы

    Встроенные функции

    В Питоне есть множество встроенных в (1) стандартный функционал (built-in functions) и (2) дополнительные библиотеки (library functions) функций, и мы много раз их использовали.

    Рассмотрим функцию для создания гистограммы plt.hist(). Вначале импортируем библиотеки.

    Сгенерируем данные, которые передадим этой функции (эти же данные мы создавали и использовали на восьмом занятии вводного курса).

    Теперь построим гистограмму передав ей в качестве параметров и аргументов наши данные и количество интервалов.

    параметры функции plt.hist()

    Как мы видим, достаточно обратиться к соответствующей библиотеке ( plt ), вызвать эту функцию по имени ( hist ) и задать параметры и их аргументы ( height и bins = 10 ), и будет исполнен тот код, который заложили в нее создатели библиотеки Matplotlib.

    Теперь несколько слов про параметры и аргументы функции.

    Параметры и аргументы функции

    Для начала определимся с терминами:

    • параметр — это то, что запрашивает функция при вызове (например, bins , количество интервалов)
    • аргумент — значение этого параметра (в нашем случае, 10 ).

    Возникает вопрос, что же такое height ? Логично предположить, что это аргумент (ведь это наши данные). Но тогда как функция узнает, какому параметру он соответствует?

    Все дело в том, что параметры и их аргументы могут быть позиционными (positional) и именованными (keyword).

    позиционные и именованные аргументы функции

    В первом случае, достаточно указать аргумент и поставить его в правильном порядке (позиции). Функция сама поймет, какой параметр ей передают. Во втором случае, нужно указать и название параметра, и аргумент.

    Позиционный параметр можно сделать именованным, и тогда порядок важен не будет.

    использование именованных параметров функции plt.hist()

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

    аргументы по умолчанию функции plt.hist()

    Как вы видите, результат во всех трех случаях совершенно одинаковый.

    Если вы сомневаетесь в том, какие параметры принимает функция и что является результатом ее работы, полезно обратиться к документации в Интернете. Например, по функции plt.hist() ее можно найти вот здесь⧉.

    Стоит отметить, что функция может как принимать один, два или несколько параметров, так и не принимать их вовсе. Например, функция print(), если не указывать параметры, выдает пустую строку.

    Функции и методы

    Некоторые функции называются методами. Методы — это функции, которые можно применить только к конкретному объекту. Другими словами, если обычная функция будет выполнена «сама по себе», это просто участок кода, которому дали имя, то методу для исполнения нужен объект (например, строка, список или словарь). При этом, что важно, у каждого объекта свои методы.

    Предположим, у нас есть строка, и мы хотим сделать первую букву каждого слова заглавной. Для этого у строки есть метод .title().

    А теперь попробуем применить этот метод к списку, состоящему из тех же слов, что и строка.

    ошибка при применении строкового метода .title() к списку

    Как мы видим, Питон выдал ошибку.

    Собственные функции в Питоне

    Объявление и вызов функции

    Функции не обязательно должны быть встроены в базовый функционал или библиотеки. Мы вполне можем объявлять (т.е. создавать) собственные функции (user-defined functions). Рассмотрим пример.

    Теперь давайте разберем каждый элемент этого кода. Вначале посмотрим как объявить функцию (declare a function).

    синтаксис собственной функции

    • ключевое слово def необходимо для объявления функции
    • далее идут название функции, которое вы сами определяете, и
    • параметры, которые может принимать ваша функция
    • после двоеточия на новой строке с отступом идет так называемое тело функции, то есть то, что будет исполняться при вызове функции
    • в конце ставится ключевое слово return, возвращающее результат работы функции

    Затем, когда это необходимо, мы можем вызвать функцию (call a function), указав ее имя и передав, при их наличии, соответствующие аргументы внутри круглых скобок.

    вызов собственной функции

    Пустое тело функции

    Оставлять тело функции совсем пустым нельзя. Нужно как минимум указать ключевое слово return или оператор pass.

    Источник

Оцените статью