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)

Site Footer

Sliding Sidebar

About Me

About Me

For whom this blog for?

For those who are interested in modern Internet technologies, IT business, startups, management, quality control, personal effectiveness, motivation. Here I write about what is interesting, about problems I faced and solutions I found. I hope it will be interesting to you either.

What motivates me to write?

The desire to improve, to study deeper topics that interest me. Find people with similar problems and tasks, together look for ways out and solutions.

Feel free to contact if you have anything to say to me

Old Flash site with my artistic works and misuc.