Рубрики
Без рубрики

Устранения Python для разработчиков PHP

Изучите основы пониманий Python по сравнению с массивами PHP. Теги с Python, PHP, WebDev.

Этот пост был первоначально опубликован в stevemerc.com

При перемещении от PHP в Python ваш опыт со многими из основных языковых функций и конструкций легко переносится. Конечно, синтаксис отличается, но не радикально так. Такие вещи, такие как Loop Constres, основные структуры данных и даже OOP не требуют долго, чтобы почувствовать знакомые. Одной из областей, где это не правда, является ли списком Python и обременительно. PHP не имеет эквивалента здесь, и на мой взгляд, это область, где Python действительно сияет с точки зрения функциональности, простоты использования и краткости.

В этом посте я объясню, какой список и комплексное представление есть, и показывать в непосредственной близости от PHP и Python, чтобы продемонстрировать, как и почему вы используете их.

Во-первых, определение от официального Документы :

«Попределения списка предоставляют краткий способ создания списков. Общие приложения должны делать новые списки, где каждый элемент является результатом некоторых операций, применяемых к каждому элементу другой последовательности или нерешимости, или для создания подпоследовательности этих элементов, которые удовлетворяют определенному условию ».

Начнем с простого примера. Мы будем использовать массив ассоциативных массивов в PHP и список диктопов в Python, чтобы представлять (некоторые из) розового флойда.

PHP:

 'The Piper at the Gates of Dawn', 'year' => 1967],
            ['name' => 'Atom Heart Mother', 'year' => 1970],
            ['name' => 'The Dark Side of the Moon', 'year' => 1973],
            ['name' => 'Animals', 'year' => 1977],
            ['name' => 'The Wall', 'year' => 1979]];

Python:

albums = [{'name': 'The Piper at the Gates of Dawn', 'year': 1967},
            {'name': 'Atom Heart Mother', 'year': 1970},
            {'name': 'The Dark Side of the Moon', 'year': 1973},
            {'name': 'Animals', 'year': 1977},
            {'name': 'The Wall', 'year': 1979}]

Первое, что мы хотим сделать, это захватить список имена альбома:

PHP:

Каждый разработчик PHP должен быть тесно знаком с вышеупомянутым. Для разработчиков новых в Python естественно делать что-то подобное: Python:

album_names = []
for album in albums:
    album_names.append(album['name'])

Но есть легче (и, возможно, лучше) способ сделать это, используя список пометков:

Python:

album_names = [album['name'] for album in albums]

Попробуйте это в своем выборе, и вы получите:

['The Piper at the Gates of Dawn', 'Atom Heart Mother', 'The Dark Side of the Moon', 'Animals', 'The Wall']

В Python понимание списка принимает следующую форму:

[(expression) (for clause) (zero or more if statements)]

Скажем, мы хотели вернуть список списков, где каждый внутренний список содержит два элемента: первый год, а затем имя альбома:

PHP:

Python:

by_year_name = [[album['year'], album['name']] for album in albums]
# [[1967, 'The Piper at the Gates of Dawn'], [1970, 'Atom Heart Mother'], [1973, 'The Dark Side of the Moon'], [1977, 'Animals'], [1979, 'The Wall']]

Только хочу, чтобы альбомы выпущены после 1970 года?

PHP:

 1970) {
        return [$album['year'], $album['name']];
    }
}, $albums);

Python:

filtered = [[album['year'], album['name']] for album in albums if album['year'] > 1970]
# [[1973, 'The Dark Side of the Moon'], [1977, 'Animals'], [1979, 'The Wall']]

Не нравится «стена»?

PHP:

 1970 && $album['name'] != 'The Wall') {
        return [$album['year'], $album['name']];
    }
}, $albums);

Python:

# We'll move the if statements to a new line for the sake of readability
filtered = [[album['year'], album['name']] for album in albums
            if album['year'] > 1970 and album['name'] != 'The Wall']
# [[1973, 'The Dark Side of the Moon'], [1977, 'Animals']]

К настоящему времени вы должны увидеть, насколько более разряжены примеры Python по сравнению с PHP. Это продолжает проводить истину, поскольку ваша логика становится более сложной.

Итак, что такое обременительные понятия? Оказывается, что они похожи на состав списка, но вместо этого создают диктографические (шокирующие, я знаю.)

Давайте индексируем альбомы к году, но только для тех, которые были освобождены до 1973 года:

PHP:

Python:

indexed = {album['year']: album['name'] for album in albums if album['year'] < 1973}
# {1970: 'Atom Heart Mother', 1967: 'The Piper at the Gates of Dawn'}

Синтаксис может выглядеть по-другому, но все равно следует за форму:

[(expression) (for clause) (zero or more if statements)]

Вы можете работать с дикторами в списке по достоинствами и наоборот. Вернемся в исходный список диктопов, но с верхней версией имени альбома:

uppercased = [{'name': album['name'].upper(), 'year': album['year']} for album in albums]
# [{'name': 'THE PIPER AT THE GATES OF DAWN', 'year': 1967}, {'name': 'ATOM HEART MOTHER', 'year': 1970}, {'name': 'THE DARK SIDE OF THE MOON', 'year': 1973}, {'name': 'ANIMALS', 'year': 1977}, {'name': 'THE WALL', 'year': 1979}]

Важно помнить, это Символы снаружи понимания определяют, какой тип структуры данных вы получите? Отказ Квадратные брекеты используются для поручения списка, а вьющиеся скобки используются для обличных понятных.

Давайте закончим еще один пример: возвращение генератора:

# Notice how we use parens instead of square braces
album_gen = (album for album in albums if album['year'] > 1970)
#  at 0x109d4ff50>

Там еще есть еще больше, что вы можете сделать с помощью списка и нагруженных в общих чертах, которые за пределами объема этого поста. Я оставлю это как упражнение для читателя, чтобы играть вокруг (Подсказка: попробуйте вложенные вложения или выяснение, когда вы хотите использовать Map или фильтр вместо понимания.)

Список и комплексное понятие – это ужасная особенность Python, которую я желаю PHP имел. Они делают работу с коллекциями данных намного проще. Добавьте их в свой арсенал, и вы будете рады, что вы сделали!

👋 Наслаждался этим постом?

Присоединяйтесь к моему рассылка И следуй за мной в Twitter @mercatante Для большего количества контента такого.

Оригинал: “https://dev.to/mercatante/python-comprehensions-for-php-developers-4iid”