Кто-нибудь соберите русскую документацию (html), по django 1.6 с GitHub'а - https://github.com/Alerion/django_documentation и сожмите 7z.
» Язык программирования Python (Питон, Пайтон)
Как в винде из GUI-версии питона (pythonw.exe) вызывать/уничтожать консоль?
Среди форумчан есть те кто умеет прогать text mining задачи на питоне?
как получить короткое DOS-имя какого-либо пути в винде?
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'
Код: 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'
что в питоне быстрее?
Код: type(u"a") is not type("a")
Код: type(u"a") is not type("a")
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
спасибо за подсказку. Но желательно было сделать встроенными средствами питона, т.к. не всегда возможно таскать этот модуль с собой. Поэтому порылся еще в справке и нашел модуль 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
В книге Майкла Доусона "Программируем на Python" на 57-ой странице написано:
Цитата:
А в сноске научный редактор перевода пишет:
Цитата:
В Python-документации написано:
Цитата:
Вот скрипт:
Код: 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)
Цитата:
... операция присвоения. В ней создается переменная 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)
Mark Lutz, Learning Python, 5th Edition, 2013 (p. 141):
Цитата:
Что в переводе означает:
Цитата:
Python - интерпретируемый язык с динамической типизацией, по другому и быть не может.
Лутц в пятой главе подробно разбирает различные аспекты динамической типизации: переменные, объекты, ссылки, сборку мусора.
Кому интересно - рекомендую почитать.
Там же, с. 176:
Цитата:
Цитата:
Редактор хотел показать свою эрудицию, но своим глубокомысленным замечением только запутал читателей.
Цитата:
...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 определяет некоторые имена до исполнения кода, но можно считать, что переменные создаются при начальных присваиваниях.
Редактор хотел показать свою эрудицию, но своим глубокомысленным замечением только запутал читателей.
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()
И в классах и в модулях обращение к переменной вызывает поиск переменной во всех доступных словарях - 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()
Цитата:
... компилятор создает таблицу всех локальных переменных до выполнения функции и дальше обращается к ней по индексу, т.е. никакого поиска по имени не происходит
А где, про это можно подробней почитать?
Добавлю. В этой таблице индексов первыми индексами идут параметры функции.
Код: 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)
Код: 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)
PyPy 2.5.0 released (Python 3.2.5 - compatible) http://morepypy.blogspot.ca/2015/02/pypy-250-released.html
во время итерирования объекта у этого объекта в каком-нибудь свойстве хранится значение текущего ключа или элемента (для словаря) или индекса (для списка/кортежа/множества) ?
только enumerate спасет отца русской демократии
Для словаря же есть итерация по .items()
Для словаря же есть итерация по .items()
если надо указать, что метод класса является абстрактным, как правильно писать?
Так
Код: @classmethod
@abstractmethod
def method(cls):
Так
Код: @classmethod
@abstractmethod
def method(cls):
@classmethod
@abstractmethod
@abstractmethod
Не могу сделать иконки пунктам меню в трее? Разобрался. Вот пример http://pastebin.com/3m7inUBA
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()
Код:
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()
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)
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)
Перепробовал большинство вариантов, можно нажать одну кнопку, она пошлет 1 на нужный GPI0, можно нажать 2 кнопку, она либо пошлет 0 на тот же GPIO, либо на другой. Когда идет выполнение time.sleep или еще есть timer, то посылать команды бесполезно, только после отрабатывания time.sleep можно что-то делать, но уже поздно, сирена включилась. Как вариант вижу создание 2-го .py файла, который будет отслеживать кнопку отключения и при ее нажатии запускать bash скрипт, который будет делать kill файла с отсчетом time.sleep.
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()
по моему нельзя замораживать код на 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()
на счет time.sleep непонятно, замораживает ли он весь процесс или только данный поток. Просто, судя по доке, определение поступления событий (GPIO.add_event_detect) выполняются в отдельных потоках.
в python можно делать так:
Код: argList = ['a', 'b']
[ arg + '0' for arg in argList ]
Код: argList = ['a', 'b']
[ arg + '0' for arg in argList ]
а.. понял как
Код: [''.join([' ', name, '="', value, '"']) for arg in argList for (name, value) in arg.iteritems()]
Код: [''.join([' ', name, '="', value, '"']) for arg in argList for (name, value) in arg.iteritems()]
Для строк есть метод format.
Но у него косяк в том, что если ему аргументов не хватает для разворачивания параметров, то он выдает исключение IndexError, KeyError или что там еще.
Есть более безопасный вариант без этих исключений, т.е. тот, который будет просто "разворачивать" только те параметры, для которых есть аргументы, а остальные не трогать?
Но у него косяк в том, что если ему аргументов не хватает для разворачивания параметров, то он выдает исключение IndexError, KeyError или что там еще.
Есть более безопасный вариант без этих исключений, т.е. тот, который будет просто "разворачивать" только те параметры, для которых есть аргументы, а остальные не трогать?
unreal666
"{key1}, {key2}, {key3}".format(**defaultdict(str, key1="1st key", key2="2nd key"))
"{key1}, {key2}, {key3}".format(**defaultdict(str, key1="1st key", key2="2nd key"))
panda3
KeyError: 'key3'
PS.
Python 2.7.9
KeyError: 'key3'
PS.
Python 2.7.9
Зачем это старье?
Затем, что прога написана на этом старье. А я всего лишь плагин для нее писал.
Предыдущая тема: Вопрос по HTML и MS IE Explorer6.0
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.