প্রকারের ইঙ্গিত সহ কীভাবে "nlalable" রিটার্ন টাইপ নির্দিষ্ট করবেন


177

ধরুন আমার একটি ফাংশন রয়েছে:

def get_some_date(some_argument: int=None) -> %datetime_or_None%:
    if some_argument is not None and some_argument == 1:
        return datetime.utcnow()
    else:
        return None

কিছু হতে পারে তার জন্য আমি কীভাবে রিটার্ন টাইপ নির্দিষ্ট করব None?

উত্তর:


279

আপনি খুঁজছেন Optional

যেহেতু আপনার রিটার্নের ধরনটি datetime(যেমন প্রত্যাবর্তিত হয়েছে datetime.utcnow()) হতে পারে বা Noneআপনার ব্যবহার করা উচিত Optional[datetime]:

from typing import Optional

def get_some_date(some_argument: int=None) -> Optional[datetime]:
    # as defined

টাইপিংয়ের ডকুমেন্টেশন থেকে Optionalশর্টহ্যান্ড:

Optional[X]সমতূল্য Union[X, None]

যেখানে Union[X, Y]ধরণের মান Xবা এর অর্থ Y


অন্যরা যদি হোঁচট খায় Optionalএবং এর অর্থ বুঝতে না পারে এমন উদ্বেগের কারণে আপনি যদি সুস্পষ্ট হতে চান তবে আপনি সর্বদা ব্যবহার করতে পারেন Union:

from typing import Union

def get_some_date(some_argument: int=None) -> Union[datetime, None]:

তবে আমি সন্দেহ করি এটি একটি ভাল ধারণা, Optionalএকটি সূচক নাম এবং এটি কয়েকটা কীস্ট্রোক সংরক্ষণ করে।

@ মাইকেল0 Union[T, None]x2a এর মন্তব্যে যেমন উল্লেখ করা হয়েছে তেমন ট্রান্সফর্ম হয়েছে Union[T, type(None)]যাতে typeএখানে ব্যবহারের দরকার নেই।

দৃশ্যত এগুলি পৃথক হতে পারে তবে ক্রমগতভাবে, উভয় ক্ষেত্রেই ফলাফলটি একই রকম হয় ; * এUnion[datetime.datetime, NoneType] সঞ্চিত ধরণ হবে :get_some_date.__annotations__

>>> from typing import get_type_hints
>>> print(get_type_hints(get_some_date))
{'return': typing.Union[datetime.datetime, NoneType],
 'some_argument': typing.Union[int, NoneType]}

*typing.get_type_hints অবজেক্টের __annotations__বৈশিষ্ট্যটি সরাসরি অ্যাক্সেস না করে দখল করতে ব্যবহার করুন ।


9
আপনি সহজ Union[datetime, type(None)]করতে পারেন Union[datetime, None]- পিইপি 484 অনুসারে , Noneকোনও প্রকার টীকাতে ব্যবহার করে সর্বদা সমতুল্য হিসাবে বিবেচিত হয় type(None)। ( typingডকুমেন্টেশনটি Noneবেশিরভাগ ক্ষেত্রে ব্যবহার করে তবে এখানে তা নয়, যা একটি তদারকি)।
মাইকেল0x2a

@ মাইকেল0x2a এটি জানেন না, আকর্ষণীয়। এটি যোগ করেছে :)
দিমিত্রিস ফাসারাকিস হিলিয়ার্ড

4
আমি এখনই ঠিক করেছি এবং এখনই এটি সংশোধন করার জন্য একটি প্যাচ জমা দিয়েছি , সুতরাং আশাকরি ডক্সগুলি অদূর ভবিষ্যতে এটি সম্পর্কে আরও সুসংগত হবে!
মাইকেল0x2a

1
Optional[T]টাইপ কার্যকরী প্রোগ্রামিং কমিউনিটি সুপরিচিত হয়। পাঠক কেবল এটির অর্থ বুঝতে পারবেন না Union[T, None], তবে ব্যবহারের ধরণটিও স্বীকার করবেন যে কোনও অর্থবহ উত্তর না থাকলে ত্রুটি রয়েছে, বা ফলাফলটি পাওয়া যায়নি তবে ফাংশনটি কোনওটিই ফিরিয়ে আনবে না।
সপ্তাহে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.