C#의 null-coalesing 연산자와 동등한 Python이 있습니까?
C#에 null-coalesing 연산자가 있습니다.??할당 시 간단한(짧은) 늘체크를 가능하게 하는 ) 。
string s = null;
var other = s ?? "some default value";
비단뱀과 동등한 것이 있나요?
제가 할 수 있는 건
s = None
other = s if s else "some default value"
 더 방법은 s
other = s or "some default value"
 그럼 어떻게 요,  해야 할까요?or오퍼레이터가 동작합니다.부울 연산자이므로 부울 컨텍스트에서 작동합니다.값이 부울이 아닌 경우 연산자의 목적을 위해 부울로 변환됩니다.
에 주의:or하지 않는 은 「」뿐입니다.True ★★★★★★★★★★★★★★★★★」False대신 첫 번째 피연산자가 true로 평가되면 첫 번째 피연산자를 반환하고 첫 번째 피연산자가 false로 평가되면 두 번째 피연산자를 반환합니다.
은 " " " 입니다.x or yxTrue사실대로 말하다않으면 됩니다.y대부분의 경우 이는 C'의 늘 결합 연산자와 동일한 목적으로 기능하지만 다음 점에 유의하십시오.
42    or "something"    # returns 42
0     or "something"    # returns "something"
None  or "something"    # returns "something"
False or "something"    # returns "something"
""    or "something"    # returns "something"
를 사용하는 s(의) 나 (의) None가 멤버를 한)__nonzero__() ★★★★★★★★★★★★★★★★★」__len__()연산자와 을 사용하는 합니다).
Python은 Python을 사용합니다. 값이 false로 에 이를 하여 "false"를 사용하지 않고  수 .None을 사용하다
일부 언어에서는 이러한 행동을 엘비스 오퍼레이터라고 합니다.
엄밀히 말하면
other = s if s is not None else "default value"
 않으면, 「」가 됩니다.s = False될 것이다"default value"을 사용법
이것을 짧게 하려면 , 다음의 순서에 따릅니다.
def notNone(s,d):
    if s is None:
        return d
    else:
        return s
other = notNone(s, "default value")
첫 번째 가 아닌.None:
def coalesce(*arg):
  return reduce(lambda x, y: x if x is not None else y, arg)
# Prints "banana"
print coalesce(None, "banana", "phone", None)
reduce()  불필요하게 될 수 .None을 사용하다
def coalesce(*arg):
  for el in arg:
    if el is not None:
      return el
  return None
다음과 같은 둘 이상의 null 조건부 연산을 체인으로 해야 하는 경우:
model?.data()?.first()
 풀 수 있는 가 아닙니다.or또, 이것으로는 해결할 수 없습니다..get() 이와 유사한 할 수 없음)  사전 유형(또는 중첩할 수 없음)이 합니다.getattr()NoneType none none none none 。
언어에 늘 병합을 추가하는 것을 고려하는 관련 PEP는 PEP 505이며 문서와 관련된 논의는 python-ideas 스레드에 있습니다.
이게 정답인 건 알지만, 딕트 같은 오브젝트를 다룰 때는 다른 옵션이 있어요.
다음과 같은 개체가 있는 경우:
{
   name: {
      first: "John",
      last: "Doe"
   }
}
다음을 사용할 수 있습니다.
obj.get(property_name, value_if_null)
예를 들어 다음과 같습니다.
obj.get("name", {}).get("first", "Name is missing") 
추가에 의해{}기본값으로 "name"이 없으면 빈 객체가 반환되어 다음 get으로 전달됩니다.이것은 C#의 null-safe-navigation과 비슷합니다.이것은 다음과 같습니다.obj?.name?.first.
단일 값에 대해 @Bothwells answer(제가 선호하는)에 추가하여 함수 반환 값의 늘 할당을 체크하기 위해 새로운 walrus-operator(python3 이후)를 사용할 수 있습니다.8):
def test():
    return
a = 2 if (x:= test()) is None else x
따라서,test(와 같이) 함수를 두 번 평가할 필요가 없습니다.a = 2 if test() is None else test())
Juliano가 "or"의 행동에 대해 대답한 것 외에: "빠르다"
>>> 1 or 5/0
1
그래서 가끔은 이게 유용한 지름길이 될 수도 있어요.
object = getCachedVersion() or getFromDB()
@Huh Bothwell, @mortehu, @glgl의 답변에 대해.
테스트용 데이터 세트 설정
import random
dataset = [random.randint(0,15) if random.random() > .6 else None for i in range(1000)]
구현 정의
def not_none(x, y=None):
    if x is None:
        return y
    return x
def coalesce1(*arg):
  return reduce(lambda x, y: x if x is not None else y, arg)
def coalesce2(*args):
    return next((i for i in args if i is not None), None)
테스트 기능을 하다
def test_func(dataset, func):
    default = 1
    for i in dataset:
        func(i, default)
python 2.7을 사용한 Mac i7 @2.7Ghz의 결과
>>> %timeit test_func(dataset, not_none)
1000 loops, best of 3: 224 µs per loop
>>> %timeit test_func(dataset, coalesce1)
1000 loops, best of 3: 471 µs per loop
>>> %timeit test_func(dataset, coalesce2)
1000 loops, best of 3: 782 µs per loop
확실히not_none함수는 OP의 질문에 올바르게 응답하고 "falsy" 문제를 처리합니다.그것은 또한 가장 빠르고 읽기 쉽다.많은 곳에서 논리를 적용한다면, 그것은 분명히 최선의 방법이다.
반복 가능한 첫 번째 null 이외의 값을 찾는 데 문제가 있는 경우 @mortehu의 응답을 참조하십시오.그러나 OP와는 다른 문제에 대한 해결책이지만, 이 문제를 부분적으로 처리할 수 있습니다.반복 가능하고 기본값을 사용할 수 없습니다.마지막 인수는 반환된 기본값이지만, 이 경우 반복 가능한 값이 아니며 마지막 인수가 기본값인 것도 분명하지 않습니다.
그럼 아래도 할 수 있지만, 난 여전히 그걸 사용할 거야not_null를 참조해 주세요.
def coalesce(*args, **kwargs):
    default = kwargs.get('default')
    return next((a for a in arg if a is not None), default)
이 문제에 대한 실행 가능한 해결책을 찾기 위해 우연히 이곳에 온 저와 같은 분들을 위해 변수가 정의되지 않았을 때, 제가 얻은 가장 가까운 것은 다음과 같습니다.
if 'variablename' in globals() and ((variablename or False) == True):
  print('variable exists and it\'s true')
else:
  print('variable doesn\'t exist, or it\'s false')
글로벌 체크인을 할 때는 문자열이 필요하지만 이후 값을 체크할 때는 실제 변수가 사용됩니다.
변수 존재에 대한 자세한 내용:변수가 존재하는지 확인하려면 어떻게 해야 합니까?
Python has a get function that its very useful to return a value of an existent key, if the key exist;
if not it will return a default value.
def main():
    names = ['Jack','Maria','Betsy','James','Jack']
    names_repeated = dict()
    default_value = 0
    for find_name in names:
        names_repeated[find_name] = names_repeated.get(find_name, default_value) + 1
사전에서 이름을 찾을 수 없는 경우 default_value를 반환하고 이름이 존재하는 경우 기존 값 1을 추가합니다.
이것이 도움이 되기를 바란다
아래의 두 가지 기능은 많은 가변 테스트 케이스를 다룰 때 매우 유용하다는 것을 알게 되었습니다.
def nz(value, none_value, strict=True):
    ''' This function is named after an old VBA function. It returns a default
        value if the passed in value is None. If strict is False it will
        treat an empty string as None as well.
        example:
        x = None
        nz(x,"hello")
        --> "hello"
        nz(x,"")
        --> ""
        y = ""   
        nz(y,"hello")
        --> ""
        nz(y,"hello", False)
        --> "hello" '''
    if value is None and strict:
        return_val = none_value
    elif strict and value is not None:
        return_val = value
    elif not strict and not is_not_null(value):
        return_val = none_value
    else:
        return_val = value
    return return_val 
def is_not_null(value):
    ''' test for None and empty string '''
    return value is not None and len(str(value)) > 0
언급URL : https://stackoverflow.com/questions/4978738/is-there-a-python-equivalent-of-the-c-sharp-null-coalescing-operator
'source' 카테고리의 다른 글
| 독립 실행형 전체 텍스트 검색 서버 선택: 스핑크스 또는 SOLR? (0) | 2022.11.16 | 
|---|---|
| 로컬 phpMyAdmin 클라이언트를 사용하여 원격 서버에 액세스하는 방법 (0) | 2022.11.16 | 
| Swing GUI에 공백 공간 제공 (0) | 2022.11.16 | 
| Java에서 기본 문자 집합/인코딩을 찾는 방법 (0) | 2022.11.16 | 
| POSTMAN 요청을 Curl로 변환 (0) | 2022.11.16 |