পাইথন অকার্যকর রিটার্ন টাইপ টিকা


118

পাইথন ৩.x এ, কোনও ফাংশনের রিটার্ন টাইপ টীকাগুলি ব্যবহার করা সাধারণ:

def foo() -> str:
    return "bar"

"অকার্যকর" প্রকারের জন্য সঠিক টিকাটি কী?

আমি 3 টি বিকল্প বিবেচনা করছি:

  1. def foo() -> None:
    • যৌক্তিক আইএমও নয়, কারণ Noneএটি কোনও ধরণের নয়,
  2. def foo() -> type(None):
    • প্রাপ্তির জন্য আমার জানা সেরা সিনট্যাক্স ব্যবহার করে NoneType,
  3. def foo():
    • সুস্পষ্ট ফেরতের প্রকারের তথ্য বাদ দিন।

বিকল্প 2 আমার কাছে সবচেয়ে যুক্তিসঙ্গত বলে মনে হয় তবে আমি ইতিমধ্যে 1 এর কিছু উদাহরণ দেখেছি।


12
এফডাব্লুআইডাব্লু, পাইথনের voidরিটার্ন টাইপের সাথে ফাংশন নেই । সুস্পষ্ট ব্যতীত যে কোনও ফাংশন (বা কোনও ফাংশনে শাখা) returnফিরে আসবে None। আমি ধরে নিলাম যে ওপি বুঝতে পেরেছে, এই মন্তব্যটি বেশিরভাগই ভবিষ্যতের পাঠকদের উপকারের জন্য ...
প্রধানমন্ত্রী 2 রিং

ঠিক আছে, এই প্রশ্নটি এতটা জনপ্রিয় নয় যে "আমার ফাংশন পাইথনের কোনওটিই কেন ফেরায় না?" (আমি এই প্রশ্নটি করেছিলাম), তাই সম্ভবত বেশিরভাগ পাঠকই ইতিমধ্যে ডিফল্ট আচরণটি জানেন। দ্বিধা 1 বনাম 2 উত্তরের সমাধান হয়। তবে কী হবে 3? "পদ্ধতিগুলি" এর জন্য আমি অযথা বিশৃঙ্খলা ছাড়াই 3 বিকল্প পছন্দ করবো (সর্বোপরি, এই ফাংশনটি কোনও কিছুই ফেরায় না)।
টমাসজ গ্যান্ডার

@ টমাসজান্ডার সম্মত হন। যখন কোনও ফাংশন বা কোনও পদ্ধতিতে কোনও রিটার্নের বিবৃতি না থাকে তার রিটার্নের ধরণটি নির্দিষ্ট করা বাঞ্ছনীয়।
জিয়েকোমন

উত্তর:


128

এটি পিইপি 484 থেকে সরাসরি - হিন্টের ডকুমেন্টেশন টাইপ করুন :

কোনও প্রকার ইঙ্গিত ব্যবহার করার সময়, অভিব্যক্তিটিকে Noneসমতুল্য হিসাবে বিবেচনা করা হয় type(None)

এবং, আপনি দেখতে পারেন যে বেশিরভাগ উদাহরণগুলি Noneরিটার্ন টাইপ হিসাবে ব্যবহার করে ।


22
স্পষ্ট করতে, উপরের বিকল্প 1 চয়ন করুন।
অ্যাডাম নেলসন

6
NoReturn টাইপ পাইথন.আর.দেব / দেব / peps/ pep-0484/ # কি- نور রেটেন টাইপ ?
asmaier

13
পিইপি 484-এর উদ্ধৃতি দিয়ে এই প্রশ্ন অনুসারে @ এসমায়ার - টাইপ ইঙ্গিত NoReturn টাইপ ব্যবহৃত হয় "... এমন ফাংশনগুলি বর্ণনা করে যা সাধারণত কখনই ফিরে আসে না example উদাহরণস্বরূপ, এমন একটি ফাংশন যা নিঃশর্তভাবে একটি ব্যতিক্রম উত্থাপন করে ..."
রদ্রিগো লেগুনা

40

টিএলডিআর: একটি voidরিটার্ন টাইপ টীকাটির idiomatic সমতুল্য -> None

def foo() -> None:
    ...

এটি মেলে যা একটি ফাংশন ছাড়া returnবা কেবল একটি খালি returnমূল্যায়ন করে None

def void_func():  # unannotated void function
    pass

print(void())  # None

রিটার্নের ধরণ ছাড়ার অর্থ এই নয় যে কোনও রিটার্নের মান নেই। অনুযায়ী PEP 484 :

একটি পরীক্ষিত ফাংশনের জন্য, আর্গুমেন্টগুলির জন্য এবং রিটার্নের ধরণের জন্য ডিফল্ট টীকা Any

এর অর্থ হল মানটি গতিময়ভাবে টাইপ করা হয় এবং কোনও ক্রিয়াকলাপকে স্থিতিশীলভাবে সমর্থন করে । এটি ব্যবহারিকভাবে এর বিপরীত অর্থ void


পাইথনে টাইপ হিন্টিংয়ের জন্য কঠোরভাবে প্রকৃত প্রকারের প্রয়োজন হয় না। উদাহরণস্বরূপ, টীকা টাইপ নামের স্ট্রিং ব্যবহার করতে পারেন: Union[str, int], Union[str, 'int'], 'Union[str, int]'এবং বিভিন্ন রূপগুলো সমতুল্য।

একইভাবে, টাইপ টীকা Noneহিসেবে গণ্য করা হয় মানে "হল NoneType"। এটি কেবল রিটার্নের ধরণের জন্য নয়, যদিও আপনি এটি বেশিরভাগ ক্ষেত্রে সেখানে দেখতে পাবেন:

bar : None

def foo(baz: None) -> None:
    return None

এটি জেনেরিক ধরণের ক্ষেত্রেও প্রযোজ্য। উদাহরণস্বরূপ, যদি আপনি ব্যবহার করতে পারেন Noneমধ্যে Generator[int, None, None]জেনারেটরের গ্রহণ করা বা মান ফেরত দেয় না ইঙ্গিত।


যদিও PEP 484 দাড়ায় যে Noneউপায়ে type(None), আপনি করা উচিত নয় আধুনিক ফর্ম স্পষ্টভাবে ব্যবহার করুন। হিন্টিং স্পেসিফিকেশন টাইপের কোনও রূপ অন্তর্ভুক্ত করে নাtype(...) । এটি প্রযুক্তিগতভাবে একটি রানটাইম এক্সপ্রেশন এবং এর সমর্থন পুরোপুরি টাইপ চেকারের উপর নির্ভর করে। mypyপ্রকল্পের হয় সমর্থন মুছে ফেলার জন্য বিবেচনা করা জন্য type(None)এবং পাশাপাশি 484 থেকে এটা মুছে ফেলুন।

বা হতে পারে আমাদের PEP 484 আপডেট করা উচিত যাতে type(None)এটি টাইপ হিসাবে বৈধ নয় এবং Noneএকমাত্র সঠিক বানানটি কী? এটির করার সুস্পষ্ট উপায় ইত্যাদি - এবং কেবলমাত্র একটিই - সেখানে থাকতে হবে

--- জুক্কাএল, 18 মে 2018


4
3 য় বিকল্পটি আসলে মোটেও শূন্য নয় কেন তা বোঝানোর জন্য বিশাল চিত্কার।
никта
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.