ভূমিকা
আনপ্যাকিং-এর একটি বেসিক সীমাবদ্ধতা হল আপনাকে আগে থেকে সিকোয়েন্সের দৈর্ঘ্য জানতে হবে।
কীভাবে করবেন
random_numbers = [0, 1, 5, 9, 17, 12, 7, 10, 3, 2]
random_numbers_descending = sorted(random_numbers, reverse=True)
print(f"Output \n*** {random_numbers_descending}")
আউটপুট
*** [17, 12, 10, 9, 7, 5, 3, 2, 1, 0]
এখন সবচেয়ে বড় এবং দ্বিতীয় বড় সংখ্যা বের করতে চাইলে "too many values to unpack" এরর দেবে।
ইন্ডেক্সিং এবং স্লাইসিং ব্যবহার
largest = random_numbers_descending[0]
second_largest = random_numbers_descending[1]
rest_of_numbers = random_numbers_descending[2:]
স্টারড এক্সপ্রেশন (Starred Expression) ব্যবহার
পাইথন ক্যাচ-অল আনপ্যাকিং সমর্থন করে স্টারড এক্সপ্রেশন দিয়ে। এটি এক লাইনে সহজে পড়া যায়।
largest, second_largest, *rest_of_numbers = random_numbers_descending
print(f"largest: {largest}, second_largest: {second_largest}, rest_of_numbers: {rest_of_numbers}")
আউটপুট
largest: 17, second_largest: 12, rest_of_numbers: [10, 9, 7, 5, 3, 2, 1, 0]
স্টারড এক্সপ্রেশন যেকোনো পজিশনে থাকতে পারে।
*rest_of_numbers, second_smallest, smallest = random_numbers_descending
সীমাবদ্ধতা
- কমপক্ষে একটি রিকোয়ার্ডেড পার্ট থাকতে হবে, শুধু ক্যাচ-অল দিয়ে আনপ্যাক করা যায় না (SyntaxError)।
- একই লেভেলে একাধিক ক্যাচ-অল এক্সপ্রেশন ব্যবহার করা যায় না (SyntaxError)।
- বহু-স্তریय স্ট্রাকচারে একাধিক স্টারড এক্সপ্রেশন ব্যবহার করা যায়।
উদাহরণ: নেস্টেড স্ট্রাকচার
player_grandslame_and_atptitles = {
'Federer': (20, 103),
'Nadal': (20, 84),
}
((player1, (grandslam1, *atptitles1)), (player2, (grandslam2, *atptitles2))) = player_grandslame_and_atptitles.items()
print(f'Player - {player1} Have acheived {grandslam1} grandslams and , {atptitles1} atp tour titles')
print(f'Player - {player2} Have acheived {grandslam2} grandslams and , {atptitles2} atp tour titles')
খালি লিস্ট হ্যান্ডলিং
যদি কোনো অবশিষ্ট আইটেম না থাকে, ক্যাচ-অল পার্ট খালি লিস্ট হবে।
random_numbers = [0, 1]
first, second, *rest = random_numbers
print(first, second, rest) # (0, 1, [])