টিএল; ডিআর
আমরা দুটি লজিকাল অপারেটর andএবং এর দুটি আচরণের সংক্ষিপ্তসার দিয়ে শুরু করি or। এই প্রতিমাগুলি নীচে আমাদের আলোচনার ভিত্তি তৈরি করবে।
and
যদি কোনও থাকে তবে প্রথম মিথ্যা মানটি ফিরিয়ে দিন, অন্যথায় প্রকাশের শেষ মানটি ফিরিয়ে দিন।
or
যদি থাকে তবে প্রথম সত্যবাদী মানটি ফিরিয়ে দিন, অন্যথায় প্রকাশের শেষ মানটি ফিরিয়ে দিন।
আচরণগুলি ডক্সগুলিতেও সংক্ষিপ্তসারিত হয় , বিশেষত এই টেবিলটিতে:

অপারেটর নির্বিশেষে কোনও বুলিয়ান মান ফেরত পাওয়া একমাত্র notঅপারেটর।
"সত্যতা", এবং "সত্যবাদী" মূল্যায়ন
বিবৃতি
len(args) and max(args) - min(args)
একটি হল খুব pythonic সংক্ষিপ্ত (এবং তর্কসাপেক্ষে কম পাঠযোগ্য) বলছে "যদি প্রণালী argsখালি না থাকে, ফলে আসতে max(args) - min(args)", অন্যথায় আসতে 0। সাধারণভাবে এটি কোনও if-elseঅভিব্যক্তির আরও সংক্ষিপ্ত প্রতিনিধিত্ব । উদাহরণ স্বরূপ,
exp1 and exp2
(প্রায়) অনুবাদ করা উচিত:
r1 = exp1
if r1:
r1 = exp2
বা, সমতুল্য,
r1 = exp2 if exp1 else exp1
একইভাবে,
exp1 or exp2
(প্রায়) অনুবাদ করা উচিত:
r1 = exp1
if not r1:
r1 = exp2
বা, সমতুল্য,
r1 = exp1 if exp1 else exp2
যেখানে exp1এবং exp2নির্বিচারে পাইথন অবজেক্টস বা এক্সপ্রেশন যা কিছু বস্তু ফেরত দেয়। এখানে লজিকাল andএবং orঅপারেটরগুলির ব্যবহারগুলি বোঝার মূল চাবিকাঠিটি বোঝা যায় যে সেগুলি বুলিয়ান মানগুলি চালানো বা ফিরিয়ে দেওয়ার মধ্যে সীমাবদ্ধ নয়। সত্যতা মান সহ যে কোনও বস্তুর এখানে পরীক্ষা করা যেতে পারে। এর মধ্যে রয়েছে int, str, list, dict, tuple, set, NoneType, এবং ব্যবহারকারী সংজ্ঞায়িত বস্তু। সংক্ষিপ্ত সার্কিট বিধিগুলি এখনও প্রযোজ্য।
তবে সত্যতা কী?
এটি শর্তযুক্ত অভিব্যক্তিগুলিতে ব্যবহৃত হলে কীভাবে বস্তুর মূল্যায়ন করা হয় তা বোঝায়। @ পেট্রিক হাহ এই পোস্টে সত্যতার সুন্দরভাবে সংক্ষিপ্তসার জানিয়েছে ।
নিম্নলিখিতগুলি বাদ দিয়ে সমস্ত মানকে "সত্যবাদী" হিসাবে বিবেচনা করা হয়, যা "মিথ্যা"
None
False
0
0.0
0j
Decimal(0)
Fraction(0, 1)
[] - খালি list
{} - খালি dict
() - খালি tuple
'' - খালি str
b'' - খালি bytes
set() - খালি set
- একটি খালি
range, মতrange(0)
- যার জন্য বস্তু
obj.__bool__() প্রত্যাবর্তন False
obj.__len__() প্রত্যাবর্তন 0
একটি "সত্যবাদী" মান ifবা while
বিবৃতি দ্বারা সম্পাদিত চেকটি পূরণ করবে । আমরা boolমানগুলি Trueএবং থেকে পৃথক করতে "সত্যবাদী" এবং "মিথ্যা" ব্যবহার করি
False।
কিভাবে andকাজ করে
এই উদাহরণগুলিতে এই অপারেটররা কীভাবে আলোচনা করবেন সে বিষয়ে আমরা আলোচনার জন্য একটি ওপির প্রশ্নের ভিত্তি তৈরি করি।
সংজ্ঞা সহ একটি ফাংশন দেওয়া
def foo(*args):
...
শূন্য বা আরও বেশি যুক্তির তালিকার নূন্যতম এবং সর্বাধিক মানের মধ্যে পার্থক্যটি কীভাবে ফিরিয়ে দেব?
সর্বনিম্ন এবং সর্বাধিক সন্ধান করা সহজ (ইনবিল্ট ফাংশনগুলি ব্যবহার করুন!)। এখানে কেবলমাত্র ছিনতাই কর্নার কেসটি যথাযথভাবে পরিচালনা করছে যেখানে আর্গুমেন্ট তালিকা খালি থাকতে পারে (উদাহরণস্বরূপ, কল করা foo())। andঅপারেটরকে ধন্যবাদ আমরা একক লাইনে উভয়ই করতে পারি :
def foo(*args):
return len(args) and max(args) - min(args)
foo(1, 2, 3, 4, 5)
foo()
যেহেতু andব্যবহৃত হয়, দ্বিতীয় প্রকাশটিও যদি প্রথম হয় তবে তা মূল্যায়ন করতে হবে True। মনে রাখবেন, যদি প্রথম অভিব্যক্তিটি সত্যবাদী বলে মূল্যায়ন করা হয় তবে প্রত্যাবর্তনের মানটি সর্বদা দ্বিতীয় প্রকাশের ফলাফল । যদি প্রথম অভিব্যক্তিটি ফালসি হিসাবে মূল্যায়ন করা হয়, তবে প্রত্যাবর্তিত ফলাফলটি প্রথম প্রকাশের ফলাফল।
উপরের ফাংশনে, যদি fooএক বা একাধিক যুক্তি প্রাপ্ত হয় তবে (ধনাত্মক সংখ্যা) এর len(args)চেয়ে বড় হয় 0, সুতরাং প্রাপ্ত ফলাফলটি হয় max(args) - min(args)। OTOH, যদি কোন যুক্তি গৃহীত হয়, len(args)হয় 0যা Falsy, এবং 0ফিরিয়ে দেওয়া হয়।
মনে রাখবেন যে এই ফাংশনটি লেখার একটি বিকল্প উপায় হ'ল:
def foo(*args):
if not len(args):
return 0
return max(args) - min(args)
বা আরও সংক্ষিপ্তভাবে,
def foo(*args):
return 0 if not args else max(args) - min(args)
যদি অবশ্যই, এই ফাংশনগুলির মধ্যে কোনওরকম কোনও ধরণের চেকিং হয় না, সুতরাং আপনি প্রদত্ত ইনপুটটিকে পুরোপুরি বিশ্বাস না করলে এই নির্মাণগুলির সরলতার উপর নির্ভর করবেন না ।
কিভাবে orকাজ করে
আমি orএকইরকম ফ্যাশনে কাজটি একটি স্বীকৃত উদাহরণ সহ ব্যাখ্যা করি ।
সংজ্ঞা সহ একটি ফাংশন দেওয়া
def foo(*args):
...
আপনি কীভাবে fooসমস্ত নম্বর ফেরত দিতে সম্পূর্ণ করবেন 9000?
আমরা orএখানে কোণার কেস পরিচালনা করতে ব্যবহার করি । আমরা fooহিসাবে সংজ্ঞায়িত :
def foo(*args):
return [x for x in args if x > 9000] or 'No number over 9000!'
foo(9004, 1, 2, 500)
foo(1, 2, 3, 4)
fooসমস্ত সংখ্যা ধরে রাখার জন্য তালিকায় একটি পরিস্রাবণ সম্পাদন করে 9000। যদি এই জাতীয় কোনও সংখ্যা উপস্থিত থাকে তবে তালিকা বোঝার ফলাফলটি একটি খালি নয় এমন তালিকা যা সত্যবাদী, তাই এটি ফিরে আসে (এখানে ক্রিয়াকলাপে সংক্ষিপ্ত সার্কিট)। যদি এরকম কোনও নম্বর না থাকে, তবে তালিকার []কমের ফলাফলটি মিথ্যা। সুতরাং দ্বিতীয় প্রকাশটি এখন মূল্যায়ন করা হয় (একটি খালি নয়) স্ট্রিং এবং ফিরে আসে।
শর্তসাপেক্ষ ব্যবহার করে, আমরা এই ফাংশনটি আবার লিখতে পারি,
def foo(*args):
r = [x for x in args if x > 9000]
if not r:
return 'No number over 9000!'
return r
আগের মতো, ত্রুটি পরিচালনার ক্ষেত্রে এই কাঠামোটি আরও নমনীয়।
and(পাশাপাশি পাশাপাশিor) বুলিয়ান মানগুলির সাথে কাজ করার বা সীমাবদ্ধ নয়।