В 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]
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)
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
Просто немного придирки к вашему примеру Perl:
my $x = undef;
Этот избыточный код можно сократить до:
my $x;
И следующий код не делает то, что вы говорите, он делает:
my $a = $x || $y;
Это фактически присваивает $ y $ a, когда $ x равен false . Ложные значения включают такие вещи, как undef
, ноль и пустая строка. Чтобы проверить только определенность, вы можете сделать следующее (начиная с Perl 5.10):
my $a = $x // $y;
Я совершенно уверен, что там нет «питонического» способа сделать это, потому что это не шаблон, который является питоническим. Элемент управления не должен достигать неопределенной ссылки на переменную в элегантном коде. Есть похожие идеи, которые питонны. Наиболее очевидно:
def myRange(start, stop=None):
start, stop = (0, start) if stop is None else (start, stop)
...
Важно то, что stop
определено в области видимости, но вызывающей стороне не нужно было передавать его явно, только то, что он принял значение по умолчанию, изменяя семантику аргументов, что фактически приводит к тому, что первый аргумент является необязательным, а не вторым, даже если язык не позволяет этого без этого хитрого трюка.
При этом, что-то подобное может следовать предпосылке без использования блока try-catch.
a = locals().get('x', y)
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?
There's python's ternary operation:
a = x if x is not None else y
Available in 2.5 and up.
Большинство решений основаны на том, что операторы не работают для случая, когда 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
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?
Это не плагин 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