Почему конструктор Guid без параметров генерирует пустой GUID?

Что не так с помощью всего лишь следующего:

def black_jack(a, b):
    if a + b > 21:
        return 0
    else:
        return a + b

print black_jack(10, 5)

В блэкджеке может быть гораздо больше, чем две карты, но с вашим примером кажется, что вы предполагаете, что рука может иметь только две карты. Если вы разрешаете переменное количество карточек, вам нужно будет использовать итерируемый объект, как предложили другие:

def black_jack(values):
    total = sum(values)
    return 0 if total > 21 else total

print black_jack(10, 5)

Из документации для sum() :

sum( iterable [, start ])

Начало сеанса и элементы iterable слева направо и возвращает общее количество. start по умолчанию 0. истребимые элементы обычно являются числами, а начальное значение не может быть строкой.

Для некоторых вариантов использования есть хорошие альтернативы sum() . Предпочтительным, быстрым способом конкатенации последовательности строк является вызов ''.join(sequence). Чтобы добавить значения с плавающей запятой с расширенной точностью, см. math.fsum() . Чтобы объединить ряд итераций, рассмотрите возможность использования itertools.chain() .

Новое в версии 2.3.

blockquote>

17
задан BQ. 30 December 2008 в 20:45
поделиться

4 ответа

, Почему конструктор Guid без параметров генерирует пустой GUID, а не значение по умолчанию к сгенерированному как с Гуидом. NewGuid ()?

Короткий ответ: Поскольку язык/время выполнения не позволял разработчику типа Гуида определить конструктора по умолчанию.

Это не является только стандартным, что значение "созданной из значения по умолчанию" структуры является нулем, Вы просто не можете определить конструктора по умолчанию для структуры. Когда Вы говорите, что новый Гуид () время выполнения дает Вам новый объект, где все поля инициализируются к их значениям по умолчанию: http://msdn.microsoft.com/en-us/library/ah19swz4%28VS.71%29.aspx

Некоторое объяснение может быть найдено здесь: http://www.yoda.arachsys.com/csharp/faq/#struct.constructors

33
ответ дан 30 November 2019 в 11:27
поделиться

Это поведение согласовывается с остальной частью типов значения в платформе .NET. Когда "newing" тип значения, значение по умолчанию используется. Это просто, оказывается, значение по умолчанию для Гуида, подобного значению по умолчанию Int32 0.

3
ответ дан 30 November 2019 в 11:27
поделиться

Пустой гуид полезен для представления отсутствия Гуида. Так как типы значения не nullable (по умолчанию да, можно использовать nullable).

, Например, я использую Гуид в качестве свойств Id большая причина, с которой они очень легки работать. Так один способ видеть, был ли объект сохранен (Который является, когда это получает свой идентификатор), я могу проверить значение идентификатора против пустого гуида.

2
ответ дан 30 November 2019 в 11:27
поделиться

Я думаю, что это является стандартным, что значение по умолчанию, структуры или встроенного типа, является нулем.

2
ответ дан 30 November 2019 в 11:27
поделиться
Другие вопросы по тегам:

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