([১,০] এর মধ্যে ১ জন == সত্য) মিথ্যাতে কেন মূল্যায়ন করে?


153

আমি যখন এই প্রশ্নের উত্তরের দিকে তাকাচ্ছিলাম তখন আমি নিজের উত্তরটি বুঝতে পারি নি।

এটি কীভাবে পার্স করা হচ্ছে তা আমি সত্যি বুঝতে পারি না। দ্বিতীয় উদাহরণটি কী মিথ্যা প্রত্যাবর্তন করবে?

>>> 1 in [1,0]             # This is expected
True
>>> 1 in [1,0] == True     # This is strange
False
>>> (1 in [1,0]) == True   # This is what I wanted it to be
True
>>> 1 in ([1,0] == True)   # But it's not just a precedence issue!
                           # It did not raise an exception on the second example.

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable

কোন সাহায্যের জন্য ধন্যবাদ। আমি মনে করি আমি অবশ্যই কিছু স্পষ্টরূপে মিস করছি।


আমি মনে করি এটি লিঙ্কযুক্ত সদৃশ থেকে সূক্ষ্মভাবে পৃথক:

কেন 0 <0 == 0 অভিব্যক্তি পাইথনে মিথ্যা প্রত্যাবর্তন করে?

উভয় প্রশ্নই হ'ল প্রকাশের মানবিক বোধগম্যতার সাথে। অভিব্যক্তিটি মূল্যায়নের দুটি উপায় (আমার মনে) আছে বলে মনে হয়েছিল। অবশ্যই দুটিই সঠিক ছিল না, তবে আমার উদাহরণে শেষ ব্যাখ্যাটি অসম্ভব।

আপনি তাকিয়ে 0 < 0 == 0প্রতিটি অর্ধেক মূল্যায়ন করা এবং একটি অভিব্যক্তি হিসাবে অর্থবোধ কল্পনা করতে পারেন:

>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True

সুতরাং লিঙ্ক উত্তর দেয় কেন এটি মূল্যায়ন করে False:

>>> 0 < 0 == 0
False

তবে আমার উদাহরণটি 1 in ([1,0] == True)একটি অভিব্যক্তি হিসাবে বোঝায় না, সুতরাং সেখানে দুটি (স্বীকার করে ভুল) সম্ভাব্য ব্যাখ্যার পরিবর্তে কেবল একটিই সম্ভব বলে মনে হচ্ছে:

>>> (1 in [1,0]) == True

1
অপারেটর অগ্রাধিকার ... এর ==সাথে বাঁধাগুলি আরও শক্ত হয় in, সুতরাং [1,0] == Trueপ্রথমে মূল্যায়ন হয়, তারপরে ফলাফলটি খাওয়ানো যায় 1 in other_result
মার্ক বি

আমি পাইথন -২. same ট্যাগটি সরিয়েছি, যেহেতু পাইথন ৩.২ একইভাবে আচরণ করে।
lvc

1
@ মার্ক বি: দ্বিতীয় প্রকাশটি ব্যাখ্যা করে না
স্কট হান্টার

32
@ মারকবি, প্রশ্নটিতে এই ব্যাখ্যাটিকে অস্বীকার করার জন্য প্রথম বন্ধনী ব্যবহার করে একটি পরীক্ষা অন্তর্ভুক্ত করা হয়েছে।
মার্ক রান্সম

উত্তর:


194

পাইথন আসলে এখানে তুলনা অপারেটর প্রয়োগ করে। এক্সপ্রেশন অনুবাদ করা হয়

(1 in [1, 0]) and ([1, 0] == True)

যা স্পষ্টত হয় False

এটি মত প্রকাশের জন্যও ঘটে

a < b < c

যা অনুবাদ

(a < b) and (b < c)

( bদুবার মূল্যায়ন না করে)

দেখুন পাইথন ভাষা ডকুমেন্টেশন আরও বিস্তারিত জানার জন্য।


40
এর অতিরিক্ত প্রমাণ, 1 in [1, 0] == [1, 0]মূল্যায়ন করে True
অ্যান্ড্রু ক্লার্ক

9
আমি দীর্ঘকাল ধরে এটিকে একটি ভাষা ম্যারাড হিসাবে ভেবেছি। আমি পছন্দ করতাম inঅপারেটরের তুলনা অপারেটরগুলির তুলনায় উচ্চতর অগ্রাধিকার রয়েছে এবং এটি চেইন নয়। তবে সম্ভবত আমি একটি ব্যবহারের কেস মিস করছি।
স্টিভেন রাম্বালস্কি

3
সুন্দর ধরা, আমি এটা ভাবিনি। শৃঙ্খলাবদ্ধ হওয়ার অনুমতি দেওয়ার পক্ষে তেমন কোনও অর্থ হয় না in- সর্বোপরি x < y < zবোধ হয় তবে এর সাথে এতটা নয়x in y in z
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

7
@ এসভেন দরকারী: সম্ভবত। পাঠযোগ্য: অবশ্যই না। পাইথন এই কনভেনশনটির সাথে সাধারণ গাণিতিক টাইপোগ্রাফির অনুকরণ করার পরিকল্পনা করে তবে এটি যখন ব্যবহার করা হয় তখন inআর এটি ক্ষেত্রে থাকে না এবং এটিকে যথেষ্ট পাল্টা স্বজ্ঞাত করে তোলে।
কনরাড রুডল্ফ

6
@ কনরাডরুডল্ফ: আমি গণিতের পাঠ্যগুলিতে "1 ≤ x ∈ ℝ" এর মত একাধিকবার দেখেছি, তবে আমি মূলত আপনার সাথে একমত হই।
সোভেন মারনাচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.