Pull to refresh

Comments 36

Объединяем два словаря:

def merge(dic1,dic2):
    dic3=dic1.copy()
    dic3.update(dic2)
    return dic3
dic1={1:"hello", 2:"world"}
dic2={3:"Python", 4:"Programming"}
merge(dic1,dic2) # {1: 'hello', 2: 'world', 3: 'Python', 4: 'Programming'}


Не проще так:

{"1": 1} | {"2": 2}  # Python 3.9

Менее читаемо, но будет работать во всех версиях:

{**d1, **d2}

Иногда, достаточно использовать MappingProxyType для доступа к объединению словарей.

10. Занятая память

Пример позволяет получить объём памяти, используемой любой переменной в Python.

Не любой, не рекурсивная функция
import sys
var1=[x for x in range(1000000)]
var2=[var1]
print(sys.getsizeof(var1)) #8448728
print(sys.getsizeof(var2)) #64

Очевидно в var2 кладется ссылка на var1, так что все правильно.

Простите, а пример 5 будет работать? Просто я не питонист, и, наверное, чего-то не понимаю...

код из примера
import time
start_time= time.time()
def fun():
    a=2
    b=3
    c=a+b
end_time= time.time()
fun()
timetaken = end_time - start_time
print("Your program takes: ", timetaken) # 0.0345
Будет, но не так как планировалось :)
end_time= time.time() после вызова функции должно быть
UFO just landed and posted this here

А ещё лучше внутри, тк вызов функции — тоже время.

А еще лучше использовать специально предназначенный для измерения интервалов, неубывающий, имеющий максимальную доступную точность time.perf_counter() [1]

[1]: docs.python.org/3/library/time.html#time.perf_counter

А ещё лучше вообще вспомнить про декораторы.

import time

def timed(func):
  def wrapper(*args, **kwargs):
    st = time.perf_counter()
    result = func(*args, **kwargs)
    en = time.perf_counter()
    return (en - st, result)
  return wrapper

@timed
def fun():
    a=2
    b=3
    c=a+b

timetaken, result = fun()
print("Your program takes: ", timetaken) # 0.0345
И лучше
start_time = time.сtime()

Не будет. Вычисление end_time надо ниже на строку опустить

2. Первая буква в верхнем регистре
Этот пример используется для превращения каждой первой буквы символов строки в прописную букву. Он работает со строкой из одного или нескольких символов и будет полезен при анализе текста или записи данных в файл и т.п.
def capitalize(String):
    return String.title()
capitalize("shop") # [Shop]
capitalize("python programming") # [Python Programming]
capitalize("how are you!") # [How Are You!]
99. Получение негативного числа, этот пример будет полезен любителям негатива:
def negative(num):
    return -num
negative(42) # [-42]
Корректнее назвать функцию invert т.к. функция не возвращает негативное значение а инвертирует.
print(negative(-42)) # [42]
Я даже не представляю, при каких обстоятельствах можно додуматься до того, чтобы написать такую функцию и потом опубликовать ее в статье с примерами кода на Python.
И что полезного найдёт школьник в вашем комментарии? Он сразу поймёт что вы имели в виду? Пояснили бы, чтобы школьник понял.
7. Проверка дубликатов

Это самый быстрый способ проверки наличия повторяющихся значений в списке.

def check_duplicate(lst):
    return len(lst) != len(set(lst))
...


Есть у меня сомнения по поводу «самый быстрый»

O(n) времени займет, если совсем придираться, то можно и за O(k) написать, где k — индекс первого дубликата, а в теории быстрее, чем за линейное время все равно не напишешь, поэтому чисто технически он все равно самый быстрый


def has_duplicates(lst):
    unique = set()
    for value in lst:
        if value in unique:
            return True
        unique.add(value)
    return False

Так построение сета же N logN, разве нет?

нет, сэт — это словарь, где ключами являются значения из этого сэта, то есть


set('Hello', 'world')

==


s = {
'Hello': True,
'World': True
}

Добавление значения в сет занимает О(1) времени, соотвественно для k элементов это займет O(k) времени

О, а я-то думал, что в питоне set сделан через деревья.


И тем не менее, для хеш-таблиц вставка является О(1) только в среднем. В худшем случае (если понадобится расширять) вставка будет О(к), где к — количество элементов на данный момент. Не совсем вижу сейчас, как оценить время в таком случаен, но потенциально не О(к).

Какие-то сомнительные примеры

Не snake case, большинство примеров однострочные

*facepalm*

Серьёзно? Документацию по Пайтону надо перепечатывать в виде примеров? А чего бы с азов не начать? Например:

def eq(a, b):
    return a == b

Даже странно, что фантазии только на 22 примера хватило

Блин, это Хабр и сюда сейчас постят «n полезных примеров кода на Y языке программирования»? Таких статей уже хоть жопой жуй, особенно по питону, и я бы еще понял, если бы тут были какие-то хитрости, о которых знает не каждый разработчик, но тут же просто основы питона…
Пожалуйста, не вводите людей в заблуждение — это не полезные примеры кода, так как:
— Не соблюдаются правила именования переменных
— Не соблюдаются отступы
— Некоторые из примеров очевидно некорректные
— Для некоторых примеров существуют встроенные решение, и писать своё можно разве что из академического интереса, но никак не выдавать их за «полезные примеры»
Для вычисления времени выполнения кода можно просто в начале ячейки написать
%%time

Python — это не только Jupyter

5-й пример не вычисляет время выполнения, он вычисляет время объявления функции

И тем не менее уже публикуются копии статьи.

temofeev.ru/info/articles/22-poleznykh-primera-koda-na-python/

Просто фейспалм. Читаю, будто туториал от дестадовца.

Особенно проорал с 5 кода. И в правду, зачем нужен встроенный модуль timeto, можно же всё упороть и запороть.

Так и до ; недалеко

Sign up to leave a comment.