10 советов по эффективному программированию на Python!

Python
10 советов по эффективному программированию на Python!

Когда я впервые познакомился с языком Python, я понял, что Python отвечает всем требованиям, предъявляемым к языку программирования, когда вы учились в школе. Эффективные навыки программирования на языке python вызывают восторг у тех, кто в течение четырех лет изо всех сил пытался выучить c или c++. Языки высокого уровня, если вы не можете этого сделать, какой смысл быть продвинутым?

01 Поменять местами переменные

>>>a=3

>>>b=6

В этом случае, если вы хотите обмениваться переменными в C++, вам определенно нужна пустая переменная. А питону это не нужно, всего одна строчка, всем видно ясно

>>>a,b=b,a

>>>print(a)>>>6

>>>ptint(b)>>>5

02 Словарные понимания и наборы понятий

Большинство программистов на Python знают и используют генераторы списков. Если вы не знакомы с концепцией обработки списков, то обработка списков — это более короткий и лаконичный способ создания списка.

>>> some_list = [1, 2, 3, 4, 5]

>>> another_list = [ x + 1 for x in some_list ]

>>> another_list
[2, 3, 4, 5, 6]

Начиная с Python 3.1, мы можем использовать тот же синтаксис для создания наборов и таблиц словаря:

>>> # Set Comprehensions
>>> some_list = [1, 2, 3, 4, 5, 2, 5, 1, 4, 8]

>>> even_set = { x for x in some_list if x % 2 == 0 }

>>> even_set
set([8, 2, 4])

>>> # Dict Comprehensions

>>> d = { x: x % 2 == 0 for x in range(1, 11) }

>>> d
{1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False, 10: True}

В первом примере мы создаем набор с уникальными элементами на основе some_list, и набор содержит только четные числа. В примере со словарной таблицей мы создали ключ, представляющий собой целое число от 1 до 10, которое не повторяется, а значение является логическим, указывающим, является ли ключ четным числом. Еще одна вещь, на которую стоит обратить внимание, это буквальное обозначение множеств. Мы можем просто создать коллекцию следующим образом:

>>> my_set = {1, 2, 1, 2, 3, 4}

>>> my_set
set([1, 2, 3, 4])

Вместо использования встроенной функции set().

03 Используйте счетчик для подсчета объектов при подсчете

Это кажется очевидным, но часто забывается. Подсчет вещей — очень распространенная задача для большинства программистов, и в большинстве случаев не очень сложная — вот несколько способов сделать это проще.

В библиотеке коллекций Python есть встроенный подкласс класса dict, который предназначен для этого:

>>> from collections import Counter
>>> c = Counter( hello world )

>>> c
Counter({ l : 3,  o : 2,    : 1,  e : 1,  d : 1,  h : 1,  r : 1,  w : 1})

>>> c.most_common(2)
[( l , 3), ( o , 2)]

04 Красивая распечатка JSON

JSON — это очень хорошая форма сериализации данных, которая сегодня активно используется различными API и веб-сервисами. Используя встроенную в Python обработку json, строку JSON можно сделать читаемой до определенной степени, но когда встречаются большие данные, она отображается в виде длинной непрерывной строки, которую человеческому глазу трудно увидеть.

Чтобы сделать данные JSON более удобными, мы можем использовать параметр отступа для вывода красивого JSON. Это особенно полезно при интерактивном программировании или входе в консоль:

>>> import json

>>> print(json.dumps(data))  # No indention
{"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]}

>>> print(json.dumps(data, indent=2))  # With indention

{
  "status": "OK",
  "count": 2,
  "results": [

    {
      "age": 27,
      "name": "Oz",

      "lactose_intolerant": true
    },
    {
      "age": 29,

      "name": "Joe",
      "lactose_intolerant": false
    }
  ]

}

Кроме того, почти все остальное можно распечатать с помощью встроенного модуля pprint.

05 Решить FizzBuzz

Некоторое время назад Джефф Этвуд популяризировал простое упражнение по программированию под названием FizzBuzz, Вопрос цитируется следующим образом:

Напишите программу, которая печатает числа от 1 до 100, печатая «шипение» для чисел, кратных 3, «жужжание» для чисел, кратных 5, и «шипение» для чисел, кратных 3 и 5.

Вот короткое интересное решение этой проблемы:

for x in range(1,101):
    print"fizz"[x%3*len( fizz )::]+"buzz"[x%5*len( buzz )::] or x
    
06 if 语句在行内

print "Hello" if True else "World"
>>> Hello

07 Подключение

Последний способ ниже хорош при связывании двух разных типов объектов.

nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
print nfc + afc
>>> [ Packers ,  49ers ,  Ravens ,  Patriots ]

print str(1) + " world"
>>> 1 world

print `1` + " world"
>>> 1 world

print 1, "world"
>>> 1 world
print nfc, 1
>>> [ Packers ,  49ers ] 1

08 Численное сравнение

Это такая замечательная стенография, которую я редко встречал во многих языках.

x = 2
if 3 > x > 1:
   print x
>>> 2
if 1 < x > 0:
   print x
>>> 2

09 Итерация по двум спискам одновременно

nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
for teama, teamb in zip(nfc, afc):
     print teama + " vs. " + teamb
>>> Packers vs. Ravens
>>> 49ers vs. Patriots

10 Итерация списка с индексом

teams = ["Packers", "49ers", "Ravens", "Patriots"]
for index, team in enumerate(teams):
    print index, team
>>> 0 Packers
>>> 1 49ers
>>> 2 Ravens
>>> 3 Patriots