Различие между урожаем в Python и урожаем в C#

В вопросе №1 разделим его на две части. Во-первых, увеличьте любой документ, который имеет «items.item_name», равный «my_item_two». Для этого вам придется использовать позиционный оператор «$». Что-то вроде:

 db.bar.update( {user_id : 123456 , "items.item_name" : "my_item_two" } , 
                {$inc : {"items.$.price" : 1} } , 
                false , 
                true);

Обратите внимание, что это только увеличит первый подобранный поддокумент в любом массиве (так что если у вас есть другой документ в массиве с «item_name», равным «my_item_two», он не будет получить прирост). Но это может быть то, что вы хотите.

Вторая часть сложнее. Мы можем вывести новый элемент в массив без «my_item_two» следующим образом:

 db.bar.update( {user_id : 123456, "items.item_name" : {$ne : "my_item_two" }} , 
                {$addToSet : {"items" : {'item_name' : "my_item_two" , 'price' : 1 }} } ,
                false , 
                true);

Для вашего вопроса №2 ответ проще. Чтобы увеличить общую сумму и цену item_three в любом документе, который содержит «my_item_three», вы можете одновременно использовать оператор $ inc на нескольких полях. Что-то вроде:

db.bar.update( {"items.item_name" : {$ne : "my_item_three" }} ,
               {$inc : {total : 1 , "items.$.price" : 1}} ,
               false ,
               true);
25
задан maxyfc 9 November 2009 в 23:13
поделиться

3 ответа

C # yield return эквивалентен Python yield , а yield break - это просто return в Python.

Кроме эти незначительные различия имеют в основном одну и ту же цель.

29
ответ дан 28 November 2019 в 20:38
поделиться

Важное отличие, которое следует отметить, в дополнение к другим ответам, заключается в том, что yield в C # нельзя использовать как выражение, только как утверждение.

Пример использования выражения yield в Python (пример вставлен из здесь ):

def echo(value=None):
  print "Execution starts when 'next()' is called for the first time."
  try:
    while True:
       try:
         value = (yield value)
       except GeneratorExit:
         # never catch GeneratorExit
         raise
       except Exception, e:
         value = e
     finally:
       print "Don't forget to clean up when 'close()' is called."

generator = echo(1)
print generator.next()
# Execution starts when 'next()' is called for the first time.
# prints 1

print generator.next()
# prints None

print generator.send(2)
# prints 2

generator.throw(TypeError, "spam")
# throws TypeError('spam',)

generator.close()
# prints "Don't forget to clean up when 'close()' is called."
0
ответ дан Max Desiatov 15 October 2019 в 15:46
поделиться

Это может помочь вам понять это: Итераторы в C #, Python и Ruby

14
ответ дан 28 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

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