0

2 つのバージョンがありますが、どちらも理由がわかりません。

最初のバージョン

from datetime import datetime, date

d = datetime.date(2011, 01, 01)
print(d)

どちらが与える

  File "timeSince.py", line 3
    d = datetime.date(2011, 01, 01)
                             ^
SyntaxError: invalid token

2 番目のバージョン

from datetime import datetime, date

d = datetime.date(2011, 1, 1)
print(d)

どちらが与える

Traceback (most recent call last):
  File "timeSince.py", line 3, in <module>
    d = datetime.date(2011, 1, 1)
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received
a 'int'

Python 3.3 の実行

4

4 に答える 4

3

datetime から日付をインポートしたので、これは機能します。

>>> d = date(2011, 1, 1)
>>> d
datetime.date(2011, 1, 1)

datetime前に置く必要はありません

モジュールからメソッドをインポートすると、その特定のメソッドをインポートしたため、モジュールの名前を使用してそのメソッドを呼び出す必要がなくなります!

ノート:

Python では整数の先頭に 0 を使用できないため、最初のインスタンスは無効な構文です。date(2011, 1, 1)次の方法ではなく、次の方法で使用する必要があります。date(2011, 01, 01)

于 2013-05-09T18:54:44.160 に答える
2

0Python 3 では許可されていない、先頭の数字を持つ整数リテラルを使用しています。

Python 2 では、これらは 8 進数として解釈されました。

>>> 017
15

しかし、構文はあいまいで、C のバックグラウンドを持っていない人にとっては混乱を招きます。現在は0o123、先頭を使用する構文のみ0oがサポートされています。C 8 進数の構文を知っている人が微妙なバグを作成するの防ぐために、古い構文は構文エラーにされました。

どちらのバージョンdatetime.date()も、インスタンスなしでメソッドを使用しようとします。date()代わりに使用したい:

>>> from datetime import date, datetime
>>> date(2011, 1, 1)
datetime.date(2011, 1, 1)
>>> datetime
<type 'datetime.datetime'>
>>> datetime.date
<method 'date' of 'datetime.datetime' objects>
于 2013-05-09T18:56:34.887 に答える
0

2 つの別々の問題。先頭に s を付けて整数を書き込むことはできません0(これが最初のバージョンが失敗する理由です)。モジュールから既にインポートdateしているdatetimeので、再参照しようとすべきではありません (これが 2 番目のバージョンが失敗する理由です)。 . コードは次のようになります。

from datetime import date
d = date(2011, 1, 1)
print(d) # prints "2011-01-01"
于 2013-05-09T18:58:41.510 に答える