*args
и **kwargs
: позволяют передавать переменное количество аргументов функции.
*args
: используется для отправки списка аргументов переменной длины без ключевого слова в функцию:
def args(normal_arg, *argv):
print ("normal argument:",normal_arg)
for arg in argv:
print("Argument in list of arguments from *argv:", arg)
args('animals','fish','duck','bird')
Будет выдавать:
normal argument: animals
Argument in list of arguments from *argv: fish
Argument in list of arguments from *argv: duck
Argument in list of arguments from *argv: bird
**kwargs*
**kwargs
позволяет передавать ключевую переменную переменной длины аргументов функции. Вы должны использовать **kwargs
, если вы хотите обрабатывать именованные аргументы в функции.
def who(**kwargs):
if kwargs is not None:
for key, value in kwargs.items():
print ("Your %s is %s." %(key,value))
who (name="Nikola", last_name="Tesla", birthday = "7.10.1856", birthplace = "Croatia")
Производит:
Your name is Nikola.
Your last_name is Tesla.
Your birthday is 7.10.1856.
Your birthplace is Croatia.
Возможно, вы захотите проверить API сервера системных событий (SENS) http://msdn.microsoft.com/en-us/library/cc185680 (VS.85) .aspx
Я на самом деле не использовал его, но похоже, что он передает события, которые вы ищете.
EDIT:
У WMI, похоже, есть вся необходимая информация о различных сетевых подключениях и изменениях состояния. Он также имеет асинхронную модель событий, которая может использоваться для получения уведомлений. Хитрость, я полагаю, генерирует правильный запрос WMI для получения требуемой информации. Этот блог выглядит как правильный тип запроса, и этот MSDN объясняет, как обрабатывать события асинхронно.
Эта ссылка MSDN дает очень подробный пример того, как записывать события на WMI с помощью COM. В этом примере на самом деле не фиксируются сетевые события, но я считаю, что если вы включите правильный запрос, это сработает.
(здесь много кода, поэтому я не копирую его в ответ) http://msdn.microsoft.com/en-us/library/aa390425%28v=vs.85%29.aspx
Я не знаю, какой протокол вы используете, и можете ли вы управлять пунктом назначения, но в этом случае получатель может опросить повторную попытку. Назначение лучше знает, что оно получило, поэтому оно может дать полученное количество байтов как смещение для повторной передачи.