2015-02-22 6 views

ответ

5

Python принимает 1:5 синтаксис только в квадратных скобках. Интерпретатор преобразует его в объект slice. Затем метод __getitem__ объекта применяет срез.

Посмотрите на numpy/lib/index_tricks.py для некоторых функций, которые используют это. На самом деле это не функции, а классы, которые определяют свои собственные методы __getitem__. Этот файл может дать вам идеи.

Но если вы не до этого, то возможности включают в себя:

blah(arr, slice(1, 5)) 
blah(arr, np.r_[1:5]) 

nd_grid, mgrid, ogrid расширить понятие 'срез', чтобы принять воображаемую 'шаг' значение:

mgrid[-1:1:5j] 
# array([-1. , -0.5, 0. , 0.5, 1. ]) 

Просто имейте в виду, что все, что расширяется на фрагменте перед передачей его функции blah, не знает о форме другого аргумента. Так np.r_[:-1] просто возвращает [].

И None может использоваться в slice: например. slice(None,None,-1) эквивалентен [::-1].

+0

Как проверить, является ли аргумент, который я получил, slice() по сравнению с обычным номером? Я получил это isststance (x, slice) – user1019129

0

вы можете попробовать, как это:

def blah(ary, arg): 
    arg = map(int, arg.split(":")) 
    print ary[arg[0]:arg[1]] 

blah([1,2,3,4,5,6],"2:5") 

выход:

[3, 4, 5] 
4

Вы можете использовать функцию slice

>>> def blah(ary,arg1): 
...  print ary[arg1] 
>>> blah(range(10), slice(1, 5)) 
[1, 2, 3, 4] 
Смежные вопросы