Проверка, чтобы видеть, присвоили ли переменной DateTime значение

Ответ от @roganjosh правильный, но я хотел добавить еще одну заметку, потому что я думаю, что это действительно важный момент о том, как работает Python. Это то, что люди, пришедшие из C / C ++ / Java (то есть почти все мы), должны не учиться при использовании Python.

Как я уже говорил в комментариях выше, в исходном коде от Марии Лауры, похоже, что вызов hit_stand предназначен для использования некоторых переменных (таких как stand) в качестве выходных переменных, а в Python мы не можем иметь «выходные переменные» в вызове функции. Но Мария Лаура упомянула, что «удар работает хорошо», что означает, что параметр player изменялся. Итак, , если мы не можем иметь «выходные переменные», то почему значение player модифицируется функцией hit_stand?

Когда код вызывает hit_stand, пять объекты передаются в функцию:

  • Объект списка, которому присваивается имя deck,
  • Объект списка, которому присваивается имя player, [ 1132]
  • Объект списка, которому присваивается имя dealer,
  • Логический объект, которому присваивается имя hand,
  • Логический объект, которому присваивается the name stand

Код вне этой функции также имеет имена (deck, player, dealer, first_hand, standing), указывающие на эти же пять объектов. В коде hit_stand метод .append() вызывается для объектов списков player и dealer, а метод .pop() вызывается для объекта deck, поэтому все эти объекты мутируют. Имена из вызывающей области все еще указывают на те же самые объекты, поэтому эти имена теперь будут видеть эти изменения.

История для hand и stand отличается. Внутри функции hit_stand hand и stand назначаются новые значения с помощью оператора =. Как отмечалось в , это превосходное описание Фредрика Лунда , оператор = в Python не «изменяет» переменную, он просто берет объект и связывает его с именем. Сами объекты не изменились, скорее они были заменены новыми булевыми объектами. Таким образом, переменная standing во внешней области все еще указывает на свой исходный логический объект, а переменная stand в функции указывает на совершенно новый логический объект, отличный от того, который находится во внешней области. Мы ничего не можем сделать с переменными hand и stand, которые будут видны во внешней области, не может быть такой вещи, как «передача по ссылке» или «выходной параметр», как у нас в других языках. [1140 ]

Эта концепция поначалу может показаться очень чуждой, пока мы не изучим то, что узнали в нашем обучении C / C ++ / Java.

118
задан Moo 20 November 2008 в 12:36
поделиться

1 ответ

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

startDate = startDate < DateTime.MinValue.AddDays(1) ? keepIt : resetIt

я просто проверяю, что принявшее значение по умолчанию значение спустя меньше чем день после начала времени. Работы как очарование.

0
ответ дан 24 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

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