Чи ви впевнені, що знаєте Python?

6 хв. читання

В статті зібрані деякі найменш знані штучки і плюшки Python, які на перший погляд, здаються нереальними.


Як добре очистити список?

Для прикладу, у вас є список, змінну якого ви хочете використати повторно, або видалити всі елементи з нього(очистити). Можна зробити так:

>>> del li

Або так:

>>> del li[:]

Дехто подумає, що варто зробити так:

>>> li = []

Хоча li = [] зробить список порожнім, проте, насправді це створення нового об'єкту списку, а попередній буде далі зберігатись в пам'яті.

А тепер давайте пограємось з інтерпретатором, щоб мати краще уявлення про те що відбувається:

>>> li = [1, 2, 3, 4, 5]
>>> li2 = li
>>> li2
[1, 2, 3, 4, 5]
>>> del li[:]
>>> li
[]
>>> li2
[]

>>> li1 = [1, 3, 5]
>>> li3 = li1
>>> li3
[1, 3, 5]
>>> li1
[1, 3, 5]
>>> li1 = []
>>> li1
[]
>>> li3
[1, 3, 5]

>>> li4 = [1, 2]
>>> li5 = li4
>>> li5
[1, 2]
>>> del li4
>>> li4
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'li4' is not defined
>>> li5
[1, 2]

Ще одне застосування int() функції

Я використовував int() функцію лише для конвертації типу даних string в тип integer. Нариклад: number = int('1050')

Але сьогодні я дізнався, що функція може приймати ще й необов'язковий аргумент. Він конвертує будь-які числа в системі числення від 2 до 32 в десяткову систему числення.

Декілька прикладів:

>>> int('xyz', 36)
44027
>>> int('ff', 16)
255
>>> int('FF', 16)
255
>>> int('f', 16)
15
>>> int('10', 2)
2
>>> int('10')
10
>>> int('10', 10)
10

Python це просто! :blush:

З'єднання кількох словників в один

Якщо вам необхідно з'єднати кілька словників в один - використовуйте метод update(), який є дуже схожим на функцію extend(), що використовується для контенканації списків.

>>> dict_1 = {1: 'a', 2: 'b', 3: 'c'}
>>> dict_2 = {4: 'd', 5: 'e', 6: 'f'}
>>> dict_1
{1: 'a', 2: 'b', 3: 'c'}
>>> dict_2
{4: 'd', 5: 'e', 6: 'f'}
>>> dict_1.update(dict_2)
>>> dict_2
{4: 'd', 5: 'e', 6: 'f'}
>>> dict_1
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f'}

Якщо знаєте ще якісь цікаві способи контенканації словників - напишіть в коментарі.

Дзен Python

Якщо ви не розумієте, про що мова, то відкрийте інтерпретатор, та імпортуйте модуль this: import this. Прочитайте вивід. :)

Цікавий спосіб викликати функцію

Запустіть цей код:

def fibonacci(x):   
    if x < 2: return 1
    return (fibonacci(x-2) + fibonacci(x-1))
   
def factorial(x):
    if x < 2: return 1
    return (x * factorial(x-1))
   
def main():      
    funcs = [fibonacci, factorial]
    n = 10
    for i in range(len(funcs)):       
        print funcs[i](n)       
   
main()

Копіюваня двох списків

Новачки, для створення ще одного, такого самого списку, роблять так:

listB = listA

Але тут виникає проблема: якщо ви змінюєте якийсь елемент першого списку, другий список також зміниться автоматично, оскільки він посилається на перший. Тому краще робити так:

listB = []
listB.extend(listA)

Трошки експерименту:

>>> listA = [1, 2, 3, 4, 5]
>>> listB = listA
>>> listC = []
>>> listC.extend(listA)
>>> listB
[1, 2, 3, 4, 5]
>>> listC
[1, 2, 3, 4, 5]
>>> listA
[1, 2, 3, 4, 5]
>>> listB[4] = 0
>>> listB
[1, 2, 3, 4, 0] # Увага
>>> listA
[1, 2, 3, 4, 0] # Увага
>>> listC
[1, 2, 3, 4, 5]
>>> listC[4] = 10
>>> listC
[1, 2, 3, 4, 10] # Увага
>>> listA
[1, 2, 3, 4, 0]
>>> listB
[1, 2, 3, 4, 0]
>>> 

Що повертає функція pow()? integer чи float?

>>> from math import pow
>>> x = pow(5, 2)
>>> x
25.0

А тепер перезапустіть інтерпретатор, і виконайте наступний код:

>>> a = 5
>>> x = pow(a, 2)
>>> x
25
>>> type(x)
<type 'int'="">

Чудово, чи не так?

Видалення дублікатів з списку

Для початківців буває складно видалити всі дублікати елементів списку. В Python це можна реалізувати кількома способами. Один з них: створюємо set (детальніше, що таке set ми розглядали в цій статті) списку, а потім список сету :

myList = list(set(myList))

Ось так:

>>> myList = [1, 2, 3, 3, 2, 2, 4, 5, 5]
>>> myList
[1, 2, 3, 3, 2, 2, 4, 5, 5]
>>> myList = list(set(myList))
>>> myList
[1, 2, 3, 4, 5]
>>>

Напишіть, будь ласка, в коментарях, який спосіб використовуєте ви?

Список списків(вкладений список)

Погляньте на цей код:

>>>visited = [[False]*4]*4
>>>visited[0][1] = True
>>>print visited
>>> [[False, True, False, False], [False, True, False, False], [False, True, False, False], [False, True, False, False]]

Бачите проблему? Кожен другий елемент кладених списків змінився на True. Це означає, що команда [[False]*4]*4 створює списки, які містять посилання на один і той же список ('[False, False, False, False]'). Це можна уникнути, наприклад так:

>>> n = 4
>>> m = 4
>>> visited = []
>>> for x in xrange(n):
...      visited.append([False] * m)
... 
>>> visited
[[False, False, False, False], [False, False, False, False], [False, False, False, False], [False, False, False, False]]
>>> visited[0][1] = True
>>> visited
[[False, True, False, False], [False, False, False, False], [False, False, False, False], [False, False, False, False]]

Endswith

Функція, що перевіряє чим закінчується певний рядок.

fname = 'movie.avi'
if fname.endswith('avi') or fname.endswith('mp4'):
    print("It's a movie.")

Функція також може приймати аргументом тюпл:

fname = 'movie.avi'
if fname.endswith(('avi', 'mp4')):
    print("It's a movie.")

Так само працює функція startswith.


Більшість прикладів взято з сайту love-python, а також звідси.

Якщо знаєте цікаві штучки в Python - напишіть, будь ласка, в коментарях.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 6.2K
Приєднався: 7 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація