Size: a a a

Python — вакансии и аналитика

2017 May 30

I

I in Python — вакансии и аналитика
Не знал, что в Python аргументы создаются один раз, интересно почему так. Это же трэшь
источник

СВ

Сергей Волков in Python — вакансии и аналитика
I
1. Производительность(аргумент не создается заново каждый раз)
2. Можно использовать для таких вещей, как кэширование, например
Поправьте, если неправ
def f(a, b, cache={}):

  if a in cache:

   return cache[a]

  else:

    cache[a] = somefunction(a, b)

    return cache[a]
Это причина или следствие такого решения?
источник

М

Максим in Python — вакансии и аналитика
Сергей Волков
Это причина или следствие такого решения?
Причина - пункт 1. Следствие - пункт 2.
источник

М

Максим in Python — вакансии и аналитика
Но как кеш имхо перебор использовать. Где-то используют для оптимизации выделения памяти. Под объекты в параметрах память выделяется заранее.
источник

I

I in Python — вакансии и аналитика
Почему перебор, кстати?
источник

СВ

Сергей Волков in Python — вакансии и аналитика
Максим
Но как кеш имхо перебор использовать. Где-то используют для оптимизации выделения памяти. Под объекты в параметрах память выделяется заранее.
Я думал, что сначала смотрят в сторону __slots__ в этом случае
источник

М

Максим in Python — вакансии и аналитика
__slots__

вроде же только для объектов?
источник

М

Максим in Python — вакансии и аналитика
Сергей Волков
Я думал, что сначала смотрят в сторону __slots__ в этом случае
Это сюда
источник

MR

Maxim Radyukov in Python — вакансии и аналитика
I
Не знал, что в Python аргументы создаются один раз, интересно почему так. Это же трэшь
ПОтому что в Python все объекты передаются по ссылке. В данном случае вы кладете в аргумент по-умолчанию ссылку на объект. И в итоге это один и тот же объет
источник

СВ

Сергей Волков in Python — вакансии и аналитика
Максим
__slots__

вроде же только для объектов?
Я про оптимизацию памяти
источник

E

Eldar in Python — вакансии и аналитика
Maxim Radyukov
ПОтому что в Python все объекты передаются по ссылке. В данном случае вы кладете в аргумент по-умолчанию ссылку на объект. И в итоге это один и тот же объет
что-то я не очень уверен насчет интов
источник

I

I in Python — вакансии и аналитика
Инты тоже :
In [15]: def f(a = 5):
   ...:     print(id(a))
   ...:

In [16]: f()
140608931895480

In [17]: f()
140608931895480
источник

AS

Anton Sychugov in Python — вакансии и аналитика
I
Инты тоже :
In [15]: def f(a = 5):
   ...:     print(id(a))
   ...:

In [16]: f()
140608931895480

In [17]: f()
140608931895480
мелкие инты кэшируются
источник

I

I in Python — вакансии и аналитика
Да, аргумент. Но для больших тоже должно работать
источник

AS

Anton Sychugov in Python — вакансии и аналитика
попробууй побольше число взять
источник

I

I in Python — вакансии и аналитика
In [18]: def f(a = 10**10):
   ...:     print(id(a))
   ...:
   ...:

In [19]: f()
140608968678376

In [20]: f()
140608968678376
источник

AS

Anton Sychugov in Python — вакансии и аналитика
да, вспомнил, что питоне все по ссылке, просто не все типы изменяемые
источник

AS

Anton Sychugov in Python — вакансии и аналитика
I
In [18]: def f(a = 10**10):
   ...:     print(id(a))
   ...:
   ...:

In [19]: f()
140608968678376

In [20]: f()
140608968678376
не пойдет
источник

AS

Anton Sychugov in Python — вакансии и аналитика
дефолтный аргумент создается один раз
источник

AS

Anton Sychugov in Python — вакансии и аналитика
это одно и то же число
источник