Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Язык программирования Python (Питон, Пайтон)

Автор: Daniyar91
Дата сообщения: 20.05.2014 15:43
Кто-нибудь соберите русскую документацию (html), по django 1.6 с GitHub'а - https://github.com/Alerion/django_documentation и сожмите 7z.
Автор: unreal666
Дата сообщения: 29.05.2014 08:29
Как в винде из GUI-версии питона (pythonw.exe) вызывать/уничтожать консоль?
Автор: Futurism
Дата сообщения: 08.08.2014 13:21
Среди форумчан есть те кто умеет прогать text mining задачи на питоне?
Автор: unreal666
Дата сообщения: 25.08.2014 14:31
как получить короткое DOS-имя какого-либо пути в винде?
Автор: Tilks
Дата сообщения: 25.08.2014 15:23
unreal666


Код: In [1]: import win32api

In [5]: win32api.GetShortPathName('C:/Program Files (x86)/Common Files/InstallShield/Professional/RunTime/11/50/Intel32/DotNetInstaller.exe')
Out[5]: 'C:/PROGRA~2/COMMON~1/INSTAL~1/PROFES~1/RunTime/11/50/Intel32/DOTNET~1.EXE'

In [6]: win32api.GetShortPathName(r'C:\Program Files (x86)\Common Files\InstallShield\Professional\RunTime\11\50\Intel32\DotNetInstaller.exe')
Out[6]: 'C:\\PROGRA~2\\COMMON~1\\INSTAL~1\\PROFES~1\\RunTime\\11\\50\\Intel32\\DOTNET~1.EXE'

In [7]: win32api.GetShortPathName(r'C:\Program Files (x86)\Common Files\InstallShield\Professional\RunTime\11\50\Intel32')
Out[7]: 'C:\\PROGRA~2\\COMMON~1\\INSTAL~1\\PROFES~1\\RunTime\\11\\50\\Intel32'
Автор: unreal666
Дата сообщения: 26.08.2014 22:43
что в питоне быстрее?

Код: type(u"a") is not type("a")
Автор: unreal666
Дата сообщения: 27.08.2014 10:27
Tilks
спасибо за подсказку. Но желательно было сделать встроенными средствами питона, т.к. не всегда возможно таскать этот модуль с собой. Поэтому порылся еще в справке и нашел модуль ctypes и реализовал через него:

Код: # -*- coding: UTF-8 -*-

__all__ = [
'WinApi',
]

import ctypes

class WinApi (object):
    # """
    # """
    _windll = ctypes.windll
    _kernel32 = _windll.kernel32

    @staticmethod
    def GetShortPathName(lpszLongPath):
        """
        Возрвщает короткий (DOS) путь заданного пути.
        """

        isUnicode = type(lpszLongPath) is type(u'a') and True or False

        _GetShortPathName = isUnicode and WinApi._kernel32.GetShortPathNameW or WinApi._kernel32.GetShortPathNameA
        length = _GetShortPathName(lpszLongPath, None, 0)

        if (length == 0):
            return lpszLongPath

        lpszShortPath = isUnicode and ctypes.create_unicode_buffer(length) or ctypes.create_string_buffer(length)
        length = _GetShortPathName(lpszLongPath, lpszShortPath, length)

        if (length == 0 or length >= len(lpszLongPath)):
            return lpszLongPath

        return lpszShortPath.value
Автор: Daniyar91
Дата сообщения: 12.10.2014 10:31
В книге Майкла Доусона "Программируем на Python" на 57-ой странице написано:
Цитата:
... операция присвоения. В ней создается переменная name, которой присваивается значение - ссылка на строку "Вася". Вообще принято говорить, что переменным присваиваются значения. Если переменная ранее не существовала, как name в данном примере, то сначала интерпретатор создаст ее, а потом присвоит ей значение.

А в сноске научный редактор перевода пишет:
Цитата:
Автор не совсем прав. Интерпретатор создает все нужные переменные при создании области видимости. Все переменные (слева от оператора присвоения) в локальном scope будут созданы сразу же, еще на этапе компиляции кода.

В Python-документации написано:
Цитата:
...Следующее является блоками: модуль, тело функции и определение класса...
...Область видимости (scope) определяет видимость имени в блоке. Если локальная переменная определена в блоке, ее область видимости включает этот блок...
...Если операция связывания имени встречается где-нибудь в пределах блока, любые использования имени в пределах блока обрабатываются как ссылки на текущий блок...

Вот скрипт:
Код: import builtins

builtins.x = 'builtins'

if not x: x = 'Модуль'

def func():
if x: x = 'Функция'

class C:
if x: x = 'Класс'


print('x =', x)

try: func()
except Exception as err: print(err.args[0])

print('C.x =', C.x)
Автор: ans72
Дата сообщения: 12.10.2014 12:00
Mark Lutz, Learning Python, 5th Edition, 2013 (p. 141):

Цитата:

...in Python:
Variables are created when they are first assigned values.
Variables are replaced with their values when used in expressions.
Variables must be assigned before they can be used in expressions.
Variables refer to objects and are never declared ahead of time.

Что в переводе означает:

Цитата:

... в Python:
Переменные создаются, когда им впервые присвоено значение.
В выражениях переменные заменяются своими значениями.
Переменным должны быть присвоены значения до того, как они будут использованы в выражениях.
Переменные ссылаются на объекты и никогда не объявляются заранее.

Python - интерпретируемый язык с динамической типизацией, по другому и быть не может.

Лутц в пятой главе подробно разбирает различные аспекты динамической типизации: переменные, объекты, ссылки, сборку мусора.
Кому интересно - рекомендую почитать.

Там же, с. 176:

Цитата:
Technically, Python detects some names before your code runs, but you can think of it as though initial assignments make variables.


Цитата:
С технической точки зрения, Python определяет некоторые имена до исполнения кода, но можно считать, что переменные создаются при начальных присваиваниях.

Редактор хотел показать свою эрудицию, но своим глубокомысленным замечением только запутал читателей.
Автор: panda3
Дата сообщения: 13.10.2014 14:31
Daniyar91
И в классах и в модулях обращение к переменной вызывает поиск переменной во всех доступных словарях - locals, globals, builtins. Каждый раз. (Поэтому не рекомендуется писать код вне функций.) В этих случаях переменная создается в момент первого присваивания, т.к. именно тогда она попадает в словарь locals / globals, а до этого - читается из вышестоящего словаря, если она там есть.
Для функций же существует специальная оптимизация - компилятор создает таблицу всех локальных переменных до выполнения функции и дальше обращается к ней по индексу, т.е. никакого поиска по имени не происходит. Поэтому для функций можно сказать, что "переменные создаются при компиляции". Хотя в словарь locals они по-прежнему попадают в момент первого присваивания, этот словарь интерпретатором для поиска переменных не используется. Смотрите сами:

Код: class C:
    x = 0
    locals()['x'] = 1
    print(x)

def f():
    x = 0
    locals()['x'] = 1
    print(x)

C()
f()
Автор: Daniyar91
Дата сообщения: 13.10.2014 16:45

Цитата:
... компилятор создает таблицу всех локальных переменных до выполнения функции и дальше обращается к ней по индексу, т.е. никакого поиска по имени не происходит

А где, про это можно подробней почитать?
Автор: unreal666
Дата сообщения: 13.10.2014 17:55
Добавлю. В этой таблице индексов первыми индексами идут параметры функции.

Код: import dis

def func():
y=5
y
print(locals())

def func2(a, *arguments, **keywords):
y=5
y
print(locals())

func()
dis.dis(func)

print ('\r\n==========\r\n')

func2(555)
dis.dis(func2)
Автор: dvs
Дата сообщения: 07.02.2015 05:07
PyPy 2.5.0 released (Python 3.2.5 - compatible) http://morepypy.blogspot.ca/2015/02/pypy-250-released.html
Автор: unreal666
Дата сообщения: 19.02.2015 08:46
во время итерирования объекта у этого объекта в каком-нибудь свойстве хранится значение текущего ключа или элемента (для словаря) или индекса (для списка/кортежа/множества) ?
Автор: panda3
Дата сообщения: 23.02.2015 10:41
только enumerate спасет отца русской демократии
Для словаря же есть итерация по .items()
Автор: unreal666
Дата сообщения: 02.03.2015 16:18
если надо указать, что метод класса является абстрактным, как правильно писать?
Так

Код: @classmethod
@abstractmethod
def method(cls):
Автор: panda3
Дата сообщения: 07.03.2015 22:03
@classmethod
@abstractmethod
Автор: AZJIO
Дата сообщения: 09.03.2015 07:17
Не могу сделать иконки пунктам меню в трее? Разобрался. Вот пример http://pastebin.com/3m7inUBA
Автор: digital422
Дата сообщения: 11.04.2015 19:55
Raspberry Pi. Хочу написать модуль для охранной системы, при срабатывании датчика на GPIO (pin12) должен идти отчет времени, во время которого надо успеть нажать кнопку (pin05), чтобы прервать появления 1 на GPI Output (pin07). Что надо добавить ?


Код:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
GPIO.setup(5, GPIO.IN)
GPIO.setup(12, GPIO.IN)

while True:
input = GPIO.input(12)
if ((not prev_input) and input):
print("DATCHIK ON")
GPIO.output(7, 1)
time.sleep(5)
GPIO.output(7, 0)
print("DATCHIK OFF")
prev_input = input
time.sleep(0.05)
GPIO.cleanup()
Автор: unreal666
Дата сообщения: 11.04.2015 23:49
digital422

1. prev_input у тебя юзается до его определения.
2. в Raspberry Pi не разбираюсь, но судя по этой и этому, это можно сделать несколькими способами.

Больше понравилось с прослушкой событий. Что-то типа:


Код: import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
GPIO.setup(5, GPIO.IN)
GPIO.setup(12, GPIO.IN)

def PIN12_RISING():
GPIO.add_event_detect(5, GPIO.RISING)
time.sleep(5)
if GPIO.event_detected(5):
GPIO.output(7, 0)
print("DATCHIK ON")
else:
GPIO.output(7, 1)
print("DATCHIK OFF")

GPIO.add_event_detect(12, GPIO.RISING, callback=PIN12_RISING, bouncetime=300)
Автор: digital422
Дата сообщения: 14.04.2015 17:38
Перепробовал большинство вариантов, можно нажать одну кнопку, она пошлет 1 на нужный GPI0, можно нажать 2 кнопку, она либо пошлет 0 на тот же GPIO, либо на другой. Когда идет выполнение time.sleep или еще есть timer, то посылать команды бесполезно, только после отрабатывания time.sleep можно что-то делать, но уже поздно, сирена включилась. Как вариант вижу создание 2-го .py файла, который будет отслеживать кнопку отключения и при ее нажатии запускать bash скрипт, который будет делать kill файла с отсчетом time.sleep.
Автор: Tilks
Дата сообщения: 14.04.2015 19:14
digital422
по моему нельзя замораживать код на 5 секунд ( time.sleep(5) )
тогда кнопку надо держать 5 секунд, пока отпустит sleep.

если можно переменную создать, то надо счетчик сделать
вот как у меня на gui, чтобы интерфейс не замерзал.

Код: def myTimer(self, i):
polsec = i * 2
while polsec > 0:
time.sleep(0.5)
polsec -= 1
QApplication.processEvents()
Автор: unreal666
Дата сообщения: 15.04.2015 04:42
на счет time.sleep непонятно, замораживает ли он весь процесс или только данный поток. Просто, судя по доке, определение поступления событий (GPIO.add_event_detect) выполняются в отдельных потоках.
Автор: unreal666
Дата сообщения: 30.04.2015 03:24
в python можно делать так:

Код: argList = ['a', 'b']
[ arg + '0' for arg in argList ]
Автор: unreal666
Дата сообщения: 30.04.2015 05:39
а.. понял как

Код: [''.join([' ', name, '="', value, '"']) for arg in argList for (name, value) in arg.iteritems()]
Автор: unreal666
Дата сообщения: 11.05.2015 14:51
Для строк есть метод format.
Но у него косяк в том, что если ему аргументов не хватает для разворачивания параметров, то он выдает исключение IndexError, KeyError или что там еще.
Есть более безопасный вариант без этих исключений, т.е. тот, который будет просто "разворачивать" только те параметры, для которых есть аргументы, а остальные не трогать?
Автор: panda3
Дата сообщения: 11.05.2015 16:58
unreal666

"{key1}, {key2}, {key3}".format(**defaultdict(str, key1="1st key", key2="2nd key"))
Автор: unreal666
Дата сообщения: 11.05.2015 17:16
panda3
KeyError: 'key3'

PS.
Python 2.7.9
Автор: panda3
Дата сообщения: 19.05.2015 10:30
Зачем это старье?
Автор: unreal666
Дата сообщения: 19.05.2015 11:18
Затем, что прога написана на этом старье. А я всего лишь плагин для нее писал.

Страницы: 1234567891011

Предыдущая тема: Вопрос по HTML и MS IE Explorer6.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.