NSArray *assorted = [@"1 2 3 9 ; : 구 , 결 A B C Z ! á" componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSArray *sorted = [assorted sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
/* NSOrderedAscending, NSOrderedSame, NSOrderedDescending */
BOOL isPunct1 = [[NSCharacterSet punctuationCharacterSet] characterIsMember:[(NSString*)obj1 characterAtIndex:0]];
BOOL isPunct2 = [[NSCharacterSet punctuationCharacterSet] characterIsMember:[(NSString*)obj2 characterAtIndex:0]];
if (isPunct1 && !isPunct2) {
return NSOrderedAscending;
} else if (!isPunct1 && isPunct2) {
return NSOrderedDescending;
}
return [(NSString*)obj1 compare:obj2 options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch|NSNumericSearch]|;
}];
Одно общее соглашение состоит в том, чтобы использовать "_" в качестве имени переменной для элементов кортежа, который Вы хотите проигнорировать. Например:
def f():
return 1, 2, 3
_, _, x = f()
Можно использовать x = func()[0]
для возврата первого значения, x = func()[1]
для возврата второго, и так далее.
, Если Вы хотите получить несколько значений за один раз, используйте что-то как x, y = func()[2:4]
.
При использовании Python 3 Вы можете Вы использовать звезду, прежде чем переменная (на левой стороне присвоения), чтобы иметь его будет списком в распаковке.
# Example 1: a is 1 and b is [2, 3]
a, *b = [1, 2, 3]
# Example 2: a is 1, b is [2, 3], and c is 4
a, *b, c = [1, 2, 3, 4]
# Example 3: b is [1, 2] and c is 3
*b, c = [1, 2, 3]
# Example 4: a is 1 and b is []
a, *b = [1]
Помните при возврате больше чем одного объекта Вы действительно возвращаете кортеж. Таким образом, можно сделать вещи как это:
def func():
return 1, 2
print func()[0] # prints 1
print func()[1] # prints 2
Это походит на лучший выбор мне:
val1, val2, ignored1, ignored2 = some_function()
Это не загадочно или ужасно (как func () [индекс] метод) и ясно формулирует Вашу цель.
Три простых варианта.
Очевидный
x, _ = func()
x, junk = func()
Отвратительный
x = func()[0]
И существуют способы сделать это с декоратором.
def val0( aFunc ):
def pick0( *args, **kw ):
return aFunc(*args,**kw)[0]
return pick0
func0= val0(func)