tutorial - python w3schools
Python একটি ত্রৈমাসিক শর্তাধীন অপারেটর আছে? (16)
পাইথনের কোনও তৃতীয় শর্তযুক্ত অপারেটর না থাকলে অন্য ভাষার গঠনগুলির সাহায্যে অনুকরণ করা কি সম্ভব?
Python একটি ত্রৈমাসিক শর্তাধীন অপারেটর আছে?
হ্যাঁ। ব্যাকরণ ফাইল থেকে :
test: or_test ['if' or_test 'else' test] | lambdef
আগ্রহের অংশ হল:
or_test ['if' or_test 'else' test]
সুতরাং, একটি ত্রৈমাসিক শর্তাধীন অপারেশন ফর্ম হল:
expression1 if expression2 else expression3
expression3
অলসভাবে মূল্যায়ন করা হবে (অর্থাৎ, বুলিয়ান প্রেক্ষাপটে expression2
মিথ্যা হলেই মূল্যায়ন করা হবে)। এবং পুনরাবৃত্তিমূলক সংজ্ঞাটির কারণে, আপনি তাদের অনির্দিষ্টকালের জন্য চেনেন (যদিও এটি খারাপ শৈলী হিসাবে বিবেচিত হতে পারে।)
expression1 if expression2 else expression3 if expression4 else expression5 # and so on
ব্যবহারের উপর একটি নোট:
উল্লেখ্য যে প্রতিটি if
else
একটি সঙ্গে অনুসরণ করা আবশ্যক। লোকেশন তালিকা বোঝার এবং জেনারেটর এক্সপ্রেশনগুলি শিখতে এটি একটি কঠিন পাঠ হতে পারে - নিম্নলিখিতগুলি কাজ করবে না, যেমন পাইথন অন্যরকমের জন্য তৃতীয় প্রকাশের প্রত্যাশা করে:
[expression1 if expression2 for element in iterable]
# ^-- need an else here
যা একটি SyntaxError: invalid syntax
উত্থাপন করে SyntaxError: invalid syntax
। সুতরাং উপরেরটি লজিকের একটি অসম্পূর্ণ অংশ (সম্ভবত ব্যবহারকারীটি মিথ্যা শর্তে কোনও অপারেটিং সিস্টেমের প্রত্যাশা করে) অথবা অভিপ্রায়টি ফিল্টার হিসাবে ব্যবহার করার উদ্দেশ্যে যা হতে পারে তা হল - নিম্নলিখিত নোটগুলি যে নথিবদ্ধ তা হল পাইথন:
[expression1 for element in iterable if expression2]
expression2
তালিকা বোঝার জন্য একটি ফিল্টার হিসাবে কাজ করে, এবং একটি ত্রৈমাসিক শর্তাধীন অপারেটর নয়।
আরো সংকীর্ণ ক্ষেত্রে বিকল্প সিনট্যাক্স:
আপনি এটি লিখতে কিছুটা বেদনাদায়ক এটি খুঁজে পেতে পারেন:
expression1 if expression1 else expression2
expression1
উপরের ব্যবহার সঙ্গে দুবার মূল্যায়ন করা হবে। এটি কেবল একটি স্থানীয় পরিবর্তনশীল যদি এটি অকার্যকর সীমাবদ্ধ করতে পারেন। যাইহোক, এই ব্যবহারের ক্ষেত্রে একটি সাধারণ এবং পারফরম্যান্স পাইথনিক idiom ব্যবহার or
শর্টকাট আচরণ ব্যবহার করা হয়:
expression1 or expression2
যা semantics সমতুল্য। মনে রাখবেন যে কিছু স্টাইল-গাইড এই ব্যবহারের সীমাবদ্ধতার ভিত্তিতে সীমাবদ্ধ করতে পারে - এটি খুব সামান্য সিনট্যাক্সে অনেক অর্থ প্যাক করে।
বিভিন্ন প্রোগ্রামিং ভাষা মধ্যে টার্নারি অপারেটর
এখানে আমি কয়েকটি প্রোগ্রামিং ভাষাগুলির মধ্যে ternary operator
মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য দেখানোর চেষ্টা করি।
জাভাস্ক্রিপ্ট মধ্যে Ternary অপারেটর
var a = true ? 1 : 0;
# 1
var b = false ? 1 : 0;
# 0
রুবি মধ্যে টার্নারি অপারেটর
a = true ? 1 : 0
# 1
b = false ? 1 : 0
# 0
Scala মধ্যে টার্নারি অপারেটর
val a = true ? 1 | 0
# 1
val b = false ? 1 | 0
# 0
আর প্রোগ্রামিং মধ্যে টার্নারি অপারেটর
a <- if (TRUE) 1 else 0
# 1
b <- if (FALSE) 1 else 0
# 0
পাইথন মধ্যে টার্নারি অপারেটর
a = 1 if True else 0
# 1
b = 1 if False else 0
# 0
এখন আপনি পাইথন ভাষা সৌন্দর্য দেখতে পারেন। তার অত্যন্ত পাঠযোগ্য এবং রক্ষণযোগ্য।
@up:
দুর্ভাগ্যক্রমে, দী
(falseValue, trueValue)[test]
সমাধান সংক্ষিপ্ত বর্তনী আচরণ আছে না; এইভাবে falseValue এবং trueValue উভয় শর্ত নির্বিশেষে মূল্যায়ন করা হয়। এটি suboptimal বা এমনকি বাগিবি হতে পারে (অর্থাত্ trueValue এবং falseValue উভয় পদ্ধতি হতে পারে এবং পার্শ্ব প্রতিক্রিয়া হতে পারে)।
এই একটি সমাধান হবে
(lambda: falseValue, lambda: trueValue)[test]()
(বিজয়ী পরিচিত না হওয়া পর্যন্ত মৃত্যুদন্ড কার্যকর করা হবে)), কিন্তু এটি কলযোগ্য এবং অ-কল্যাণযোগ্য বস্তুর মধ্যে অসঙ্গতি প্রবর্তন করে। উপরন্তু, বৈশিষ্ট্য ব্যবহার করার সময় এটি সমাধান না।
এবং তাই গল্পটি যায় - 3 টি নির্দিষ্ট সমাধানগুলির মধ্য দিয়ে বেছে নেওয়া হচ্ছে অন্তত পাইথন 2.5 (IMHO আর কোনও সমস্যা নয়) ব্যবহার করে শর্ট-সার্কিট বৈশিষ্ট্য থাকার মধ্যে একটি ট্রেড অফ, এবং "সত্যভালু-মূল্যায়ন-থেকে-মিথ্যা" ত্রুটি।
অবশ্যই, এবং এটা অবিশ্বাস্যভাবে বুঝতে সহজ।
general syntax : first_expression if bool_expression_is_true else second_expression
Example: x= 3 if 3 > 2 else 4
# assigns 3 to x if the boolean expression evaluates to true or 4 if it is false
আপনি প্রায়শই খুঁজে পেতে পারেন
cond and on_true or on_false
কিন্তু এই সমস্যা যখন lead_true == 0
>>> x = 0
>>> print x == 0 and 0 or 1
1
>>> x = 1
>>> print x == 0 and 0 or 1
1
আপনি এই ফলাফল একটি স্বাভাবিক ত্রান্ত অপারেটর জন্য যেখানে আশা করবে
>>> x = 0
>>> print 0 if x == 0 else 1
0
>>> x = 1
>>> print 0 if x == 0 else 1
1
একটি উত্তরের চেয়ে আরও একটি টিপ (হন্ড্রেথ সময়টির জন্য সুস্পষ্ট পুনরাবৃত্তি করতে হবে না), তবে আমি কখনও কখনও এই ধরনের গঠনগুলিতে অলাইনার শর্টকাট হিসাবে এটি ব্যবহার করি:
if conditionX:
print('yes')
else:
print('nah')
, হয়ে যায়:
print('yes') if conditionX else print('nah')
কিছু (অনেক :) এটি unipthonic (এমনকি, ruby-ish :) হিসাবে এটির উপর ভাসতে পারে, তবে আমি ব্যক্তিগতভাবে এটি আরো স্বাভাবিকভাবেই খুঁজে পাচ্ছি - অর্থাত্ আপনি কীভাবে এটি সাধারণভাবে প্রকাশ করবেন এবং পাশাপাশি কোডের বৃহত্তর ব্লকগুলিতে আরও কিছুটা আকর্ষণীয়ভাবে আপলোড করবেন।
তুমি এটি করতে পারো :-
[condition] and [expression_1] or [expression_2] ;
উদাহরণ: -
print(number%2 and "odd" or "even")
সংখ্যা অদ্ভুত বা এমনকি যদি এমনকি "এমনকি" যদি "অদ্ভুত" মুদ্রণ করবে।
ফলাফল: - যদি শর্ত true exp_1 কার্যকর হয় তবে exp_2 কার্যকর হয়।
নোট: - 0, কেউ না, মিথ্যা, emptylist, খালি স্ট্রিং মূল্যায়ন হিসাবে মিথ্যা। এবং 0 ছাড়া অন্য কোন তথ্য সত্য মূল্যায়ন।
এখানে কিভাবে এটা কাজ করে:
যদি শর্তটি [শর্ত] "সত্য" হয়ে যায় তবে expression_1 মূল্যায়ন করা হবে তবে expression_2 নয়। যদি আমরা "এবং" 0 দিয়ে কিছু (শূন্য), ফলাফল সবসময় ফ্যাসিল হবে। তাই নীচের বিবৃতিতে,
0 and exp
এক্সপ্রেশন এক্সপের পরে মূল্যায়ন করা হবে না "এবং" 0 দিয়ে সর্বদা শূন্যে মূল্যায়ন করা হবে এবং অভিব্যক্তিটির মূল্যায়ন করার প্রয়োজন নেই। এইভাবে কম্পাইলার নিজেই, সমস্ত ভাষায় কাজ করে।
মধ্যে
1 or exp
এক্সপ্রেশন এক্সপের পরেই মূল্যায়ন করা হবে না "অথবা" 1 এর সাথে সর্বদা 1 হবে। সুতরাং যাইহোক, ফলাফলটি 1 হতে যাইহোক, এক্সপ্রেশন এক্সপের মূল্যায়ন করতে বিরক্ত করবে না। (কম্পাইলার অপ্টিমাইজেশান পদ্ধতি)।
কিন্তু ক্ষেত্রে
True and exp1 or exp2
দ্বিতীয় অভিব্যক্তি exp2 True and exp1
থেকে মূল্যায়ন করা হবে না True and exp1
মিথ্যা না হলে exp1 সত্য হবে।
একইভাবে
False and exp1 or exp2
এক্সপ্রেস এক্সপ 1 মূল্যায়ন করা হবে না কারণ মিথ্যাটি 0 লেখার সমতুল্য এবং 0 এবং 0 দিয়ে "0" নিজেই হবে তবে "or" ব্যবহার করার পর exp1 এর পরে এটি "or" এর পরে exp2 অভিব্যক্তিটির মূল্যায়ন করবে।
দ্রষ্টব্য: - "বা" এবং "এবং" ব্যবহার করে এই ধরনের শাখাটি কেবল তখনই ব্যবহার করা যেতে পারে যখন expression_1 এর মিথ্যা অর্থ (অথবা 0 বা কোনটি নাকি খালি লেখক] বা খালি স্ট্রিং '' থাকে না।) মিথ্যা, তারপর exp_2_1 এবং exp_2 এর মধ্যে "বা" উপস্থিতির কারণে expression_2 মূল্যায়ন করা হবে।
যদি আপনি এখনও এটিকে সকল এক্সপ_1 এবং exp_2 সত্য মানগুলি ব্যতীত সমস্ত ক্ষেত্রে কাজ করতে চান তবে এটি করুন: -
[condition] and ([expression_1] or 1) or [expression_2] ;
পাইথন 2.5 এবং নতুনের জন্য একটি নির্দিষ্ট সিনট্যাক্স রয়েছে:
[on_true] if [cond] else [on_false]
পুরোনো পাইথনগুলিতে একটি ত্রৈমাসিক অপারেটর প্রয়োগ করা হয় না তবে এটি অনুকরণ করা সম্ভব।
cond and on_true or on_false
যদিও, একটি সম্ভাব্য সমস্যা রয়েছে, যদি on_true
True
এবং on_true
মূল্যায়নের মূল্যায়ন করে তবে on_false
পরিবর্তে on_true
ফেরত on_true
। যদি আপনি এই আচরণটি চান তবে পদ্ধতিটি ঠিক আছে, অন্যথায় এটি ব্যবহার করুন:
{True: on_true, False: on_false}[cond is True] # is True, not == True
যা দ্বারা আবৃত করা যাবে:
def q(cond, on_true, on_false)
return {True: on_true, False: on_false}[cond is True]
এবং এই ভাবে ব্যবহৃত:
q(cond, on_true, on_false)
এটি সব পাইথন সংস্করণের সাথে সামঞ্জস্যপূর্ণ।
পাইথন টার্নারি অপারেটর সিমুলেটিং।
উদাহরণ স্বরূপ
a, b, x, y = 1, 2, 'a greather than b', 'b greater than a'
result = (lambda:y, lambda:x)[a > b]()
আউটপুট:
'b greater than a'
যদি পরিবর্তনশীল সংজ্ঞায়িত করা হয় এবং আপনি এটি মূল্য আছে কিনা তা যাচাই করতে চান তবে আপনি কেবল a or b
def test(myvar=None):
# shorter than: print myvar if myvar else "no Input"
print myvar or "no Input"
test()
test([])
test(False)
test('hello')
test(['Hello'])
test(True)
আউটপুট হবে
no Input
no Input
no Input
hello
['Hello']
True
হ্যাঁ, আপনি এটি ব্যবহার করতে পারেন:
is_fat = True
state = "fat" if is_fat else "not fat"
ত্রান্ত শর্তাধীন অপারেটর সম্পর্কে আরও পড়ুন
হ্যাঁ, এটি সংস্করণ 2.5 added হয়েছে।
সিনট্যাক্স হল:
a if condition else b
প্রথম condition
মূল্যায়ন করা হয়, তারপরে a
বা Boolean মান condition
ভিত্তিতে ফিরে আসে
যদি condition
সত্যকে মূল্যায়ন করে তবে এটি ফেরত পাঠানো হয়।
উদাহরণ স্বরূপ:
>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
শর্ত করুন শর্তাবলী একটি অভিব্যক্তি , একটি বিবৃতি নয় । এর অর্থ আপনি কোনও শর্তাধীন অ্যাসাইনমেন্ট বা pass
বা অন্যান্য বিবৃতি ব্যবহার করতে পারবেন না:
>>> pass if False else x = 3
File "<stdin>", line 1
pass if False else x = 3
^
SyntaxError: invalid syntax
এই ক্ষেত্রে, আপনি একটি শর্তাধীন পরিবর্তে একটি স্বাভাবিক বিবৃতি ব্যবহার করতে হবে।
কয়েকটি কারণের জন্য এটি কিছু Pythonistas দ্বারা frowned উপর মনে রাখবেন:
- আর্গুমেন্টগুলির ক্রম অনেক অন্যান্য ভাষার (যেমন সি, রুবি, জাভা, ইত্যাদি) থেকে আলাদা, যা পাইথনের "বিস্ময়কর" আচরণের সাথে অপরিচিত ব্যক্তিদের ব্যবহার করার সময় বাগগুলি বাড়াতে পারে (তারা ক্রমটি বিপরীত করতে পারে)।
- কেউ কেউ এটি "অলস" বলে মনে করেন, কারণ এটি স্বাভাবিক প্রবাহের প্রবণতার বিপরীতে (প্রথম অবস্থাটি এবং তারপরে প্রভাবগুলি নিয়ে চিন্তা করে)।
- শৈল্পিক কারণ।
যদি আপনার অর্ডারটি মনে রাখার সমস্যা হয়, তবে মনে রাখবেন যে আপনি যদি এটি জোরে জোরে পড়েন, তবে আপনি (প্রায়) বলতে কী বোঝাতে চান। উদাহরণস্বরূপ, x = 4 if b > 8 else 9
জোরে জোরে পড়তে x will be 4 if b is greater than 8 otherwise 9
।
অফিসিয়াল ডকুমেন্টেশন
হ্যাঁ:
আসুন বলুন আপনি কিছু পরিবর্তনশীল x কে কিছু মান দিতে চান এবং একইভাবে
এক্স = 5 যদি অন্য কিছু x = 10
এক্স = [কিছু মান] [যদি এটি সত্য হয় তবে প্রথম মান মূল্যায়ন করে] অন্য [অন্য মান মূল্যায়ন করে]
হ্যাঁ।
>>> b = (True if 5 > 4 else False)
>>> print b
True
expression1 যদি শর্ত অন্য expression2
>>> a = 1
>>> b = 2
>>> 1 if a > b else -1
-1
>>> 1 if a > b else -1 if a < b else 0
-1
In [1]: a = 1 if False else 0
In [2]: a
Out[2]: 0
In [3]: b = 1 if True else 0
In [4]: b
Out[4]: 1