Новые достижения в переработке литий-ионных аккумуляторов
Новые достижения в переработке литий-ионных аккумуляторов
Мировой спрос на литий-ионные аккумуляторы растет экспоненциально, и прогнозируются критические точки перегиба, поскольку спрос может даже превысить поставки ключевых компонентов аккумуляторов и сырье.
Ожидается, что к 2027 году мировой рынок электромобилей вырастет до 858 миллиардов долларов, работающих на литий-ионных батареях. Тем не менее, считается, что только 5% литий-ионных аккумуляторов перерабатываются во всем мире. Исторически переработка литий-ионных аккумуляторов была ограничена неустойчивыми ценами на сырье, отсутствием заводов по переработке и отсутствием правил. Однако прогресс в методах переработки, высокий потенциал роста и фиксированное количество редких металлов сделали переработку более привлекательной, поскольку к 2030 году прогнозируемый размер рынка может достичь 13 миллиардов долларов9.0005
Текущие методы переработки
В настоящее время существует три основных типа методов переработки аккумуляторов (рис. 1) с сочетанием гидрометаллургии и пирометаллургии в качестве доминирующих форм переработки. Количество исследований и патентных публикаций в области гидрометаллургии и пирометаллургии выросло в геометрической прогрессии из-за более низкой стоимости и сложности (рис. 2). Гидрометаллургия использует растворы (в основном водные) для извлечения и выделения металлов из аккумуляторных батарей. Пирометаллургия использует тепло для преобразования оксидов металлов, используемых в материалах аккумуляторов, в металлы или соединения металлов. Прямая переработка — это удаление катодного материала для повторного использования или восстановления.
Рисунок 1Рисунок 2Почему прямая переработка лучше всего
Прямое удаление катодного материала для повторного использования или восстановления является идеальным решением, поскольку позволяет переработчикам сохранять неповрежденными кристаллические структуры с меньшими затратами на энергию, реагенты и фиксированные средства. Однако это требует больших трудозатрат и более высокого порога для хороших условий утилизации батарей. До недавнего времени ключевыми проблемами, препятствовавшими переработке литий-ионных аккумуляторов, были отсутствие единообразия в конструкциях аккумуляторов и большие усилия, которые требуются в гидро- и пироэнергетике для преобразования аккумуляторов в металлическое сырье. В недавней статье освещается метод, который обеспечивает рабочие катодные материалы, ранее не обеспечиваемые современными методами переработки.
Новый подход к прямой переработке:
Недавно Чжэн Лян, Гуанминь Чжоу, Хуэй-Минг Ченг и их коллеги описали один такой метод в Журнале Американского химического общества. Иодид лития (LiI) и гидроксид лития (LiOH) были объединены в эвтектическую смесь, которая плавится при более низкой температуре, чем любая из этих солей по отдельности — при 200°C. В результате смесь становится жидкой при более доступных температурах.
В то время как емкость аккумуляторов, изготовленных из отремонтированного материала, полностью не восстановилась, последовательный нагрев эвтектической смесью при 200°С в течение 3 часов с последующим нагревом до 850°С в течение 2 часов. Однако, когда Co 2 O 3 и MnO 2 были добавлены в эвтектическую смесь, в результате двухстадийного процесса был получен восстановленный NMC523, который имел характеристики и кристаллическую структуру, сравнимые с характеристиками и кристаллической структурой вновь полученного материала.
Этот подход предлагает способ восстановления катодов литий-ионных аккумуляторов до полной функциональности при использовании меньшего количества энергии и ресурсов, чем при свежем производстве. Если изношенные аккумуляторные материалы вернутся к полной функциональности по более низкой цене, их можно будет продавать с гораздо большей маржой, чем металлы или оксиды металлов, изготовленные с использованием других, более дорогостоящих технологий.
Проблемы
Подход, разработанный Liang et al. однако не без проблем. Процедура требует разборки, а затем повторной сборки батарей. Сложность и отсутствие единообразия в конструкциях аккумуляторов и составе катодов являются препятствиями для переработки аккумуляторов в целом. Несмотря на то, что с использованием пирометаллургии можно переработать множество различных типов батарей, прямая переработка и гидрометаллургические процессы требуют сортировки различных типов батарей и безопасной разборки батарей. Состав и конструкция батареи должны быть указаны и закодированы на батареях, чтобы сделать возможной прямую переработку. Разборка аккумуляторов обычной конструкции была бы проще, однако, учитывая диапазон применений литий-ионных аккумуляторов, это может оказаться невозможным.
Глядя в будущее
Впереди критический переломный момент для литий-ионных аккумуляторов, поскольку спрос может превысить предложение основных металлов, поэтому переработка должна сыграть решающую роль в преодолении этого разрыва. Сохранение ресурсов, воздействие на окружающую среду и экономическая эффективность станут ключевыми факторами ускорения инноваций в будущем.
Хотя это недавнее исследование не предлагает коммерческого подхода к регенерации и прямой переработке литий-ионных аккумуляторов, оно показывает, что эта практика технически жизнеспособна. Этот подход отличается от более ранних методов прямой переработки использованием эвтектических систем, а не гидротермальных методов. Коммерчески жизнеспособный метод прямой переработки повысит безопасность поставок компонентов литий-ионных аккумуляторов, будет способствовать их устойчивости в качестве альтернативы жидкому топливу для хранения энергии и послужит важнейшим инструментом снижения выбросов CO 9 .0021 2 выбросы от людей, смягчающие изменение климата. Узнайте больше о новых тенденциях в области переработки литий-ионных аккумуляторов в нашем недавнем отчете.
Передовой опыт форматирования строк в Python — Real Python
Смотреть сейчас Это руководство содержит соответствующий видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным учебным пособием, чтобы углубить свое понимание: Python String Formatting Tips & Best Practices
Помните дзен Python и как должен быть «один очевидный способ сделать что-то в Python»? Вы можете почесать голову, когда узнаете, что их 9. 0050 четыре основных способа форматирования строк в Python.
В этом руководстве вы изучите четыре основных подхода к форматированию строк в Python, а также их сильные и слабые стороны. Вы также получите простое эмпирическое правило, как выбрать наилучший подход к форматированию строк общего назначения в ваших собственных программах.
Давайте начнем, нам еще многое предстоит рассказать. Чтобы получить простой игрушечный пример для экспериментов, давайте предположим, что у вас есть следующие переменные (или на самом деле константы) для работы:
>>>
>>> номер ошибки = 50159747054 >>> имя = 'Боб'
На основе этих переменных вы хотите сгенерировать выходную строку, содержащую простое сообщение об ошибке:
>>>
'Эй, Боб, есть ошибка 0xbadc0ffee!'
Эта ошибка действительно может испортить разработчику утро понедельника… Но мы здесь, чтобы обсудить форматирование строк. Итак, приступим к работе.
#1 «Старый стиль» форматирования строки (оператор %)
Строки в Python имеют уникальную встроенную операцию, доступ к которой можно получить с помощью %
оператор. Это позволяет очень легко выполнять простое позиционное форматирование. Если вы когда-либо работали с функцией в стиле printf
на C, вы сразу поймете, как это работает. Вот простой пример:
>>>
>>> 'Привет, %s' % имя "Привет, Боб"
Здесь я использую спецификатор формата %s
, чтобы указать Python, где заменить значение name
, представленное в виде строки.
Существуют и другие описатели формата, позволяющие управлять выходным форматом. Например, можно преобразовывать числа в шестнадцатеричное представление или добавлять пробелы для создания красиво отформатированных таблиц и отчетов. (См. Python Docs: «Форматирование строк в стиле printf».)
Здесь вы можете использовать спецификатор формата %x
, чтобы преобразовать значение int
в строку и представить его как шестнадцатеричное число:
>>>
>>> '%x' % ошибка 'badc0ffee'
Синтаксис форматирования строки «старого стиля» немного изменится, если вы хотите сделать несколько замен в одной строке.
%
принимает только один аргумент, вам нужно заключить правую часть в кортеж, например:>>>
>>> 'Эй, %s, ошибка 0x%x!' % (имя, ошибка) «Эй, Боб, ошибка 0xbadc0ffee!»
Также можно ссылаться на подстановки переменных по имени в строке формата, если вы передадите сопоставление оператору %
:
>>>
>>> 'Эй, %(name)s, ошибка 0x%(errno)x!' % { ... "имя": имя, "ошибка": ошибка } «Эй, Боб, ошибка 0xbadc0ffee!»
Это упрощает обслуживание и изменение строк формата в будущем. Вам не нужно беспокоиться о том, чтобы порядок, в котором вы передаете значения, совпадал с порядком, в котором значения упоминаются в строке формата. Конечно, недостатком является то, что этот метод требует немного больше набора текста.
Я уверен, что вам было интересно, почему это форматирование в стиле printf
называется форматированием строки в «старом стиле». Технически оно было заменено форматированием «нового стиля» в Python 3, о котором мы поговорим далее.
Удалить рекламу
#2 Форматирование строки «Новый стиль» (
str.format
) В Python 3 появился новый способ форматирования строк, который позже был перенесен в Python 2.7. Это форматирование строки «нового стиля» избавляет от %
-специальный синтаксис оператора и делает синтаксис форматирования строк более регулярным. Форматирование теперь обрабатывается вызовом .format()
для строкового объекта.
Вы можете использовать format()
для простого позиционного форматирования, точно так же, как вы могли бы использовать форматирование «старого стиля»:
>>>
>>> 'Здравствуйте, {}'.format(name) «Привет, Боб»
Или вы можете ссылаться на свои подстановки переменных по имени и использовать их в любом порядке. Это довольно мощная функция, поскольку она позволяет изменить порядок отображения без изменения аргументов, переданных в 9.0072 формат() :
>>>
>>> 'Эй, {имя}, ошибка 0x{errno:x}!'.format( ... имя=имя, errno=errno) «Эй, Боб, ошибка 0xbadc0ffee!»
Это также показывает, что синтаксис для форматирования переменной int
как шестнадцатеричной строки изменился. Теперь вам нужно передать спецификацию формата, добавив суффикс :x
. Синтаксис строки формата стал более мощным, не усложняя более простые варианты использования. Стоит прочитать об этом мини-языке форматирования строк в документации Python.
В Python 3 это форматирование строки в «новом стиле» предпочтительнее форматирования в стиле %
. Несмотря на то, что форматирование в «старом стиле» было уменьшено, оно не устарело. Он по-прежнему поддерживается в последних версиях Python. Согласно этому обсуждению в списке адресов электронной почты разработчиков Python и этой проблеме в системе отслеживания ошибок разработчиков Python, %
-formatting будет существовать еще долгое время.
Тем не менее, официальная документация Python 3 не то чтобы рекомендует форматирование в «старом стиле» или говорит о нем слишком тепло:
«Описанные здесь операции форматирования демонстрируют ряд особенностей, которые приводят к ряду распространенных ошибок (например, неправильному отображению кортежей и словарей). Использование более новых форматированных строковых литералов или интерфейса str.format() помогает избежать этих ошибок. Эти альтернативы также обеспечивают более мощные, гибкие и расширяемые подходы к форматированию текста». (Источник)
Вот почему я лично стараюсь придерживаться str.format
для продвижения нового кода. Начиная с Python 3.6, есть еще один способ форматирования строк. Обо всем этом я расскажу в следующем разделе.
#3 Интерполяция строк / f-строки (Python 3.6+)
В Python 3.6 добавлен новый подход к форматированию строк, называемый форматированными строковыми литералами или «f-строками». Этот новый способ форматирования строк позволяет использовать встроенные выражения Python внутри строковых констант. Вот простой пример, чтобы дать вам представление об этой функции:
>>>
>>> f'Привет, {имя}!' — Привет, Боб!
Как видите, перед строковой константой ставится буква «9».0072 f — отсюда и название «f-строки». Этот новый синтаксис форматирования является мощным. Поскольку вы можете встраивать произвольные выражения Python, вы даже можете выполнять с ним встроенные арифметические операции. Посмотрите этот пример:
>>>
>>> а = 5 >>> б = 10 >>> f'Пять плюс десять равно {a + b}, а не {2 * (a + b)}.' «Пять плюс десять — это 15, а не 30».
Форматированные строковые литералы — это функция парсера Python, которая преобразует f-строки в ряд строковых констант и выражений. Затем они соединяются, чтобы построить окончательную строку.
Представьте, что у вас есть следующая функция приветствия()
, которая содержит f-строку:
>>>
>>> приветствие (имя, вопрос): ... return f"Привет, {имя}! Как дела, {вопрос}?" ... >>> приветствовать('Боб', 'уходит') "Привет, Боб! Как дела?"
Когда вы разберете функцию и проверите, что происходит за кулисами, вы увидите, что f-строка в функции трансформируется во что-то похожее на следующее:
>>>
>>> приветствие (имя, вопрос): ... вернуть "Здравствуйте, " + имя + "! Как дела" + вопрос + "?"
Реальная реализация немного быстрее, потому что она использует код операции BUILD_STRING
в качестве оптимизации. Но функционально они одинаковые:
>>>
>>> импорт >>> dis.dis(приветствовать) 2 0 LOAD_CONST 1 ('Привет,') 2 LOAD_FAST 0 (имя) 4 ФОРМАТ_ЗНАЧЕНИЕ 0 6 LOAD_CONST 2 ("! Как дела") 8 LOAD_FAST 1 (вопрос) 10 ФОРМАТ_ЗНАЧЕНИЕ 0 12 LOAD_CONST 3 ('?') 14 BUILD_STRING 5 16 ВОЗВРАТ_ЗНАЧЕНИЕ
Строковые литералы также поддерживают существующий синтаксис строки формата метода str. format()
. Это позволяет решить те же проблемы с форматированием, которые мы обсуждали в предыдущих двух разделах:
>>>
>>> f"Эй, {имя}, {errno:#x} ошибка!" "Привет, Боб, ошибка 0xbadc0ffee!"
Новые форматированные строковые литералы Python похожи на шаблонные литералы JavaScript, добавленные в ES2015. Я думаю, что это неплохое дополнение к Python, и я уже начал использовать их в своей повседневной работе (Python 3). Вы можете узнать больше о форматированных строковых литералах в нашем подробном руководстве по f-строкам Python.
Удалить рекламу
#4 Строки шаблона (Стандартная библиотека)
Давайте рассмотрим пример простого приветствия:
>>>
>>> из шаблона импорта строки >>> t = Template('Эй, $name!') >>> t. substitute(имя=имя) — Эй, Боб!
Здесь вы видите, что нам нужно импортировать класс Template
из встроенного в Python модуля string
. Строки шаблонов не являются основной функцией языка, но они предоставляются модулем string
в стандартной библиотеке.
Еще одно отличие состоит в том, что строки шаблона не допускают спецификаторов формата. Таким образом, чтобы предыдущий пример строки ошибки работал, вам нужно вручную преобразовать номер ошибки int
в шестнадцатеричную строку:
>>>
>>> templ_string = 'Эй, $name, произошла ошибка $error!' >>> Шаблон(templ_string).substitute( ... имя=имя, ошибка=шестнадцатеричная(ошибка)) «Эй, Боб, ошибка 0xbadc0ffee!»
Отлично сработало.
Итак, когда вы должны использовать строки шаблона в своих программах Python? На мой взгляд, лучше всего использовать шаблонные строки, когда вы работаете с форматированными строками, сгенерированными пользователями вашей программы. Из-за меньшей сложности шаблонные строки являются более безопасным выбором.
Более сложные мини-языки форматирования других методов форматирования строк могут привести к уязвимостям безопасности ваших программ. Например, строки формата могут обращаться к произвольным переменным в вашей программе.
Это означает, что если злонамеренный пользователь может указать строку формата, он потенциально может украсть секретные ключи и другую конфиденциальную информацию! Вот простое доказательство того, как эта атака может быть использована против вашего кода:
.>>>
>>> # Это наш супер секретный ключ: >>> СЕКРЕТ = 'это-секрет' >>> Ошибка класса: ... защита __init__(я): ... проходить >>> # Злоумышленник может создать строку формата, >>> # может читать данные из глобального пространства имен: >>> user_input = '{ошибка.__init__.__globals__[СЕКРЕТ]}' >>> # Это позволяет им извлекать конфиденциальную информацию, >>> # как секретный ключ: >>> ошибка = ошибка() >>> user_input. format(ошибка=ошибка) 'Это секрет'
Посмотрите, как гипотетический злоумышленник смог извлечь нашу секретную строку, обратившись к словарю __globals__
из строки вредоносного формата? Страшно, да? Строки шаблона закрывают этот вектор атаки. Это делает их более безопасным выбором, если вы обрабатываете строки формата, созданные на основе пользовательского ввода:
>>>
>>> user_input = '${error.__init__.__globals__[СЕКРЕТ]}' >>> Шаблон(user_input).substitute(ошибка=ошибка) ЗначениеОшибка: "Недопустимый заполнитель в строке: строка 1, столбец 1"
Какой метод форматирования строк следует использовать?
Я полностью понимаю, что наличие такого большого выбора в том, как форматировать ваши строки в Python, может показаться очень запутанным. Это отличная подсказка, чтобы разобрать эту удобную блок-схему инфографики, которую я собрал для вас:
Эмпирическое правило форматирования строк Python (Изображение: нажмите, чтобы твитнуть)Эта блок-схема основана на практическом правиле, которое я применяю, когда пишу Python:
Полезное правило форматирования строк Python: Если ваши строки формата предоставляются пользователем, используйте строки шаблона (#4), чтобы избежать проблем с безопасностью.