что это '?' в операторе return [duplicate]

Это регулярное выражение должно работать для вас \s+(?=[^()]*(?:\(|$))

result = re.split(r"\s+(?=[^()]*(?:\(|$))", subject)

Объяснение

r"""
\s             # Match a single character that is a “whitespace character” (spaces, tabs, and line breaks)
   +              # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
(?=            # Assert that the regex below can be matched, starting at this position (positive lookahead)
   [^()]          # Match a single character NOT present in the list “()”
      *              # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   (?:              # Match the regular expression below
                     # Match either the regular expression below (attempting the next alternative only if this one fails)
         \(             # Match the character “(” literally
      |              # Or match regular expression number 2 below (the entire group fails if this one fails to match)
         $              # Assert position at the end of a line (at the end of the string or before a line break character)
   )
)
"""
296
задан T.J. Crowder 15 September 2016 в 18:27
поделиться

15 ответов

Это однострочное сокращение для оператора if-else. Это называется условным оператором.1

Вот пример кода, который можно укоротить условным оператором:

if(userIsYoungerThan21) {
  serveGrapeJuice();
}
else {
  serveWine();
}

Это можно сократить с помощью ?: :

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

В условном операторе Javascript можно оценить выражение, а не просто выражение:

var userType = userIsYoungerThan18 ? "Minor" : "Adult";
serveDrink(userIsYoungerThan21 ? "Grape Juice" : "Wine");

Они могут быть даже скованы:

userIsYoungerThan4 ? serveMilk() : userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

Будьте осторожны, иначе вы закончите со свернутым кодом следующим образом:

var k = a ? (b ? (c ? d : e) : (d ? e : f)) : f ? (g ? h : i) : j;

1 Часто называется «тройным оператором», но на самом деле это всего лишь тройной оператор [оператор, принимающий три операнда]. В настоящее время это единственный JavaScript.

433
ответ дан T.J. Crowder 16 August 2018 в 02:11
поделиться
  • 1
    Просто для уточнения имени: ternary является типом оператора (т. Е. Имеет 3 части). Имя этого конкретного тернарного оператора является conditional operator. В JS существует только один тернарный оператор в JS, поэтому условия злоупотребляют. – Gone Coding 10 November 2014 в 11:12
  • 2
    @tryingToGetProgrammingStraight тройная форма технически является выражением, а выражения могут содержать другие выражения для формирования деревьев выражений. этот код прямо там, где выглядит дерево выражений :) см.: fsharpforfunandprofit.com/posts/expressions-vs-statements – Alexander Troup 15 November 2015 в 14:00
  • 3
    Настоятельно рекомендуем обновить пример общего использования, а не использовать побочный эффект, который часто упоминается как злоупотребление оператором. – T.J. Crowder 15 September 2016 в 18:30
  • 4
    Не знаю, почему в нижней части есть немного грамматики, но это неверно. Если javascript имеет только один тип оператора, то, безусловно, правильно сказать, что тернарный оператор, а не тернарный оператор ... Говоря «этот тернарный оператор является тройным оператором в javascript (и он является единственным)» ; глупо, просто используйте THE, и это подразумевает все это. – Andrew 17 February 2017 в 15:30
  • 5
    @MarkCarpenterJr В JavaScript типичный способ сделать это с оператором ||, так как он закорочен, если значение слева правдиво. – Peter Olson 18 October 2017 в 14:11
 (sunday == 'True') ? sun="<span class='label label-success'>S</span>" : sun="<span class='label label-danger'>S</span>";

 sun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"
-3
ответ дан Chandrashekhar Komati 16 August 2018 в 02:11
поделиться
  • 1
    вы можете добавить html также с тройным оператором – Chandrashekhar Komati 31 March 2017 в 08:56
  • 2
    на самом деле не так, как вы должны писать трехзначное назначение, а также использовать === not == другой мудрый вы могли бы просто сделать sunday ? .it должен быть sun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>" – TheRealMrCrowley 5 May 2017 в 18:02
  • 3
    вся точка условного тернария - это сокращение условных значений присвоения, иначе вы должны просто использовать оператор if – TheRealMrCrowley 5 May 2017 в 18:05
  • 4
    теперь скажите мне, что это правильно или нет. если вы говорите неправильно, то все равно это работает, и я использую свой проект. – Chandrashekhar Komati 8 May 2017 в 07:28
  • 5
    Я знаю, что этот шаблон отличается, но он работает. – Chandrashekhar Komati 8 May 2017 в 07:35

Это называется ternary operator. Для получения дополнительной информации, вот еще один вопрос, который я ответил относительно этого:

Как написать инструкцию IF else без 'else'

20
ответ дан Community 16 August 2018 в 02:11
поделиться
  • 1
    На самом деле это условный оператор. – ChaosPandion 7 June 2011 в 03:13
  • 2
    Хорошее объяснение, но пример неудовлетворен, так как он присваивает логическое значение в зависимости от результата булевого выражения, что мало смысла. Вместо этого вы предпочитаете использовать var olderThan20 = age > 20;. – BalusC 7 June 2011 в 03:15
  • 3
    @BalusC - да :) Я понял это, но примеры трудно вытащить из моей шляпы! Будет думать о лучшей ... – David Tang 7 June 2011 в 03:17
  • 4
    Его тернарный условный оператор – Petah 7 June 2011 в 03:20
  • 5
    @Michael - см. Раздел 11.12 Условный оператор (?:) спецификации: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf – ChaosPandion 7 June 2011 в 03:25
  • 6
    Люди еще спорят об этом? Geez. – BoltClock♦ 7 June 2011 в 03:26
  • 7
    @BoltClock - Не совсем спорить, просто пытаюсь нормализовать наш основной лексикон. – ChaosPandion 7 June 2011 в 03:28
  • 8
    На самом деле тройной является оператор типа оператора (т. Е. Имеет 3 части). Имя этого конкретного тернарного оператора является conditional operator. В JS существует только один тернарный оператор в JS, поэтому условия злоупотребляют. – Gone Coding 10 November 2014 в 11:10

Он называется тернарным оператором

tmp = (foo==1 ? true : false);
4
ответ дан eagle12 16 August 2018 в 02:11
поделиться
  • 1
    Он называется условным оператором. Это единственный пример тернарного оператора a в языке. – Lightness Races in Orbit 12 December 2013 в 14:07
  • 2
    tmp = foo == 1 делает то же самое, поэтому этого было бы достаточно – Robert Varga 21 January 2018 в 13:45
z = (x == y ? 1 : 2);

эквивалентно

if (x == y)
    z = 1;
else
    z = 2;

, за исключением, конечно, короче.

8
ответ дан Ernest Friedman-Hill 16 August 2018 в 02:11
поделиться
x = 9
y = 8

унарный

++x
--x

Двоичный

z = x + y

Тройной

2>3 ? true : false;
2<3 ? true : false;
2<3 ? "2 is lesser than 3" : "2 is greater than 3";
0
ответ дан Gajendra D Ambi 16 August 2018 в 02:11
поделиться

Эй, помощник, просто помните, что работа js оценивается как истинная, так и ложная, не так ли?

возьмем тернарный оператор:

questionAnswered ? "Awesome!" : "damn" ;

Сначала js проверяет, является ли questionAnswered true или false.

, если true ( ?), вы получите «Удивительный!»

else (:) вы получите «damn»;

Надеюсь, это поможет другу :)

3
ответ дан Guy Keren 16 August 2018 в 02:11
поделиться

Это if statement все в одной строке.

Итак,

var x=1;
(x == 1) ? y="true" : y="false";
alert(y);

Выражение, которое должно быть оценено, находится в ( )

If он соответствует true, выполняет код после ?

Если он соответствует false, выполните код после :

2
ответ дан Jason Gennaro 16 August 2018 в 02:11
поделиться

Я хочу, чтобы добавлял некоторые к данным ответам.

В случае, если вы сталкиваетесь (или хотите использовать) тернар в ситуации вроде «отображать переменную, если она установлена , else ... ', вы можете сделать его еще короче, без тройного .


Вместо:

var welcomeMessage  = 'Hello ' + (username ? username : 'guest');

Вы можете use:

var welcomeMessage  = 'Hello ' + (username || 'guest');

Это Javascript, эквивалентный сокращенному тройному оператору PHP ?:

Или даже:

var welcomeMessage  = 'Hello ' + (username || something || maybethis || 'guest');

Он оценивает переменную, и если она ложна или не задана, она переходит к следующей.

69
ответ дан Jeffrey Roosendaal 16 August 2018 в 02:11
поделиться
  • 1
    голосовать за вторую часть :) – ImranNaqvi 5 June 2016 в 06:08
  • 2
    Я боролся с тройной и в конце концов нашел этот ответ. Спасибо! – Ljubisa Livac 28 July 2017 в 19:27

Тернарный оператор

Обычно мы имеем условные утверждения в Javascript.

Пример:

if (true) {
    console.log(1)
} 
else {
    console.log(0)
}
# Answer
# 1

, но он содержит две или более строк и не может назначать переменную. У Javascript есть решение для этой проблемы. Тернарный оператор. Терминальный оператор может записывать в одну строку и присваивать переменной.

Пример:

var operator = true ? 1 : 0
console.log(operator)
# Answer
# 1

Этот оператор Ternary аналогичен на языке программирования C.

6
ответ дан Simplans 16 August 2018 в 02:11
поделиться

Условный (тернарный) оператор является единственным оператором JavaScript, который принимает три операнда. Этот оператор часто используется как ярлык для оператора if.

condition ? expr1 : expr2 

Если условие истинно, оператор возвращает значение expr1; в противном случае он возвращает значение expr2.

function fact(n) {
  if (n > 1) {
    return n * fact(n-1);
  } else {
    return 1;
  }
  // we can replace the above code in a single line of code as below
  //return (n != 1) ? n * fact(n - 1) : 1;
}
console.log(fact(5));

Для получения дополнительных пояснений прочитайте ссылку MDN document

0
ответ дан Srikrushna Pal 16 August 2018 в 02:11
поделиться
20
ответ дан Community 6 September 2018 в 01:31
поделиться
1
ответ дан Ajay2707 29 October 2018 в 08:09
поделиться
21
ответ дан Community 29 October 2018 в 08:09
поделиться
0
ответ дан Joakim Sandqvist 29 October 2018 в 08:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: