Как передать значение в функцию Python без вызова? - PullRequest
1 голос
/ 04 июня 2019

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

Вот упрощенная версия моего кода. Я хотел бы, чтобы «print_hello» печатал «hello», когда он вызывается, а не когда он определен.

print_hello = print(‘hello’)

Когда я определяю «print_hello», он вызывает print(‘hello’). Когда я вызываю «print_hello», это выдает мне ошибку. Как мне это исправить?

Ответы [ 4 ]

3 голосов
/ 04 июня 2019

Просто определите print_hello как лямбда-функцию

>>> print_hello = lambda: print('hello')
>>> print_hello()
hello

Чтобы отложить выполнение, вам придется заключить вызов в print в другую функцию. Лямбда - это меньше кода, чем определение другой функции.

Примечание: , что pep08 рекомендует использовать функцию def, а не лямбду, при присваивании переменной. Смотрите здесь . Так что @Sheldores ответ , вероятно, путь.

3 голосов
/ 04 июня 2019

Если вам просто нужна функция, которая выполняет именно то, что вы описываете, Ответ Шелдора - самый простой путь .

Альтернативный подход - частичное применениефункция с functools.partial, которая позволяет передавать дополнительные аргументы во время вызова:

from functools import partial

print_hello = partial(print, "hello")

print_hello()  # Prints "hello" to stdout

print_hello(file=sys.stderr)  # Prints "hello" to stderr

print_hello("world")  # Prints "hello world" to stdout
3 голосов
/ 04 июня 2019

Вам нужно определить функцию.В python функция определяется с использованием def, как показано в простом примере для вашей цели ниже.Затем вы вызываете функцию, используя имя функции и (), например print_hello().

def print_hello(): # <--- Does not accept an argument 
    print('hello')

print_hello()    # <--- No argument is passed
# hello

Еще один пример, чтобы дать вам больше идей о том, как передать аргумент функции.Вы можете определить переменную, которая содержит строку, которую вы хотите напечатать, скажем, to_print, а затем передать ее в качестве аргумента вашей функции во время ее вызова.Хотя объяснение более подробной информации выходит за рамки этого ответа, два примера, которые я привел, должны помочь вам начать.Для более подробной информации, вы можете обратиться к официальным документам здесь

def print_hello(to_print): # <--- Accepts an argument 
        print(to_print)

to_print = "hello"
print_hello(to_print) # <--- Argument is passed
# hello
1 голос
/ 04 июня 2019

Вы можете использовать выражение lambda:

print_hello = lambda: print('hello')

Или фактическое определение функции:

def print_hello(): print('hello')

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

from functools import partial
print_hello = partial(print, 'hello')

Чтобы использовать любой из этих:

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