
Pavel
18.10.2016
10:18:50
моя мысль - снаружи навешивать на любой объект какой-то произвольное действие.
Например, если мне нужно постоянно считать элементы, которые делятся на какое-то число, то можно
sum(filter(lambda i: i%N, my_list))
или sum(i for i in my_list if i%N)
или в общем случае
def divisible_by(lst, N):
return (i for i in lst if i%N)
even_only = functools.partial(N=2)
sum(my_list.even_only())

Zart
18.10.2016
10:19:27
==0

Pavel
18.10.2016
10:19:39
просто этот фокус можно делать в шарпе, и мне реально нравится эта фича.

Cykooz
18.10.2016
11:04:44
В шарпе строгая типизация, как питон должен догадаться что можно примениить foo(...) для переменной, если в этом foo не указаны типы аргументов?

Google

Артем
18.10.2016
11:05:25
sum(i for i in my_list if i%N)
это сугубо питоновкая практика, никак не привыкну, и условие и сразу в лит и тут же сумм

Igor
18.10.2016
11:05:25
так название вроде вполне логичное, toUpperOnlyVowel

Pavel
18.10.2016
11:05:26

Igor
18.10.2016
11:05:45
можно применить только к строке. ну к юникоду. ну к байтам. не получилось - бросить эксепшн и ебись как хочешь

Pavel
18.10.2016
11:06:46
я же могу вызвать len(5). Упадёт, правда, но могу ведь, да?

Igor
18.10.2016
11:07:19
воооот!

Cykooz
18.10.2016
11:09:55
Вспоминается матра "Явное лучше не явного".

Pavel
18.10.2016
11:11:03
что вот? всё, что я предлагаю - добавить к возможностит писать foo(x, 5) ещё и x.foo(5). Для foo ничего не поменяется.
fluent interface будет удобно писать. my_list.filter().map().filter().group_by() Хотя, возможно в какой-нибудь руби это уже есть.

Cykooz
18.10.2016
11:14:38
По поводу явности C#. Когдя я на нём кодил лет 10 назад как то не думал об этом. Но год назад пришлось поковырятся с кодом на C# - дико бесило, что без подсказки умного IDE я не мог понять откуда в пространстве модуля берётся та или иная функция. В тексте есть только малоговорящие using и всё.

Pavel
18.10.2016
11:20:03

Roman
18.10.2016
11:51:26
в кортежах данные в виде констант? правильно понял?

Google

Igor
18.10.2016
11:55:35
не совсем, но если упростить, то можно и так выразиться
кортежи нельзя изменять
нельзя добавлять новые элементы в имеющийся кортеж, нельзя удалять элементы из него, нельзя заменять один элемент на другой
при этом
In [18]: tuple2 = (4, 5, 6)
In [19]: tuple1 = (1, 2, 3)
In [20]: tuple2 = (4, 5, 6)
In [21]: big_tuple = tuple1 + tuple2
In [22]: big_tuple
Out[22]: (1, 2, 3, 4, 5, 6)
In [23]: a = 5
In [24]: b = 2
In [25]: (a, b) = (b, a)
In [26]: a
Out[26]: 2
In [27]: b
Out[27]: 5
In [29]: q = [1, 2, 3]
In [30]: x = (q, 7, 8, 9)
In [31]: x
Out[31]: ([1, 2, 3], 7, 8, 9)
In [32]: q.append(4)
In [33]: x
Out[33]: ([1, 2, 3, 4], 7, 8, 9)
но это уже тонкости

Zart
18.10.2016
12:06:07
кортежи могут быть из мутабельных элементов
чтото мне не нравится то как магически вылез метод из ниоткуда

Igor
18.10.2016
12:10:05
почему?
разве в Нормальных Языках (типа шарпа и джавы) используют похожие на self костыли, чтобы обращаться к другим методам внутри класса?

Zart
18.10.2016
12:12:51
почему все считают селф костылём?
меня волшебный this всегда удивлял

Igor
18.10.2016
12:14:16
ыы, особенно всякие $this = $(this) в jquery еще

Zart
18.10.2016
12:14:27
ммм
откуда оно в жквери мне понятно
изза того как в жс привязка прототипов происходит

Cykooz
18.10.2016
12:19:19

Igor
18.10.2016
12:20:14
не понял((((
а @staticmethod или как там его - это не то?

Cykooz
18.10.2016
12:20:37
Нет не то

Zart
18.10.2016
12:20:50
чтото я не понял
ты просто хитровыебанно сделал принт

Cykooz
18.10.2016
12:21:05
Статикметод помечается декоратором @staticmethod

Zart
18.10.2016
12:21:11
причем тут метод без селф?

Cykooz
18.10.2016
12:21:42

Google

Zart
18.10.2016
12:21:46
весь этот пр_ крап и декоратор занимается тем что делает print foo.__name__
ты забыл del pr_name

Cykooz
18.10.2016
12:22:26
Ах тыж, точно

Zart
18.10.2016
12:22:32
потому что иначе мы получаем левый метод, который ничо ценного не делает
не, то что ты заюзал временную функцию - это всё к селфам отношения не имеет аще

Cykooz
18.10.2016
12:23:26
Ну как бы без self это нельзя было бы сделать вообще

Zart
18.10.2016
12:23:40
но да, когда я понял что классы в питоне состоят из suite, внутри которого может быть что угодно - я Просветлился

Cykooz
18.10.2016
12:23:41
т.к. любая вункция внутри класса считалась бы методом класса

Zart
18.10.2016
12:23:59
а, ты про это

Cykooz
18.10.2016
12:24:22
Кстати этот pr_name по моему без выебонов нельзя вызвать после инициализации класса

Zart
18.10.2016
12:24:39
я потом издевался - делал метакласс, который позволял определять всги приложения через синтаксис класса

Cykooz
18.10.2016
12:24:55
In [5]: A.pr_name(A)
TypeError: unbound method pr_name() must be called with A instance as first argument (got type instance instead)

Zart
18.10.2016
12:24:56
статикметодом объяви и всё ок

Cykooz
18.10.2016
12:25:17
In [3]: a = A()
In [4]: a.pr_name(a)
TypeError: pr_name() takes exactly 1 argument (2 given)

Zart
18.10.2016
12:25:18
pr_name = staticmethod(pr_name)

Igor
18.10.2016
12:25:24
знач я не хуйню подумал
In [2]: class Foo(object):
2 def test():
3 pass
4 print test.__name__
test
вот тебе без self :D

Cykooz
18.10.2016
12:26:15
В общем такую функцию можно нормально использовать только в момент создания класса

Google

Cykooz
18.10.2016
12:27:32
ну а че, то же самое ведь делает!
Что вы за print зацепились? Это просто как пример. Туда можно что угодно запихать что пихают в декораторы. Или вообще не декораторы, а сделать функцию для рантайм генерации методов класса по каким то параметрам.
Можно конечно тоже самое и через метаклассы сделать, но...

Zart
18.10.2016
12:28:18
class A:
if 0:
def foo...
УСЛОВНАЯ КОМПИЛЯЦИЯ, DUDE
if __debug__: например

Admin
ERROR: S client not available

Cykooz
18.10.2016
12:29:19
class A:
def gen(...):
....
method1 = gen(....)
method2 = gen(....)
method3 = gen(....)
?
А ещё эти функции не наследуются
In [6]: class B(A):
...: @pr_name
...: def bar(self):
...: return 'foo'
...:
NameError: name 'pr_name' is not defined

Igor
18.10.2016
12:40:39

Cykooz
18.10.2016
12:45:01
In [11]: class A(object):
...: locals().update({'foo%d' % i: lambda self: 'foo' for i in range(3)})
In [12]: a = A()
In [13]: a.foo0()
Out[13]: 'foo'

Юра
18.10.2016
14:58:11
Всем привет
Понимаю, может вопрос банальный и уже давно затёртый, но необходим список литературы и ресурсов что бы изучить python. Так же хотел бы узнать ваш опыт, какие требования для джуна и может что то интересное)

St. Art
18.10.2016
15:01:13
так в шапке ж полно информации
или она не устраивает???

Юра
18.10.2016
15:13:11
Понял, не увидел сразу)
Спасибо

?Егор?
18.10.2016
17:18:02
почему выдает ошибку синтаксиса
всю жизнь так выполняю программы

Pavel
18.10.2016
17:20:53

Google

Pavel
18.10.2016
17:20:59
И повторить

b0g3r
18.10.2016
17:21:03
так ты из питона пытаешься запустить скрипт из питона)

Pavel
18.10.2016
17:21:12

b0g3r
18.10.2016
17:21:13
из интерактивного режима
улыбнули три попытки)

ultranoise ?
18.10.2016
17:24:22
гламурная убунта

Pavel
18.10.2016
17:25:00

?Егор?
18.10.2016
17:25:59
Блин неделю не кодил)

Leonid
18.10.2016
17:38:16

Yuryhalf
18.10.2016
18:03:01

Janek
18.10.2016
18:16:06
Минчане
Что у нас по востребованности джангистов в городе?

[Anonymous]
18.10.2016
18:17:12
Что за среда?

?Егор?
18.10.2016
18:28:53
Ubuntu
Эта группа больше не существует