LINUX.ORG.RU

Функция в python, такая структура корректна?

 ,


0

1

Данная функция проверяет нахождение определенных паттернов в двух строках job_title, job_location. Если хотя бы один паттерн присутствует, функция вернет 'NI', если нет то 'New"

def job_filter(job_title, job_location):
    title_patterns = ['Sr.', 'sr.', 'Sr ', 'sr ', 'Senior', 'senior', 'Lead', 'lead', 'Azure', 'azure']
    location_patterns = ['New York', 'Boston', 'San Francisco', 'San Jose']
    for pattern in title_patterns:
        if re.search(pattern, job_title):
            return 'NI'
    for pattern in location_patterns:
        if re.search(pattern, job_location):
            return 'NI'
    return 'New'

Вопрос в том, можно вот так несколько раз return использовать внутри самой функции или это считается неправильно?

можно вот так несколько раз return использовать внутри самой функции

Можно, конечно.

anonymous
()
Ответ на: комментарий от anonymous

Можно, конечно.

Спасибо, я почему-то засомневался, что вот так, на середине функции корректно сделать return. :)

samson_b
() автор топика
Последнее исправление: samson_b (всего исправлений: 1)
Ответ на: комментарий от samson_b

А if «в середине» фукнции не смущает?

Основы какие-то, наверное, лучше не на ЛОРе спрашивать, а вычитать в книжках и документации.

lovesan ★★
()

ps: fold


def job_filter(job_title, job_location):
       def isIn(st,ps):
              for p in ps:
                     if re.search(p, st):
                             return True
              return False

       if isIn(job_location,['San Francisco','San Jose','New York','Boston'])
       or isIn(job_title.uper(),['SENIOR','AZURE','LEAD',,'SR.','SR ']):
              return 'NI'
    return 'New'
qulinxao3
()
Ответ на: ps: fold от qulinxao3

уверен(патриция лайк) есть структура данных которая одним проходом по строке обнаруживает вхождение одного из патернов набора тогда код меняется к виду isIn(buildmaskFrompatterns,string)

qulinxao3
()
Ответ на: ps: fold от qulinxao3

упс регулярки

ef job_filter(job_title, job_location):
       def isIn(st,ps):
          return re.search(ps.join('|', st)

       return 'N'+['ew','I']
                    [int(isIn(job_location,['San Francisco','San Jose','New York','Boston'])
                      or isIn(job_title.uper(),['SENIOR','AZURE','LEAD',,'SR.','SR '])]
qulinxao3
()
Ответ на: ps: fold от qulinxao3

Класс, спасибо :)

В качестве ликбеза, вот по такой конструкции вопрос

if X or Y:

Если X оказался true, python будет делать расчет Y или проскочит его вычисление, т.к. однозначно условие выполнится?

samson_b
() автор топика
Ответ на: комментарий от samson_b

Проскочит.

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

zolden ★★★★★
()

А тормозной re тут нафига? У тебя же нет регулярок. Есть же банальный in.

any(i in job_title for i in title_patterns)

А во-вторых есть lower() и upper() функции.

steemandlinux ★★★★★
()
Последнее исправление: steemandlinux (всего исправлений: 4)

title_patterns = [‘Sr.’, ‘sr.’, ’Sr ’, ’sr ’, ‘Senior’, ‘senior’, ‘Lead’, ‘lead’, ‘Azure’, ‘azure’]

Просто используй .lower() при сравнении всех строк.

evgeny_aa ★★☆
()
Ответ на: комментарий от evgeny_aa

Всем большое спасибо, я честно говоря, даже не ожидал, что будет столько полезных советов по оптимизации кода. Надо будет еще выложить мой код на обсуждение.

samson_b
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.