Понимание обозначения среза

Ваш блок try выходит сразу после запуска новой задачи, потому что этот метод просто продолжает работать.

Вместо этого вы можете поймать исключение как AggregateException , где вы ожидаете завершения задачи (или нескольких задач):

var task1 = Task.Factory.StartNew(() =>
{
    throw new MyCustomException("I'm bad, but not too bad!");
});

try
{
    task1.Wait();
}
catch (AggregateException ae)
{
    // Assume we know what's going on with this particular exception. 
    // Rethrow anything else. AggregateException.Handle provides 
    // another way to express this. See later example. 
    foreach (var e in ae.InnerExceptions)
    {
        if (e is MyCustomException)
        {
            Console.WriteLine(e.Message);
        }
        else
        {
            throw;
        }
    }

}

http://msdn.microsoft.com/en-us/library/dd997415.aspx

2911
задан kmario23 8 May 2019 в 16:03
поделиться

7 ответов

Это довольно просто действительно:

a[start:stop]  # items start through stop-1
a[start:]      # items start through the rest of the array
a[:stop]       # items from the beginning through stop-1
a[:]           # a copy of the whole array

существует также эти step значение, которое может использоваться с любым вышеупомянутым:

a[start:stop:step] # start through not past stop, by step

ключевой пункт для запоминания - то, что эти :stop значение представляет первое значение, которое является не в выбранной части. Так, различием между stop и start является выбранное число элементов (если step 1, значение по умолчанию).

другая функция - то, что start или stop может быть отрицательны число, что означает, что оно рассчитывает от конца массива вместо начала. Так:

a[-1]    # last item in the array
a[-2:]   # last two items in the array
a[:-2]   # everything except the last two items

Точно так же step может быть отрицательное число:

a[::-1]    # all items in the array, reversed
a[1::-1]   # the first two items, reversed
a[:-3:-1]  # the last two items, reversed
a[-3::-1]  # everything except the last two items, reversed

Python добр к программисту, если существует меньше объектов, чем Вы просите. Например, если Вы просите [1 114], и a только содержит один элемент, Вы получаете пустой список вместо ошибки. Иногда Вы предпочитали бы ошибку, таким образом, необходимо знать, что это может произойти.

Отношение к [1 116] объект

режущий оператор [] на самом деле используется в вышеупомянутом коде с slice() объект с помощью : нотация (который только допустим в [1 120]), т.е.:

a[start:stop:step]

эквивалентно:

a[slice(start, stop, step)]

объекты Части также ведут себя немного по-другому в зависимости от количества аргументов, так же к [1 121], т.е. и slice(stop) и slice(start, stop[, step]) поддерживаются. Для пропуска определения данного аргумента можно было бы использовать None, так, чтобы, например, a[start:] было эквивалентно [1 126], или a[::-1] эквивалентно [1 128].

, В то время как : - базирующаяся нотация очень полезна для простого разрезания, конкретного вида использования [1 130], объекты упрощают программное поколение разрезания.

3940
ответ дан Greg Hewgill 9 May 2019 в 02:03
поделиться
  • 1
    Я вижу основания, что я считаю законными: при загрузке наследия или собственный (индексированный или csv) файл в таблице для усиления питания базы данных для использования его. – snowflake 13 August 2010 в 19:29

И несколько вещей, которые не были сразу очевидны для меня, когда я увидел режущий синтаксис в первый раз:

>>> x = [1,2,3,4,5,6]
>>> x[::-1]
[6,5,4,3,2,1]

Простой способ инвертировать последовательности!

И если Вы хотели, по некоторым причинам, каждый второй объект в обратной последовательности:

>>> x = [1,2,3,4,5,6]
>>> x[::-2]
[6,4,2]
140
ответ дан Dana 9 May 2019 в 02:03
поделиться

Перечисление возможностей, позволенных грамматикой:

>>> seq[:]                # [seq[0],   seq[1],          ..., seq[-1]    ]
>>> seq[low:]             # [seq[low], seq[low+1],      ..., seq[-1]    ]
>>> seq[:high]            # [seq[0],   seq[1],          ..., seq[high-1]]
>>> seq[low:high]         # [seq[low], seq[low+1],      ..., seq[high-1]]
>>> seq[::stride]         # [seq[0],   seq[stride],     ..., seq[-1]    ]
>>> seq[low::stride]      # [seq[low], seq[low+stride], ..., seq[-1]    ]
>>> seq[:high:stride]     # [seq[0],   seq[stride],     ..., seq[high-1]]
>>> seq[low:high:stride]  # [seq[low], seq[low+stride], ..., seq[high-1]]

, Конечно, если (high-low)%stride != 0, то конечная точка будет немного ниже, чем high-1.

, Если stride отрицательно, упорядочивание изменяется немного, так как мы считаем в обратном порядке:

>>> seq[::-stride]        # [seq[-1],   seq[-1-stride],   ..., seq[0]    ]
>>> seq[high::-stride]    # [seq[high], seq[high-stride], ..., seq[0]    ]
>>> seq[:low:-stride]     # [seq[-1],   seq[-1-stride],   ..., seq[low+1]]
>>> seq[high:low:-stride] # [seq[high], seq[high-stride], ..., seq[low+1]]

Расширенное разрезание (с запятыми и замещающими знаками) главным образом используются только специальными структурами данных (как NumPy); основные последовательности не поддерживают их.

>>> class slicee:
...     def __getitem__(self, item):
...         return repr(item)
...
>>> slicee()[0, 1:2, ::5, ...]
'(0, slice(1, 2, None), slice(None, None, 5), Ellipsis)'
388
ответ дан Georgy 9 May 2019 в 02:03
поделиться
  • 1
    Литеральная строка копируется в местоположение переменной, названной " mystr". mystr не указатель на литерал, it' s копия литерала. – Bryan Oakley 13 November 2009 в 10:26

переговоры по учебному руководству Python об этом (прокручивают немного вниз, пока Вы не добираетесь до части о разрезании).

схема ASCII-творчества полезна также для запоминания, как работают части:

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

Один способ помнить, как работа частей должна думать об индексах как об указании между , символы, с левым краем первого символа пронумеровали 0. Затем правый край последнего знака строки n символы имеет индекс n .

505
ответ дан kenorb 9 May 2019 в 02:03
поделиться
  • 1
    strdup() не Стандартная функция. Ее работы, на тех реализациях, которые предлагают его как расширение, могут отличаться от реализации до реализации. Я предпочитаю malloc() и strcpy() при необходимости. Это wasn' t должен был продемонстрировать, как удалить первые и последние символы строки. – pmg 13 November 2009 в 10:32

Я использую "индексные точки между элементами" метод размышления об этом сам, но один способ описать это, который иногда помогает другим получить его, является этим:

mylist[X:Y]

X индекс первого элемента, который Вы хотите.
Y является индексом первого элемента, который Вы не делаете , хотят.

36
ответ дан Steve Losh 9 May 2019 в 02:03
поделиться
  • 1
    положительная сторона, I' ll добавляют белый список позволенных расширений, таких как: js, css, jpg, gif... – SeanDowney 22 December 2009 в 05:47

После использования его немного я понимаю, что самое простое описание - то, что это - точно то же как аргументы в for цикл...

(from:to:step)

Любой из них является дополнительным:

(:to:step)
(from::step)
(from:to)

Затем для отрицательной индексации просто нужны Вы для добавления длины строки к отрицательным индексам для понимания этого.

Это работает на меня так или иначе...

60
ответ дан Peter Mortensen 9 May 2019 в 02:03
поделиться
  • 1
    Спасибо. Я на самом деле думал об этом подходе, когда я отправил вопрос. It' s убирают, и работает отлично. – selbie 22 March 2010 в 11:16

Я лично думаю об этом как для цикла

a[start:end:step]    
# for(i = start; i < end; i += step)

Также примечание, что отрицательные величины для start и end относительно конца списка.

3
ответ дан 22 November 2019 в 19:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: