Какова большая часть Pythonic способ обеспечить значение нейтрализации в присвоении?

В SQL Server 2017 вы можете использовать OPENJSON для получения строки JSON как есть:

SELECT *
FROM skills
WHERE EXISTS (
    SELECT 1
    FROM OPENJSON('["Sports", "Life", "Relationship"]', ' 

Демонстрация на db <> fiddle [ 115]) AS j WHERE skills.description LIKE '%' + j.value + '%' )

Демонстрация на db <> fiddle [ 115]

19
задан brian d foy 20 April 2009 в 17:57
поделиться

9 ответов

Since 2.5:

If you want to fall back only on None:

a = x if x is not None else y 

If you want to fall back also on empty string, false, 0 etc.:

a = x if x else y 

or

a = x or y 

As for undefined (as never defined, a.k.a. not bound):

try:
  a = x 
except NameError:
  a = y

or a bit more hackish (I'd not really recommend that, but it's short):

a = vars().get('x',y)
36
ответ дан 30 November 2019 в 02:41
поделиться

first you can do your full-on with a ternary:

a = y if x is None else x

but it doesn't solve your problem. what you want to do is more closely implemented with:

try:
    a = x
except:
    a = y
5
ответ дан 30 November 2019 в 02:41
поделиться

Просто немного придирки к вашему примеру Perl:

my $x = undef;

Этот избыточный код можно сократить до:

my $x;

И следующий код не делает то, что вы говорите, он делает:

my $a = $x || $y;

Это фактически присваивает $ y $ a, когда $ x равен false . Ложные значения включают такие вещи, как undef , ноль и пустая строка. Чтобы проверить только определенность, вы можете сделать следующее (начиная с Perl 5.10):

my $a = $x // $y;
4
ответ дан 30 November 2019 в 02:41
поделиться

Я совершенно уверен, что там нет «питонического» способа сделать это, потому что это не шаблон, который является питоническим. Элемент управления не должен достигать неопределенной ссылки на переменную в элегантном коде. Есть похожие идеи, которые питонны. Наиболее очевидно:

def myRange(start, stop=None):
    start, stop = (0, start) if stop is None else (start, stop)
    ...

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

При этом, что-то подобное может следовать предпосылке без использования блока try-catch.

a = locals().get('x', y)
3
ответ дан 30 November 2019 в 02:41
поделиться

I think this would help, since the problem comes down to check whether a variable is defined or not:
Easy way to check that variable is defined in python?

1
ответ дан 30 November 2019 в 02:41
поделиться

There's python's ternary operation:

a = x if x is not None else y

Available in 2.5 and up.

1
ответ дан 30 November 2019 в 02:41
поделиться

Большинство решений основаны на том, что операторы не работают для случая, когда x равно 0 или отрицательно.

>>> x = 0
>>> y = 2
>>> a = x or y
>>> a
2
>>> 

Если бы вы знали имя переменной заранее, вы могли бы выглядеть примерно так:

if 'x' in dir():
    a = x 
except:
     a =y

Однако это решение кажется мне небрежным. Я считаю, что лучший способ - это использовать try, кроме block, например:

try:
    a = x
else:
    a = y
0
ответ дан 30 November 2019 в 02:41
поделиться

If it's an argument to a function you can do this:

def MyFunc( a=2 ):
    print "a is %d"%a

>>> MyFunc()
...a is 2
>>> MyFunc(5)
...a is 5

[Edit] For the downvoters.. the if/else bit is unnecessary for the solution - just added to make the results clear. Edited it to remove the if statement if that makes it clearer?

-1
ответ дан 30 November 2019 в 02:41
поделиться

Это не плагин Rails, но http://www.owasp.org/ хорошее место для начала.

использование исключения, вероятно, является правильным способом):

try:
    x = myfunction()
except AnException:
    x = "fallback"

print x

Все, что сказано, на самом деле в исходном коде нет ничего плохого:

if x is not None
    a = x
else
    a = y

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

a = x if x is not None else y
a = x or y
0
ответ дан 30 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

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