উত্তর:
মার্ক সিডের উত্তরটি সঠিক - আপনার একটি টিপল সরবরাহ করতে হবে।
তবে পাইথন ২.6 থেকে আপনি এর format
পরিবর্তে ব্যবহার করতে পারেন %
:
'{0} in {1}'.format(unicode(self.author,'utf-8'), unicode(self.publication,'utf-8'))
%
বিন্যাসের স্ট্রিং ব্যবহারের জন্য আর উত্সাহ দেওয়া হয় না।
স্ট্রিং ফর্ম্যাটিংয়ের এই পদ্ধতিটি পাইথন 3.0.০ এ নতুন মান, এবং নতুন কোডে স্ট্রিং ফর্ম্যাটিং অপারেশনে বর্ণিত% ফর্ম্যাটিংয়ের চেয়ে পছন্দ করা উচিত।
আপনি যদি একাধিক যুক্তি ব্যবহার করেন তবে এটিতে একটি টিপলে থাকতে হবে (অতিরিক্ত বন্ধনী নোট করুন):
'%s in %s' % (unicode(self.author), unicode(self.publication))
যেমন ইওএল দেখায়, unicode()
ফাংশনটি সাধারণত অ্যাস্কি এনকোডিংটিকে ডিফল্ট হিসাবে ধরে নেয়, সুতরাং আপনার যদি অ-এসসিআইআই অক্ষর না থাকে তবে স্পষ্টভাবে এনকোডিংটি পাস করা নিরাপদ:
'%s in %s' % (unicode(self.author,'utf-8'), unicode(self.publication('utf-8')))
এবং পাইথন 3.0.০ হিসাবে, str.format()
পরিবর্তে সিনট্যাক্স ব্যবহার করা এটি পছন্দ :
'{0} in {1}'.format(unicode(self.author,'utf-8'),unicode(self.publication,'utf-8'))
format
নিম্নলিখিতটি ডকুমেন্টেশন থেকে উদ্ধৃত হয়েছে:
প্রদত্ত
format % values
,%
রূপান্তর স্পেসিফিকেশনগুলিরformat
শূন্য বা আরও বেশি উপাদানের সাথে প্রতিস্থাপন করা হয়values
। প্রভাবsprintf()
সি ভাষায় ব্যবহারের মতো ।যদি
format
একটি একক যুক্তি প্রয়োজন হয়, মানগুলি একক নন-টিপল অবজেক্ট হতে পারে। তা না হলে, মান ঠিক দ্বারা নির্দিষ্ট আইটেম সংখ্যা সঙ্গে একটি tuple হতে হবেformat
স্ট্রিং , বা একটি একক ম্যাপিং বস্তুর (উদাহরণস্বরূপ, একটি অভিধান)।
str.format
পরিবর্তে চালু%
%
অপারেটরের নতুন বিকল্পটি হ'ল ব্যবহার করা str.format
। ডকুমেন্টেশনের একটি অংশ এখানে দেওয়া হয়েছে:
str.format(*args, **kwargs)
একটি স্ট্রিং ফর্ম্যাটিং অপারেশন সম্পাদন করুন। এই পদ্ধতিটি যে স্ট্রিংটিতে বলা হয় সেগুলিতে ধনুর্বন্ধনী দ্বারা সীমিত আক্ষরিক পাঠ্য বা প্রতিস্থাপন ক্ষেত্র থাকতে পারে
{}
। প্রতিটি প্রতিস্থাপন ক্ষেত্রের মধ্যে হয় অবস্থানগত আর্গুমেন্টের সংখ্যাসূচক সূচক বা কোনও কীওয়ার্ড আর্গুমেন্টের নাম। স্ট্রিংয়ের অনুলিপি প্রদান করে যেখানে প্রতিটি প্রতিস্থাপন ক্ষেত্রটি সম্পর্কিত আর্গুমেন্টের স্ট্রিংয়ের মান দিয়ে প্রতিস্থাপিত হয়।এই পদ্ধতি পাইথন 3.0 নতুন মান, এবং পছন্দ করা উচিত
%
বিন্যাস ।
এখানে কয়েকটি ব্যবহারের উদাহরণ দেওয়া হল:
>>> '%s for %s' % ("tit", "tat")
tit for tat
>>> '{} and {}'.format("chicken", "waffles")
chicken and waffles
>>> '%(last)s, %(first)s %(last)s' % {'first': "James", 'last': "Bond"}
Bond, James Bond
>>> '{last}, {first} {last}'.format(first="James", last="Bond")
Bond, James Bond
'{self.author} in {self.publication}'.format(self=self)
"কাজ করা" উচিত। আমি পুরো unicode
বিষয়টি সম্পর্কে নিশ্চিত নই
{first[0]}
প্রাথমিক পেতে ব্যবহার করতে পারতেন J
।
আপনাকে অবশ্যই মানগুলি বন্ধনীতে রেখে দিতে হবে:
'%s in %s' % (unicode(self.author), unicode(self.publication))
এখানে, প্রথম স্থাপন করা হবে। এবং দ্বিতীয় জন্য , ব্যবহার করা হবে।%s
unicode(self.author)
%s
unicode(self.publication)
দ্রষ্টব্য:
string formatting
আপনার%
স্বরলিপি চিহ্নিত করা উচিত । আরও তথ্য এখানে
%s
তারপরে প্রস্তাব দেয়format
এখনও পর্যন্ত পোস্ট করা কিছু উত্তরগুলির সাথে একটি উল্লেখযোগ্য সমস্যা রয়েছে: unicode()
ডিফল্ট এনকোডিং থেকে ডিকোড, যা প্রায়শই ASCII হয়; প্রকৃতপক্ষে, unicode()
বাইটগুলি অক্ষরে রূপান্তরিত করে প্রদত্ত বাইটগুলির "জ্ঞান" তৈরি করার চেষ্টা করে। সুতরাং, নিম্নলিখিত কোডগুলি যা পূর্ববর্তী উত্তরগুলির দ্বারা প্রস্তাবিত মূলত আমার মেশিনে ব্যর্থ হয়:
# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))
দেয়:
Traceback (most recent call last):
File "test.py", line 3, in <module>
print '{0}'.format(unicode(author))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
ব্যর্থতাটি author
কেবল আসকি বাইট (যেমন [0; 127] এর মান সহ) ধারণ করে না এবং unicode()
এএসসিআইআই থেকে ডিফল্টরূপে (অনেকগুলি মেশিনে) ডেকেড হয় from
একটি শক্তিশালী সমাধান হ'ল স্পষ্টভাবে আপনার ক্ষেত্রগুলিতে ব্যবহৃত এনকোডিংটি দেওয়া; UTF-8 উদাহরণ হিসাবে গ্রহণ:
u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))
(অথবা u
আপনি কোনও ইউনিকোড ফলাফল বা বাইট স্ট্রিং চান কিনা তার উপর নির্ভর করে প্রাথমিক ছাড়াই )।
এই মুহুর্তে, বিন্যাসের সময় ডিকোডিংয়ের পরিবর্তে, ক্ষেত্রগুলি author
এবং publication
ক্ষেত্রগুলি ইউনিকোড স্ট্রিংগুলি বিবেচনা করতে পারে ।
পাইথন 2 এর জন্য আপনি এটিও করতে পারেন
'%(author)s in %(publication)s'%{'author':unicode(self.author),
'publication':unicode(self.publication)}
বিকল্প হিসাবে যদি আপনার অনেক যুক্তি থাকে (বিশেষত যদি আপনি আন্তর্জাতিকীকরণ করছেন) তবে এটি কার্যকর
পাইথন 2.6 এর পরে সমর্থন করে .format()
'{author} in {publication}'.format(author=self.author,
publication=self.publication)
'{} in {}'
বিন্যাসের স্ট্রিং ব্যবহার করতে পারেন ।