Python: использование map () с функцией, содержащей 2 аргумента - PullRequest
0 голосов
/ 17 марта 2019

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

dollars = 568

billSelection = [100,50,20,10,5,1]
def thingy(bill):
    global dollars
    numOfBills = dollars // bill
    dollars -= numOfBills * bill
    return numOfBills

result = list(map(thingy,billSelection))

print(result)
print(sum(result))

Я хотел бы передать «доллары» в функцию, чтобы избежатьуродливая глобальная переменная.Это работает, если я устанавливаю доллары в виде списка с 1 элементом и везде пишу доллары [0], но это также не оптимально.Любые предложения о том, как сделать это чисто?Спасибо!

Ответы [ 2 ]

3 голосов
/ 17 марта 2019

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

Если вы не возражаете отказаться от map для явного цикла, вы можете заставить его работать:

def thingy(dollars, bill):
    numOfBills = dollars // bill
    dollars -= numOfBills * bill
    return dollars, numOfBills  # return a two-tuple

dollars = 568
billSelection = [100,50,20,10,5,1]
result = []

for bill in billSelection:                        # use an explicit loop instead of map
    dollars, bill_count = thingy(dollars, bill)   # so we can update dollars
    result.append(bill_count)
0 голосов
/ 17 марта 2019

map может принимать несколько аргументов, если они все повторяемы. Один быстрый и грязный способ передать постоянное значение - поместить его в список того же размера, что и другой итерируемый, например:

dollars = 568
billSelection = [100,50,20,10,5,1]

def thingy(bill, dollars):
    # function logic goes here

result = map(thingy, billSelection, [dollars]*len(billSelection))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...