Есть ли способ передать аргумент блока в Python, не определив его как функцию в первую очередь? - PullRequest
0 голосов
/ 03 октября 2019

в Ruby аргумент блока работает следующим образом:

def method (&block)
    block.call(4)
end

method do |x|
    puts x
    puts x * 2
end
=begin
4
8
=end

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

def method(block):
    block(4)

def call(x):
    print(x)
    print(x * 2)

method(call) 
'''
4
8
'''

есть ли в Python альтернатива этому, которая не требует, чтобы функция была определена первой?

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Нет, python не допускает такой синтаксический сахар. У него нет анонимных функций;ближайший из них - lambdas , но они имеют ряд ограничений, а именно, они могут иметь только одно выражение, то есть одну «строку» кода.

Определение функций с помощью def - это питонный способ создания многократно используемого блока кода.

0 голосов
/ 14 ноября 2019

Наиболее близким к функции в качестве аргумента без предварительного определения я нашел Python-декораторы с их полезным синтаксическим сахаром:

def loop_thru(block):
    arr = [3, 76, 2, 8, 24]
    for item in arr:
        block(item)

@loop_thru
def puts(item):
    print(item)
"""
3
76
2
8
24
"""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...