পুরানো স্ট্রিং ফরম্যাটিং (%...) ব্যবহার করলে টাপল পাস করলে পাইথন প্রতিটি আইটেম আলাদা আর্গুমেন্ট হিসেবে নেয়। পুরো টাপল প্রিন্ট করতে র্যাপার টাপল ব্যবহার করতে হয়।
সমস্যা
tup = (1, 2, 3)
print("this is a tuple %s" % (tup))
# TypeError: not all arguments converted during string formatting
কারণ: % (tup) মানে tup-এর তিনটি এলিমেন্ট আলাদা আর্গুমেন্ট, কিন্তু ফরম্যাট স্ট্রিং-এ একটাই %s।
সমাধান: র্যাপার টাপল (tup,)
tup = (1, 2, 3)
print("this is a tuple %s" % (tup,))
আউটপুট
this is a tuple (1, 2, 3)
ব্যাখ্যা
(tup,)— এক-এলিমেন্ট টাপল যেকোনো এক্সপ্রেশন থেকে আলাদা করতে ট্রেইলিং কমা দরকার- এখন
%s-এ পুরো টাপল একসাথে পাস হয়
আধুনিক বিকল্প: f-স্ট্রিং / .format()
print(f"this is a tuple {tup}") # f-string (Python 3.6+)
print("this is a tuple {}".format(tup)) # .format()
এগুলোর সাথে টাপল ডাইরেক্টলি পাস করা যায়, কোনো র্যাপার দরকার নেই।