পাইথনে "টেস্ট" ননটাইপ কীভাবে করবেন?


398

আমার একটি পদ্ধতি রয়েছে যা কখনও কখনও ননটাইপ মানটি দেয় returns সুতরাং আমি কীভাবে এমন কোনও পরিবর্তনশীলকে প্রশ্ন করতে পারি যা ননটাইপ? উদাহরণস্বরূপ, আমার যদি পদ্ধতিটি ব্যবহার করা দরকার

if not new:
    new = '#'

আমি জানি যে এটিই ভুল উপায় এবং আমি আশা করি আপনি কী বোঝাতে চেয়েছিলেন তা বুঝতে পেরেছেন।


আমার মনে হয় এটির উত্তর এখানে দেওয়া হয়েছিল এবং সম্ভবত কোথাও আগে
ইওরোডম

যদি Noneআপনার পদ্ধতির bool(returnValue)সমান হয়ে ওঠে এমন একমাত্র মূল্য যদি হয় Falseতবে if not new:অবশ্যই ভাল কাজ করা উচিত। এটি কখনও কখনও অন্তর্নির্মিত re.matchলিবগুলিতে ঘটে থাকে - উদাহরণস্বরূপ, কোনওটি নয় বা সত্যবাদী ম্যাচের বস্তুটি প্রদান করে।
কেভিন

এছাড়াও পাইথন সম্পর্কে nullএবং আমার উত্তর এখানে দেখুনNone
মাইকেল একোকা

উত্তর:


631

সুতরাং আমি কীভাবে এমন কোনও পরিবর্তনশীলকে প্রশ্ন করতে পারি যা ননটাইপ?

isঅপারেটর ব্যবহার করুন

if variable is None:

কেন এই কাজ করে?

যেহেতু পাইথনের Noneএকমাত্র সিঙ্গলটন অবজেক্ট NoneType, তাই আমরা isকোনও চলক রয়েছে কিনা তা পরীক্ষা করতে অপারেটরটি ব্যবহার করতে পারি None

isদস্তাবেজ থেকে উদ্ধৃতি ,

অপারেটার isএবং is notবস্তুর পরিচয়ের জন্য পরীক্ষা: x is yযদি এবং কেবল যদি সত্য xএবং yএকই বস্তুর হয়। x is not yবিপরীত সত্যের মান দেয়।

যেহেতু মাত্র এক উদাহরণস্বরূপ হতে পারে None, isচেক করতে পছন্দের পথ হবে None


ঘোড়ার মুখ থেকে শুনুন

পাইথনের কোডিং স্টাইলের গাইডলাইনগুলি উদ্ধৃত করে - পিইপি -008 (যৌথভাবে গাইড নিজেই সংজ্ঞায়িত করেছেন),

Singletons তুলনা পছন্দ করি Noneসবসময় সঙ্গে সম্পন্ন করতে হবে isঅথবাis not , কখনো সমতা অপারেটার


সুতরাং এর মধ্যে পার্থক্য কি == Noneএবং is None?
NoName

@ নামনাম সম্মানের সাথে None, তারা উভয়ই একই রকম ফল পাবে।
thefourtheye

1
কোনও pandasডেটা ফ্রেম রয়েছে কিনা তা তুলনা করলে এটি কাজ করে না - তার জন্য, আমি type(df) is type(None)এড়াতে ব্যবহার করি :The truth value of a DataFrame is ambiguous
মার্ক ম্যাক্সমিস্টার


27

এছাড়া দিয়ে করা যাবে isinstanceঅনুযায়ী অ্যালেক্স হল এর উত্তর :

>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstance স্বজ্ঞাতও তবে জটিলতা রয়েছে যে এটির জন্য লাইনটি প্রয়োজন

NoneType = type(None)

যা মত ধরনের জন্য প্রয়োজন হয় না intএবং float


যেহেতু আপনি না উপশ্রেণী করতে পারেন NoneTypeএবং যেহেতু Noneএকটি Singleton হয়, isinstanceসনাক্ত করতে ব্যবহার করা উচিত নয় None- পরিবর্তে আপনি গৃহীত উত্তর বলছেন কি করা উচিত, এবং ব্যবহার is Noneবা is not None
অ্যারন হল

18

হিসাবে অ্যারন হলের মন্তব্য দ্বারা ইঙ্গিত:

যেহেতু আপনি না উপশ্রেণী করতে পারেন NoneTypeএবং যেহেতু Noneএকটি Singleton হয়, isinstanceসনাক্ত করতে ব্যবহার করা উচিত নয় None- পরিবর্তে আপনি গৃহীত উত্তর বলছেন কি করা উচিত, এবং ব্যবহার is Noneবা is not None


আসল উত্তর:

এলাচের উত্তর ছাড়াও অতিরিক্ত লাইন ছাড়া সহজতম উপায় সম্ভবত:
isinstance(x, type(None))

সুতরাং আমি কীভাবে এমন কোনও পরিবর্তনশীলকে প্রশ্ন করতে পারি যা ননটাইপ? পদ্ধতি যদি আমার ব্যবহার করা প্রয়োজন

ব্যবহারের জন্য- স্টেটমেন্টের মধ্যে isinstance()কোনও প্রয়োজন হয় না :isif

if isinstance(x, type(None)): 
    #do stuff

অতিরিক্ত তথ্য
আপনি ডকুমেন্টেশনেisinstance() উল্লিখিত হিসাবে এক বিবৃতিতে একাধিক প্রকারের জন্যও পরীক্ষা করতে পারেন । একটি tuple হিসাবে টাইপ লিখুন।

isinstance(x, (type(None), bytes))

1
যেহেতু আপনি না উপশ্রেণী করতে পারেন NoneTypeএবং যেহেতু Noneএকটি Singleton হয়, isinstanceসনাক্ত করতে ব্যবহার করা উচিত নয় None- পরিবর্তে আপনি গৃহীত উত্তর বলছেন কি করা উচিত, এবং ব্যবহার is Noneবা is not None
অ্যারন হল :

1
এই উত্তরটির জন্য দরকারী ছিলpython 3.6.7
সন্তোষ ধইপুলে চন্দ্রকণ্ঠ

@ অ্যারোনহল কেন ব্যবহার করা isinstance উচিত নয় ? আমি বুঝতে পারি যে isএটি পছন্দ করা উচিত, তবে এমন কিছু ঘটনা রয়েছে যেখানে আইসনস্ট্যান্স ফর্মটি আরও প্রাকৃতিক অনুভূত হয় (যেমন একবারে একাধিক প্রকারের জন্য পরীক্ষা করা isinstance(x, (str, bool, int, type(None))))। এটি কি কেবল একটি ব্যক্তিগত পছন্দ বা আমি যে অজানা সে সম্পর্কে সতর্কতা রয়েছে?
কনচিলেক্ল্যাটার

আপনার পরামর্শের জন্য @Conchylicultor মূল্যবান: 1. বিশ্বব্যাপী বর্ণন-আপের জন্য type2. তারপর কলিং এটা 3. তারপর ধরণ আপ খুঁজছেন None- যখন Noneউভয় একটি Singleton এবং একটি শব্দ হয়। অন্য নেতিবাচক দিক: ৪. এটি খুব অ-মানক এবং লোকে যখন আপনার কোডটি দেখছে তখন ভ্রু বাড়াবে। x is Noneএকটি আরও অনুকূলিত চেক। আমি প্রস্তাব দেব x is None or isinstance(x, (str, bool, int))- তবে আমি এমনও পরামর্শ দিচ্ছি যে আপনি যখন এই জাতীয় টাইপ পরীক্ষা করছেন তখন খুব বেশি কিছু মিল নেই এমন ধরণের জন্য আপনি কী করছেন ...
অ্যারন হল

4

নিশ্চিত নয় যে এটি প্রশ্নের উত্তর দেয়। তবে আমি জানি এটি বের করতে আমার কিছুটা সময় লেগেছে। আমি একটি ওয়েবসাইটের মধ্য দিয়ে লুপিং করছি এবং হঠাৎ লেখকের নাম আর নেই। সুতরাং একটি চেক বিবৃতি প্রয়োজন।

if type(author) == type(None):
     my if body
else:
    my else body

এই ক্ষেত্রে লেখক যে কোনও পরিবর্তনশীল Noneহতে পারে এবং আপনি যে কোনও ধরণের জন্য যাচাই করে যাচ্ছেন can


যেহেতু Noneএকটি Singleton হয়, typeসনাক্ত করতে ব্যবহার করা উচিত নয় None- পরিবর্তে আপনি গৃহীত উত্তর বলছেন কি করা উচিত, এবং ব্যবহার is Noneবা is not None
অ্যারন হল

2

পাইথন ২.7:

x = None
isinstance(x, type(None))

অথবা

isinstance(None, type(None))

==> সত্য


1
যেহেতু আপনি না উপশ্রেণী করতে পারেন NoneTypeএবং যেহেতু Noneএকটি Singleton হয়, isinstanceসনাক্ত করতে ব্যবহার করা উচিত নয় None- পরিবর্তে আপনি গৃহীত উত্তর বলছেন কি করা উচিত, এবং ব্যবহার is Noneবা is not None
অ্যারন হল :

ওহ ঠিক আছে! ধন্যবাদ!
পেস্কো

0

আমি আশা করি এই উদাহরণটি আপনার পক্ষে সহায়ক হবে)

print(type(None) # NoneType

সুতরাং, আপনি পরিবর্তনশীল নামের প্রকারটি পরীক্ষা করতে পারেন

#Example
name = 12 # name = None
if type(name) != type(None):
    print(name)
else:
    print("Can't find name")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.