Пыха всегда с тобой

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха информатор 3.1
Еще более удобное оповещение о флуде!

Краснодарское время: 25 Май, 2012, 07:43:46

Страниц: 1 2 [3]
Печать
Автор Тема: Первый Python скрипт - Игра о пыха.ру )  (Прочитано 557 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
mario    ↓ 
11 Декабрь, 2011, 10:46:59
НЕ ХУЕТА! ХУЕТА!

wazzup
Группа: Джедаи

Карма: 67
Сообщений: 6162
Сила слова: 1.09

{i: i * i for i in range(10)}
и так тоже знал :)
Записан

с ув. mario.
Контакты
adwo    ↓ 
11 Декабрь, 2011, 10:50:40 , спустя 3 минуты 41 секунду
НЕ ХУЕТА! ХУЕТА!

Укусил питон. Python infected.
Группа: Санитары

Карма: 18
Сообщений: 569
Сила слова: 3.16

знал о том, как с помощью генератора получить хеш, но не знал, как список?)
Записан

chmod 777 you mom, bastard
mario    ↓ 
11 Декабрь, 2011, 11:06:51 , спустя 16 минут 11 секунд
НЕ ХУЕТА! ХУЕТА!

wazzup
Группа: Джедаи

Карма: 67
Сообщений: 6162
Сила слова: 1.09


знал о том, как с помощью генератора получить хеш, но не знал, как список?)
да :) Видимо про списки главу хуево прочитал )
Записан

с ув. mario.
Контакты
Ivan    ↓ 
11 Декабрь, 2011, 01:50:48 , спустя 2 часа 43 минуты 57 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 27
Сообщений: 1366
Сила слова: 1.98


http://www.scribd.com/doc/48714240/An-Introduction-to-the-Zen-of-Python

http://pypi.python.org/pypi - аналог cpan для питона, круто! Но вот в классах не совсем понял, там взглядом слева поглядеть и кажется словно это не класс, а какой-то хак, по типу bless-objecting в перле. Однако слова class, object, init говорят обратное - что это уже было вшито в язык. Но зачем тогда писать self в параметрах функций классов?) Просто в перле ооп вообще нету) Но есть хак через элемент языка - bless, она изменяет тип переменной, для создания своего типа переменной.
Спустя 42 секунды добавил
Ааа дошло там же скобочек то нету в питоне, вот он так и сигнализирует что это функция класса, я правильно понимаю?
Записан

adwo    ↓ 
11 Декабрь, 2011, 02:43:44 , спустя 52 минуты 56 секунд
НЕ ХУЕТА! ХУЕТА!

Укусил питон. Python infected.
Группа: Санитары

Карма: 18
Сообщений: 569
Сила слова: 3.16

Ivan, просто методы в питоне всегда в качестве первого параметра принимают созданный объект. а то что его называют self - это просто соглашение. можно вот так :)
 
Text
class Hello:
    def __init__(haha, name):
        haha.name = name
 
    def say_hello(haha):
        return 'Hello, %s!' % haha.name
 
h = Hello('pyha')
print h.say_hello()
Записан

chmod 777 you mom, bastard
Ivan    ↓ 
11 Декабрь, 2011, 02:58:31 , спустя 14 минут 47 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 27
Сообщений: 1366
Сила слова: 1.98

а то что его называют self - это просто соглашение
Да это то я понимаю, а вот зачем передавать переменную, а не использовать встроенную this (как в php и подобных)
Записан

adw0rd    ↓ 
11 Декабрь, 2011, 03:08:29 , спустя 9 минут 58 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67

Потомучто можно передавать инстанс unbound методам, пример:
Python

class X(object):
    def test(self):
        return "Hello!"
 
x = X()
x.test()
 
y = X()
X.test(y)
 
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Ivan    ↓ 
11 Декабрь, 2011, 03:15:20 , спустя 6 минут 51 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 27
Сообщений: 1366
Сила слова: 1.98

А зачем это надо?
Спустя 1 минуту 43 секунды добавил
Вообще это костыли какие-то
Записан

mathete    ↓ 
11 Декабрь, 2011, 03:29:46 , спустя 14 минут 26 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14


Видимо в предпоследней строчке имелось в виду in вместо ==
И более по-питонячи юзать sys.platform вместо os.name.
Да, точно. Насчет второго - пояснишь? Я, вот, например, в данном случае сомневаюсь.
os - модуль работы с ОС. sys - модуль работы с python-платформой. И чисто формально получается, что sys "ближе". Но это такие уж совсем условности.
 
По поводу генераторов и списковых выражений:
 
Python

( i for i in range(100500) )
 

Получаете генератор. А генераторы очень полезно использовать в цепочках типа:
 
Python

body = ... # тут у нас например офигенно здоровая страница текста
lines = (line for line in body.splitlines())
first_words = (line.split(' ')[0] for line in lines)
triple_codes = (word for first_words if len(word) == 3 and word[0].isdigit())
for code in triple_codes:
    print code
 
Вот мы взяли, например, какой-то лог. И вывели трехзначные кода, начинающиеся с цифры, которые встречаются вначале каждой линии.
Тут профита ровно два: код хорошо читается и каждый из генераторов логически отделен от остальных. А во-вторых, всё произойдет в один прогон. Памяти потребуется не стопицот метров, а килобайт отсилы.
 

 
Python

[ i for i in range(100500) ]
 
Получите список. Если в предыдущем примере круглые скобочки поменять на квадратные, то на больших данных офигеете.
Но при этом всё равно полезен, когда вы знаете, что вам нужен именно список. А использовать генераторы, а в конце писать list(some_generator) - некрасиво....
 

Python

{ i for i in range(100500) }
 

Получите множество. Тип set. Множества прекрасны, кто не верит, почитайте. Практических применений кучи, только надо не боятся :)
 
Python

word_list1 = ... # текст со словами один
word_list2 = ... # текст со словами второй
 
set1 = { word for i in  word_list1}
set2 = { word for i in  word_list2}
print set1 & set2 # выведет слова находящиеся в обоих списках
print set1 - set2 # выведет слова находящиеся в первом списке, но нет во втором.
 

Ну и так далее... Ещё, если у вас большой список и аналогичное множество, то конечно же el in list будет медленнее чем el in set
Добавлю, что чтобы работала магия множеств с вашими классами, достаточно определить в них методы __eq__ и __hash__. Первый для сопоставления элементов, второй для уникального ключа в множестве (тут я коряво сказал конечно...).
 
Python

{k:v for ... in ..}
 

Просто словарь...
 
Внимание! Синтаксический сахар для словарей и множеств, появился только в 2.7, в версиях ниже будете получать синтаксическую ошибку
 
Записан
mario    ↓ 
11 Декабрь, 2011, 04:10:56 , спустя 41 минуту 10 секунд
НЕ ХУЕТА! ХУЕТА!

wazzup
Группа: Джедаи

Карма: 67
Сообщений: 6162
Сила слова: 1.09

mathete, чувак спасибо за разъяснения! :) Очень приятно видеть таких людей тут :)
Записан

с ув. mario.
Контакты
tartar    ↓ 
11 Декабрь, 2011, 05:38:43 , спустя 1 час 27 минут 47 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: -1
Сообщений: 166
Сила слова: -0.6

Да в Python я нуб, буду усерднее учить данный язык :)
Записан
mathete    ↓ 
11 Декабрь, 2011, 07:19:58 , спустя 1 час 41 минуту 15 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14

По поводу this и self. Я не знаю как в php, но в python по своему сделан доступ к атрибутам. Довольно сложно и на первый взгляд запутанно. Но позволяет контролировать этот доступ причем разнообразно. Частый пример - методы экземпляра, статичные методы, методы класса, свойство
 
Python

class SomeClass(object):
 
    def instance_method(*args):
         print args
 
    @staticmethod
    def static_method(*args):
         print args
 
    @classmethod
    def class_method(*args)
         print args
 
    @property
    def just_property():
         return 'foo'
 
inst = SomeClass()
inst.instance_method('arg1', 'arg2')
SomeClass.class_method('arg1', 'arg2')
SomeClass.static_method('arg1', 'arg2')
print inst.just_property # без скобок вызова
 

Так вот, задекорировав вроде бы метод экземпляра, мы получаем метод класса, статический метод, или вообще не метод :)
Поэтому первым аргументом может быть данный экземпляр (self), или класс (cls), первый переданный аргумент. А в случае property ожидать аргументы бессмысленно.
 
PS: тему setter и deleter для пропертей специально не затрагивал.
Записан
Ivan    ↓ 
11 Декабрь, 2011, 07:44:56 , спустя 24 минуты 58 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 27
Сообщений: 1366
Сила слова: 1.98

без скобок вызова
Да это же спизжено из перла!
Ruby
sub PI {
    3.14;
}
 
print PI;
print PI(); # одно и то же
Записан

mathete    ↓ 
11 Декабрь, 2011, 08:13:41 , спустя 28 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14


без скобок вызова
Да это же спизжено из перла!
Ruby
sub PI {
    3.14;
}
 
print PI;
print PI(); # одно и то же


Ты действительно не видишь пропасть между тем, что написал я и ты?
 
Ну и сам себя поправлю:
А в случае property ожидать аргументы бессмысленно.
Правильнее сказать, что там надо указывать только один аргумент - self. Так описывается свойство экземпляра.
 
Python

 ...
@property
    def just_property(self):
         return 'foo'
 
Записан
adwo    ↓ 
11 Декабрь, 2011, 08:27:26 , спустя 13 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

Укусил питон. Python infected.
Группа: Санитары

Карма: 18
Сообщений: 569
Сила слова: 3.16

Ты действительно не видишь пропасть между тем, что написал я и ты?
причем ппц какая пропасть)
Записан

chmod 777 you mom, bastard
Страниц: 1 2 [3]
Печать
 

Перейти в:  

Этот топик скрыли: artoodetoo