Сортировка с использованием вспомогательной функции - может ли вспомогательная функция возвращать более одной переменной? - PullRequest
1 голос
/ 12 марта 2019

У меня есть два списка: numbers и group. Я использовал вспомогательную функцию для сортировки списка. Что я хочу знать, возможно ли вернуть другую переменную, скажем, 'sorted' = 'True' из функции?

numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = [2, 3, 5, 7]

def sort_priority(values, group):
    sorted = 'False'
    def helper(x):
        if x in group:
            sorted = 'True' 
            return (0, x)
        else:
            return (1, x)

    values.sort(key=helper)
    return sorted

1 Ответ

0 голосов
/ 12 марта 2019

Если вы используете Python 3, вы можете достичь этого с помощью оператора nonlocal :

def sort_priority(values, group):
    sorted = 'False'
    def helper(x):
        nonlocal sorted
        if x in group:
            sorted = 'True'
            return (0, x)
        else:
            return (1, x)    
    values.sort(key=helper)
    return sorted

Это позволяет изменять переменную sorted во внешней области видимости внутренней областью вспомогательной функции, поэтому sort_priority вернет "True".

Если вы используете Python 2, оператор nonlocal недоступен, но может быть достигнуто нечто подобное, например:

def sort_priority(values, group):
    nonlocals = {'sorted': 'False'}
    def helper(x):
        if x in group:
            nonlocals['sorted'] = 'True'
            return (0, x)
        else:
            return (1, x)    
    values.sort(key=helper)
    return nonlocals['sorted']
...