упаковщик Dean Edward достигает некоторых довольно хороших степеней сжатия. Это имеет реализации командной строки, который позволяет этому использоваться в непрерывном процессе интеграции.
Между созданием кортежа и созданием итератора это почти промывка, но итерация выигрывает у носа ...:
$ python2.6 -mtimeit -s'x=set([1])' 'a=tuple(x)[0]'
1000000 loops, best of 3: 0.465 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=tuple(x)[0]'
1000000 loops, best of 3: 0.465 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=next(iter(x))'
1000000 loops, best of 3: 0.456 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=next(iter(x))'
1000000 loops, best of 3: 0.456 usec per loop
Не уверен, почему во всех ответах используется старый синтаксис iter (x) .next ()
, а не новый next (iter (x))
, что мне кажется предпочтительнее (и также работает в Python 3.1).
Однако, распаковка выигрывает у обоих:
$ python2.6 -mtimeit -s'x=set([1])' 'a,=x'
10000000 loops, best of 3: 0.174 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a,=x'
10000000 loops, best of 3: 0.174 usec per loop
Это, конечно, для наборов из одного элемента (где последняя форма, как упоминалось другими, имеет то преимущество, что быстро дает сбой, если набор, который вы «знали», имел только один элемент, на самом деле имел несколько ). Для наборов с произвольными N> 1 элементами кортеж замедляется, iter - нет:
$ python2.6 -mtimeit -s'x=set(range(99))' 'a=next(iter(x))'
1000000 loops, best of 3: 0.417 usec per loop
$ python2.6 -mtimeit -s'x=set(range(99))' 'a=tuple(x)[0]'
100000 loops, best of 3: 3.12 usec per loop
Итак, распаковка для одноэлементного случая и next (iter (x))
для общего случая, кажется лучшим.
Итак, необходимо создать журнал вне приложения (вы не можете сделать это программно с этим пользователем. Сделайте это вручную или создайте простое приложение командной строки для упрощения установки).
Для получения полной информации:
http://msdn.microsoft.com/en-us/library/ms998320.aspx#paght000015_eventlogaccess
Лично я бы рекомендовал вам не изменять разрешения сетевого пользователя, а лучше создать источник журнала вне веб-приложения. Я предпочитаю консольное приложение (на написание которого у вас уйдет около 5 минут, которое вы также можете использовать для подготовки других машин). Запустите новое консольное приложение в VS.NET и добавьте код для создания источников журналов. Пример:
http: //www.dotnetspider. com / resources / 23593-Create-Event-log-VB-NET.aspx
Затем просто запустите консольное приложение из строки cmd, когда вы вошли в систему с соответствующими разрешениями.