Архив автора: admin

Когда использовать import

И так, в предыдущем посте, было рассказано о минусах инструкции from и о том, что использование import более надежней и практичней. Поэтому речь пойдет о использовании import.


Единственное,  когда  необходимо  вместо  инструкции  from  использовать  инструкцию import, – когда требуется использовать одно и то же имя, присутствующее в двух разных модулях. Например, когда два файла по-разному определяют одно и то же имя:
# M.py

def func():
    …выполнить что-то одно…

# N.py

def func():
    …выполнить что-то другое…
и необходимо использовать обе версии имени в программе. В этом случае инструкцию from использовать нельзя, потому что в результате вы получите единственное имя в вашей области видимости:
# O.py

from M import func
from N import func     # Перезапишет имя, импортированное из модуля M
func()                 # Будет вызвана N.func
Зато  можно  использовать  инструкцию  import,  потому  что  включение  имени

вмещающего модуля сделает имена уникальными:

# O.py
 
import M, N    # Получить модуль целиком, а не отдельные имена
M.func()       # Теперь можно вызывать обе функции
N.func()       # Наличие имени модуля делает их уникальными
Этот случай достаточно необычен, поэтому вы вряд ли часто будете сталкиваться с ним на практике. Но если такая ситуация все-таки возникнет, инструкция import позволит вам избежать конфликта имен.
Фух, за день две статьи, спасибо за подписи, надеюсь количество увеличиться и увеличится количество статей. Ставим + , приглашаем друзей и комментируйте записи.

Автор: Няшный Человек
Дата публикации: 2014-05-25T11:42:00.002+03:00

Минусы инструкции from

Здравствуйте читатели. Ну что, вот вам еще очередная порция текста по программированию используя Python )
На этот раз речь пойдет о минусах использовании инструкции from.




 — У инструкции from менее явное отображение переменной (имя name несет меньше информации, чем module.name), поэтому некоторые пользователи Python  рекомендуют  использовать  инструкцию  import  вместо from. Но это иногда можно опровергнуть, так как такой использование from происходит довольно таки часто и без страшных последствий.

 — Инструкция from способна повреждать пространства имен, по крайней мере, в принципе – если использовать ее для импортирования переменных, когда существуют одноименные переменные в имеющейся области видимости, то эти переменные просто будут перезаписаны. Эта проблема отсутствует при использовании инструкции import, потому что доступ к содержимому импортируемого модуля возможен только через его имя (имя module.attr не конфликтует с именем attr в текущей области видимости). 
Пока вы понимаете и контролируете все, что может происходить при использовании инструкции from, во всем этом нет большой проблемы, особенно если импортируемые имена указываются явно (например, from module import x, y, z).

С другой стороны, инструкция from скрывает в себе более серьезные проблемы, когда используется в комбинации с функцией reload, так как импортированные имена могут ссылаться на предыдущие версии объектов. Кроме того, инструкция в форме from module import * действительно может повреждать пространства имен и затрудняет понимание имен, особенно когда она применяется более чем к одному файлу, – в этом случае нет никакого способа определить, какому модулю принадлежит то или иное имя, разве только выполнить поиск по файлам с исходными текстами. В действительности форма from * вставляет одно пространство имен в другое, что сводит на нет преимущества, которые несет возможность разделения пространств имен.

Пожалуй, лучший совет, который можн

изменяемый объект в аргументах

Тема замусолена до невозможности, но не удержался увидев код Request

def func(f, l=[]):
    l.append(f)
    return l

func является потенциально опасной. Смотрим что происходит при её использовании

>>> print(func(1))
[1]
>>> print(func(2))
[1, 2]


l ссылается на один и тот же объект, который все время и изменяется (вспоминаем концепцию python)

Решение очевидное — определить список в функции

Такое решение используется и в популярном фреймворке request

class Request(RequestHooksMixin):
    def __init__(self,
        method=None,
        url=None,
        headers=None,
        files=None,
        data=None,
        params=None,
        auth=None,
        cookies=None,
        hooks=None):

        # Default empty dicts for dict params.
        data = [] if data is None else data
        files = [] if files is None else files
        headers = {} if headers is None else headers
        params = {} if params is None else params
        hooks = {} if hooks is None else hooks

Ссылки

https://github.com/kennethreitz/requests/blob/master/requests/models.py

Автор: Евгений Курочкин

Медитация Художник своей жизни

Художник своей жизниВы давно рисовали? Просто так, от души…как рисуют дети, не особенно переживая, что они не умеют и у них что-то не получится. А ведь творчество раскрывает скрытые резервы и таланты, проявляя все самое лучшее, что есть в Вас. И сегодня у Вас будет возможность проявить себя и ощутить сполна в роли настоящего художника – Художника своей жизни!

Читать

Как поднять свой внутренний ресурс за 1 минуту?

бегущая по полюЕсли у Вас нет настроения, нет энергии, нет желания что-то делать, вероятно Вы испытываете нехватку жизненных сил — состояние словно «села батарейка».

Как можно быстро зарядить свою внутреннюю батарейку и поднять свой ресурс?

Для этого есть специальная формула У4П из 5 составляющих ее действий!

 

Читать

Разговор Души с Богом

Molitva Bogy— Алло, здравствуйте! Могу я поговорить с Богом?
— Здравствуйте! Соединяю!
— Здравствуй, Душа моя! Я внимательно слушаю тебя!
Господи, впереди Новый год! Прошу Тебя, исполни мои желания!
— Конечно, дорогая, все, что угодно! Но сначала, я тебя соединю с отделом исполненных желаний: постарайся понять, какие ты допускала ошибки в прошлом!
Читать