Stack Overflow на русском Asked on December 16, 2021
import blockcypher
prev_data_lines_adr = ['14CaBzRbZDuGJCAdu9CZsbrCfyv4K7f7sf','0xd4FD252d7D2C9479a8d616F510eAC6243B5DDdf9']
for ln in prev_data_lines_adr:
blockcypher.get_total_balance(ln)
Как изменить код, чтобы функция построчно применилась к списку или переменной с переносами строк. После выполнения функции, нужно записать выполненное назад в список либо в переменной с переносами строк
Для этого есть map, который первым параметром принимает метод, который должен возвращать что-то, а вторым итерируемый объект. Map применит метод к каждому элементу итерируемого объекта и вернет генератор.
a = tuple(map(lambla x: x + 1, [1,2,3]))
print(a)
# (2,3,4)
А еще можно воспользоваться любым из comprehension
# генератор
a = (x + 1 for x in [1,2,3])
print(a)
# генератор
print(*a) # сработает только один раз. генератор же.
# 2 3 4
# list
a = [x + 1 for x in [1,2,3]]
print(a)
# [2,3,4]
# tuple
a = tuple(x + 1 for x in [1,2,3])
print(a)
# (2,3,4)
С генератором, что удобно это то, что генератор будет выполняться по элементно при необходиомсти. Что может быть важно при работе например с большим файлом.
# например нам нужно прочитать файл построчно и убрать из каждой строки
# переносы символов и пустые строки
with open("file.txt", "r") as source:
lines = (x.strip() for x in source if x.strip())
# теперь у нас есть генератор lines, который еще ничего не сделал,
# а делать он будет когда мы захотим проитерировать по нему
# и делать будет по строчно.
Чаще всего включения получаются горадо понятнее чем применение map и filter
# Перепишем построчно один файл в другой без загрузки всего файла в ОЗУ.
# А также применим фильтр по длине строки
with open("source.txt", "r") as source, open("dest.txt", "w") as dest:
_ = tuple(dest.write(x) for x in source if len(x) < 10)
# Перепишем построчно один файл в другой без загрузки всего файла в ОЗУ.
# А также применим фильтр по длине строки
with open("source.txt", "r") as source, open("dest.txt", "w") as dest:
_ = tuple(map(dest.write, filter(lambda x: len(x) < 10, source)))
map и filter ленивые функции возвращающие генератор, который еще ничего не сделал. генератор итерируется только один раз и его нужно проитерировать для получения результатов.
Answered by alex on December 16, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP