PHP и Python. Взгляд со стороны PHP

Так случилось что в книге, которую сейчас читаю, примеры на питоне. Надо сказать что красота и лаконичность подкупили меня на более пристальный взгляд внутрь, и тут я покажу те штуки которые мне уж очень понравились после долгой работы с php. Некоторые штуки на php вообще нельзя сделать, некоторые можно но “с бубном”, а какие-то просто лаконичнее смотрятся.

# инициализация переменных

a, b = 3, 4
print(a + b)



>7

# последовательные вызовы

open("out.txt", 'w').writelines(i.lower() for i in open("input.txt", 'r'))

# lambda функции
 
from math import sqrt

a = lambda x, y : sqrt(x**2 + y**2)
print a(2, 2)

> 2.82842712475

# собственные операции над экземплярами классов, в данном случае сравнение

class MyString:
    def __init__(self, str):
        self.str = str        
    
    def __cmp__(self, str):        
        return cmp(len(self.str), len(str.str))


print(MyString("a") > MyString("abc"))

> False

# множественное наследование


class A:
    def a(self):
        return "a"
    
class B:
    def b(self):
        return "b"
    
class C(A,B):
    def c(self):
        return self.a() + self.b()

test = C()
print test.c()

> ab

# классы-итераторы

from random import random

class RandomArray:    
  
    def __init__(self, len):    
        self.lst = [random() for i in range(len + 1)]         
        self.current = 0
        
    def __iter__(self): 
        return self
    
    def next(self):
        self.current += 1
        if len(self.lst) > self.current:                    
            return self.lst[self.current]
        else: 
            raise StopIteration

for i in RandomArray(3):
    print i 

> 0.756338496947
> 0.0337045293883
> 0.50394288767

# синтаксис привычного in_array()

arr = [1, 2, 3]
print(1 in arr)
print(4 in arr)

> True
> False

# метаклассы, своего рода ООП-пластелин
# надо сказать что весь код на Python напоминает мне пластелин

def classFactory(func):
    class X(object):
        pass    
    setattr(X, func.__name__, func)
    return X

def my_method(self):
    print "I am here"
 
MyClass = classFactory(my_method)
my_object = MyClass()
my_object.my_method()

> I am here

# операции с массивами

arr = [1, 2, 3, 4, 5]
print(arr[:2])
print(arr[2:])
print(arr[:-2])
print(arr[-2:])
print(arr[::2])

> [1, 2]
> [3, 4, 5]
> [1, 2, 3]
> [4, 5]
> [1, 3, 5]

# аналогичные операции со строками

str = "abcdefg"
print(str[2:])
str = "abcdefg"
print(str[:1])

> cdefg
> a

# работа с потоками


import threading
from time import sleep
 
def proc(n):
    print "Process", n
    for i in xrange(3):
        sleep(float(n))
        print n + " : " + str(i)

p1 = threading.Thread(target=proc, name="t1", args=["1"])
p2 = threading.Thread(target=proc, name="t2", args=["2"])
p1.start()
p2.start()

> Process 1
> Process 2
> 1 : 0
> 2 : 0
> 1 : 1
> 1 : 2
> 2 : 1
> 2 : 2

# системные вызовы - запросто

from winsound import Beep
from random import randrange

for i in range(50):
    Beep(randrange(100, 1000), 100)

# дебагер "из коробки". его красота не столько в функциональности,
# столько в том что на питоне это весьма просто реализовывается

import pdb

def fun(s):
    lst = []
    for i in s:
        lst.append(ord(i))
    return lst

pdb.runcall(fun, "ABCDE")

> c:\main.py(35)fun()
-> lst = []
(Pdb) n
> c:\main.py(36)fun()
-> for i in s:
(Pdb) n
> c:\main.py(37)fun()
-> lst.append(ord(i))
(Pdb) print i
A
(Pdb) n

# профайлер из коробки, тоже, как по мне - очень круто

import profile
from math import sqrt
 
def print_close_matches():
    arr = []
    for i in range(1000):
        arr.append(sqrt(i**3))     
    return arr

profile.run(r'print_close_matches()')

         2005 function calls in 0.051 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1000    0.001    0.000    0.001    0.000 :0(append)
        1    0.000    0.000    0.000    0.000 :0(range)
        1    0.045    0.045    0.045    0.045 :0(setprofile)
     1000    0.001    0.000    0.001    0.000 :0(sqrt)
        1    0.000    0.000    0.006    0.006 :1()
        1    0.003    0.003    0.006    0.006 main.py:7(print_close_matches)
        1    0.000    0.000    0.051    0.051 profile:0(print_close_matches())
        0    0.000             0.000          profile:0(profiler)

Comments

comments

2 comments On PHP и Python. Взгляд со стороны PHP

Leave a reply:

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Site Footer

Sliding Sidebar

About Me

About Me

Для кого этот блог?

Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.

Что заставило меня создать его?

Желание совершенствоваться. Достигать успеха. Находить людей со схожими проблемами и задачами, вместе искать выходы и решения.

Немного о себе.

Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.

Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:

e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом

Прочая онлайновая деятельность: