Есть ли один способ сказать это? - PullRequest
4 голосов
/ 05 декабря 2011

Довольно просто, наверное, для кого-то.Есть ли способ сказать это в одной строке кода?

if word.startswith('^') or word.startswith('@'):
    truth = True
else: 
    truth = False

Ответы [ 4 ]

10 голосов
/ 05 декабря 2011

Я думаю, что это будет самый короткий:

truth = word.startswith(('^','@'))

Из документов (посмотрите на последнюю строку):

startswith(...)
    S.startswith(prefix[, start[, end]]) -> bool

    Return True if S starts with the specified prefix, False otherwise.
    With optional start, test S beginning at that position.
    With optional end, stop comparing S at that position.
    prefix can also be a tuple of strings to try.
8 голосов
/ 05 декабря 2011

Логическое выражение (word.startswith('^') or word.startswith('@')) возвращает логическое значение, которое затем может быть присвоено переменной, поэтому:

truth = (word.startswith('^') or word.startswith('@'))

совершенно правильно.

3 голосов
/ 05 декабря 2011

Попробуйте:

truth = word.startswith('^') or word.startswith('@')
1 голос
/ 05 декабря 2011

truth = word and word[0] in '^@'

Это выполнит работу очень быстро (без вызова метода), но ограничено однобайтовыми префиксами и установит truth в значение word, если wordэто '', None, 0 и т. д. И это будет / должно быть отброшено при проверке кода на более чем минимальную строгость.

...