Блог о програмировании и программистах

Чем больше всматривашься в код, тем больше код всматривается в тебя

15 полезных сервисов для дизайнеров и веб-разработчиков

Сервисы для дизайнеров и веб разработчиков.

Ресурсы для бесплатного образования

Сейчас даже образование можно получить совершенно бесплатно даже не выходя из дома. Все знают про курсы MIT, Stanford University, но мало кто знает про эти замечательные ресурсы:

1. www.intuit.ru - самый крупный российский интернет университет с кучей интересностей.

2. shad.yandex.ru/lectures/ - школа анализа данных Яндекса

3. www.academicearth.org - сайт со всеми лекциями лучших университетов мира. Чтобы не лазить и не собирать по крупицам лучшее.

1 - Работа с переменными

Variable Bindings(работа с переменными)

        
            //0 - простое присваивание
                let x = 5;

            //1 - распаковка значений

                let (x, y) = (1, 2);

            //2 - обозначение типа переменной

                let x: i32 = 5;

            //3 - неизменяемость

                //выдаст ошибку
                let x = 5;
                x = 10; 

            //4 - область видимости и замена переменных

                //пример ошибочного кода, переменная на доступна вне блока
                let x: i32 = 17;
                {
                    let y: i32 = 3;
                    println!("The value of x is {} and value of y is {}", x, y);
                }
                println!("The value of x is {} and value of y is {}", x, y); // This won't work

                //пример замены переменных
                let x: i32 = 8;
                {
                    println!("{}", x); // Prints "8"
                    let x = 12;
                    println!("{}", x); // Prints "12"
                }
                println!("{}", x); // Prints "8"
                let x =  42;
                println!("{}", x); // Prints "42"

                //пример смены типа и изменяемости переменной
                let mut x: i32 = 1;
                x = 7;
                let x = x; // x is now immutable and is bound to 7

                let y = 4;
                let y = "I can also be bound to text!"; // y is now of a different type
        
    

Кратко о библиотеке numpy

1)Методы класса ndarray

  • ndarray.ndim - количество измерений ил ранк матрицы
  • ndarray.shape - возвращает количество измерений по каждой из осей (n,m), где n - количество строк, m - количество столбцов
  • ndarray.size - количество элементов в массиве
  • ndarray.dtype - тип элементов массива
  • ndarray.itemsize - размер в байтах каждого элемента в массиве
  • ndarray.data - буфер, содержащий элементы массива

2)Создание массива

        
              import numpy as np
            a = np.array([2,3,4])
            a.dtype #dtype('int64')
            b = np.array([1.2, 3.5, 5.1])
            b.dtype #dtype('float64')

            #создание двухмерного массива
            b = np.array([(1.5,2,3), (4,5,6)])
            #создание трехмерного массива
            b = np.array([((1.5,0.1,2.0),(1.5,0.1,2.0)), ((1.5,0.1,2.0),(1.5,0.1,2.0))])
            #тип элементов может задан в момент создания
            c = np.array( [ [1,2], [3,4] ], dtype=complex )
        
    

Ссылки на обучающие сервисы

Список ссылок:

Подробно о классах в Python

1)Области видимости

Пример области видимости функций и переменных:
        
        def scope_test():
            def do_local():
                spam = "local spam"
            def do_nonlocal():
                nonlocal spam
                spam = "nonlocal spam"
            def do_global():
                global spam
                spam = "global spam"
            spam = "test spam"
            do_local()
            print("After local assignment:", spam)
            do_nonlocal()
            print("After nonlocal assignment:", spam)
            do_global()
            print("After global assignment:", spam)

        scope_test()
        print("In global scope:", spam)
        #The output of the example code is:
        """
        After local assignment: test spam
        After nonlocal assignment: nonlocal spam
        After global assignment: nonlocal spam
        In global scope: global spam
        """
        
    
....

Установка прав доступа для контролера

Определение, является ли пользователь админом:



from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
from django.contrib import messages
from django.utils.decorators import available_attrs
from functools import wraps
#Пишем декоратор, для контролера
def is_user_admin(view_func):
    @wraps(view_func, assigned=available_attrs(view_func))
    def wrap(request, *args, **kwargs):
        if request.user.is_superuser:
            #исполняем переданный нам контролер
            res = view_func(request, *args, **kwargs)
        else:
            #редиректим на начальную страницу с ошибкой
            messages.error(request, u'У Вас недостаточно прав для доступа')
            return HttpResponseRedirect('/')
        return res
    return wrap   

#Пример применения на контролере
@is_user_admin
def index_controler(request):
    context={}
    return render_to_response('index.html', context, context_instance=RequestContext(request)) 


Бинарный поиск

Бинарный поиск:



# -*- coding: UTF-8 -*-
import profile
import random

#простая версия бинарного поиска
def binarySearch1(alist, item):
    first = 0
    last = len(alist)-1
    found = False

    while first <= last and not found:
        midpoint = (first + last)//2
        if alist[midpoint] == item:
            found = True
        else:
            if item < alist[midpoint]:
                last = midpoint-1
            else:
                first = midpoint+1
    return found

....

Сортировка пузырьком

Оценка работы алгоритма сортировки пузырьком:


# -*- coding: UTF-8 -*-

#----------------------------------------
#сортировка пузырьком
#----------------------------------------

#инициализация
#----------------------------------------
import profile
import random
 
array = [x for x in xrange(1000)]
random.shuffle(array)
arr=[]

#----------------------------------------
#python эталон(встроенная функция[1000 - 0.001c])
profile.run('array.sort()')
#----------------------------------------

#1 вариант(неоптимизированный[1000 - 0.103c])
#----------------------------------------
# Реализация в виде функции
def bubble_sort(lst):
    for i in xrange(len(lst)-2):
        for j in xrange(len(lst) - i - 1):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    return lst

#запускаем скрипт сортировки
#----------------------------------------
profile.run('arr=bubble_sort(array)')
#----------------------------------------

400 потрясающих бесплатных сервисов

400 сервисов на все случаи жизни - перейти