Я использую этот метод, и теперь он работает:
if ( IsWindow( hwnd ) )
{
DWORD dwStyle = GetWindowLongPtr( hwnd, GWL_STYLE ) ;
DWORD dwExStyle = GetWindowLongPtr( hwnd, GWL_EXSTYLE ) ;
HMENU menu = GetMenu( hwnd ) ;
RECT rc = { 0, 0, width, height } ;
AdjustWindowRectEx( &rc, dwStyle, menu ? TRUE : FALSE, dwExStyle );
SetWindowPos( hwnd, NULL, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER | SWP_NOMOVE ) ;
}
Я сказал бы, что словарь является определенно лучшим способом сделать это. Это легко расширяемо, позволяет Вам давать каждому значению разумное имя, и Python имеет много встроенных функций языка использования и управления словарями. Если необходимо добавить больше полей позже, все, что необходимо изменить, код, который преобразовывает кортеж в словарь и код, который на самом деле использует новые значения.
, Например:
job={}
job['jobid'], job['label'], job['username']=<querycode>
Возможно, это - излишество для Вашего случая, но я испытал бы желание создать класс "Задания", который берет кортеж в качестве его аргумента конструктора и имеет соответствующие свойства на нем. Я тогда раздал бы экземпляры этого класса вместо этого.
@Staale
Там является лучшим путем:
job = dict(zip(keys, values))
GC.SuppressFinalize
вызовы.
– supercat
2 June 2014 в 18:59
Я использовал бы словарь. Можно преобразовать кортеж в словарь этот путь:
values = <querycode>
keys = ["jobid", "label", "username"]
job = dict([[keys[i], values [i]] for i in xrange(len(values ))])
Это сначала создаст массив [["jobid", val1], ["маркировка", val2], ["имя пользователя", val3]] и затем преобразовывать это в словарь. Если порядок результата или изменения количества, просто необходимо изменить список ключей для соответствия новому результату.
пз, все еще новый на Python самостоятельно, таким образом, могли бы быть лучшие пути от выполнения этого.
С кортежем это всегда будет стычка, чтобы добавить или изменить поля. Вы правы, что словарь будет намного лучше.
, Если Вы хотите что-то с немного более дружественным синтаксисом, что Вы могли бы хотеть смотреть на ответы этот вопрос о простом 'подобном структуре' объекте. Тем путем можно раздать объект, сказать job
и получить доступ к его полям еще более легко, чем кортеж или dict:
job.jobId, job.username = jobId, username
Как насчет этого:
class TypedTuple:
def __init__(self, fieldlist, items):
self.fieldlist = fieldlist
self.items = items
def __getattr__(self, field):
return self.items[self.fieldlist.index(field)]
Вы могли тогда сделать:
j = TypedTuple(["jobid", "label", "username"], job)
print j.jobid
должно быть легко подкачать self.fieldlist.index(field)
с поиском по словарю позже..., просто редактируют Ваш __init__
метод! Что-то как Staale делает.
Старый вопрос, но так как никто не упомянул это, я добавлю это из Поваренной книги Python:
Рецепт 81252: Используя dtuple для Гибкого Доступа Результата запроса
Этот рецепт специально предназначен для контакта с результатами базы данных, и dtuple решение позволяет Вам получать доступ к результатам по имени ИЛИ индексу. Это избегает необходимости получать доступ ко всему нижним индексом, который очень трудно поддержать, как отмечено в Вашем вопросе.
Это старый вопрос, но ...
Я бы предложил использовать именованный кортеж в этой ситуации: collections. namedtuple
Это часть в В частности, что вы сочтете полезным:
Создание подклассов бесполезно для добавления новых сохраненных полей. Вместо этого просто создайте новый именованный тип кортежа из атрибута _fields.
Если вы используете пакет MySQLdb, вы можете настроить объекты курсора так, чтобы они возвращали кортежи вместо кортежей.
import MySQLdb, MySQLdb.cursors
conn = MySQLdb.connect(..., cursorclass=MySQLdb.cursors.DictCursor)
cur = conn.cursor() # a DictCursor
cur2 = conn.cursor(cursorclass=MySQLdb.cursors.Cursor) # a "normal" tuple cursor