পাইথন 3-এ স্ট্রিং ফর্ম্যাটিং


114

আমি পাইথন 2 এ এটি করি:

"(%d goals, $%d)" % (self.goals, self.penalties)

এর পাইথন 3 সংস্করণটি কী?

আমি অনলাইনে উদাহরণগুলি অনুসন্ধান করার চেষ্টা করেছি তবে পাইথন 2 সংস্করণ পেয়েছি।


এটি অবচয় করা হয়নি; আপনার কোড ভাল কাজ করে। এখানে আরও পড়ুন ।
জ্যাককডডিল

32
নৈমিত্তিক পাঠকের জন্য নোট: ডলারের চিহ্নটির কোনও বিশেষ অর্থ নেই। এটি এখানে কেবল একটি ডলারের চিহ্ন। (ধন্যবাদ
মার্টিজান


1
ডলারের চিহ্নটি এটি খুব বিভ্রান্ত করেছে ..
চ্যাম্বারলাইন

উত্তর:


173

এখানে "নতুন" ফর্ম্যাট সিনট্যাক্স সম্পর্কে ডকস রয়েছে । একটি উদাহরণ হবে:

"({:d} goals, ${:d})".format(self.goals, self.penalties)

যদি উভয়ই হয় goalsএবং penaltiesপূর্ণসংখ্যা হয় (যেমন তাদের ডিফল্ট ফর্ম্যাটটি ঠিক আছে) তবে এটি সংক্ষিপ্ত করা যেতে পারে:

"({} goals, ${})".format(self.goals, self.penalties)

এবং যেহেতু প্যারামিটারগুলি ক্ষেত্র self, তাই এটির একটি উপায়ও দুবার ব্যবহার করার একটি উপায় রয়েছে (যেমন @ বুরহান খালিদ মন্তব্যগুলিতে উল্লেখ করেছেন):

"({0.goals} goals, ${0.penalties})".format(self)

ব্যাখ্যা করে:

  • {} ডিফল্ট ফর্ম্যাট সহ কেবলমাত্র পরবর্তী অবস্থানগত যুক্তি;
  • {0}0ডিফল্ট বিন্যাস সহ সূচকের সাথে যুক্তির অর্থ ;
  • {:d} দশমিক পূর্ণসংখ্যার বিন্যাস সহ পরবর্তী অবস্থানগত যুক্তি;
  • {0:d}0দশমিক পূর্ণসংখ্যার বিন্যাস সহ সূচকের সাথে যুক্তি ।

যুক্তি বাছাই করার সময় আপনি আরও অনেক কিছু করতে পারেন (অবস্থানিকদের পরিবর্তে নামযুক্ত যুক্তি ব্যবহার করা, ক্ষেত্রগুলি অ্যাক্সেস করা ইত্যাদি) এবং অনেকগুলি বিন্যাসের বিকল্পগুলি (সংখ্যাটি প্যাডিং, হাজার হাজার পৃথককারী ব্যবহার করে, চিহ্ন বা না দেখানো ইত্যাদি) আরও কয়েকটি উদাহরণ:

"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)

"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)

"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'

"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'

"games: {:>3}".format(player1.games)  # 'games: 123'
"games: {:>3}".format(player2.games)  # 'games:   4'
"games: {:0>3}".format(player2.games) # 'games: 004'

দ্রষ্টব্য: অন্যরা যেমন উল্লেখ করেছে, নতুন ফর্ম্যাটটি পূর্বেরটিকে ছাপিয়ে যায় না, উভয়ই পাইথন 3 এবং পাইথন 2-র নতুন সংস্করণ উভয়ই উপলভ্য। কেউ কেউ বলতে পারে এটি পছন্দের বিষয়, তবে আইএমএইচও নতুন প্রবীণদের চেয়ে অনেক বেশি ভাববাদী, এবং যখনই নতুন কোড লেখেন তখনই ব্যবহার করা উচিত (যদি না এটি পুরানো পরিবেশকে লক্ষ্য করে না হয়)।


9
আপনিও করতে পারেন"({0.goals} goals, ${0.penalties})".format(self)
বুরহান খালিদ

আপনার কোঁকড়া ধনুর্বন্ধনীগুলির বাইরে '%' নেওয়ার দরকার যেমন, {: .2f%} -> {: .2f}%
ইলেকট্রিক

@SuperElectric আপনি কি বলতে চান, এই লাইনে: "conversion rate: {:.2%}".format(self.goals / self.shots)? এটি যেমন আমার পক্ষে ঠিক তেমন কাজ করে ... (পাইথন ৩.৪) নোট করুন যে এতে কোনও নেই f, আমি ভাসমান পয়েন্ট নম্বর হিসাবে নয়, শতাংশ হিসাবে ফরম্যাট করতে বলছি।
এমজিবিসনব্রব

তুমি ঠিক বলছো; এটি পাইথন ৩.৪-এ কাজ করছে বলে মনে হচ্ছে, সুতরাং ওপি পাইথন 3 সম্পর্কে জিজ্ঞাসা করছে that's আমি সন্ধান পেয়েছি এটি পাইথন ২.7..6 নিয়ে কাজ করে নি। "{:.2f}%".format(float_num)উভয় জন্য সূক্ষ্ম কাজ করে।
ইলেকট্রিক

1
@ জনসমিট হ্যাঁ, এই উদাহরণটি প্রশ্নের উত্তর হিসাবে দেওয়া ঠিক একই আউটপুট দেওয়ার কথা ছিল। এখানে $এর কোনও বিশেষ অর্থ নেই, পুরানো ফর্ম্যাট সিনট্যাক্সে বা নতুনতেও নয়, এইভাবে উত্পন্ন স্ট্রিংটিতে উপস্থিত হওয়া উচিত, অপরিবর্তিত।
এমজিবিসনব্রব

67

পাইথন 3.6 এখন পিইপি 498 এর সাথে শর্টহ্যান্ডের আক্ষরিক স্ট্রিং ইন্টারপোলেশন সমর্থন করে । আপনার ব্যবহারের ক্ষেত্রে, নতুন বাক্য গঠনটি কেবলমাত্র:

f"({self.goals} goals, ${self.penalties})"

এই পূর্ববর্তী অনুরূপ .formatমান, কিন্তু এক সহজে জিনিস করতে দেয় মত :

>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result:      12.35'

12

পাইথন 3-তে সেই লাইনটি কাজ করে।

>>> sys.version
'3.2 (r32:88445, Oct 20 2012, 14:09:29) \n[GCC 4.5.2]'
>>> "(%d goals, $%d)" % (self.goals, self.penalties)
'(1 goals, $2)'

ঠিক আছে. শীতল। আমি প্রশ্ন পোস্ট করার পরে, আমি আমার অনুসন্ধান চালিয়ে যাচ্ছিলাম এবং দেখেছি যে আমাদের কেবল% d এর পরিবর্তে {% d do করতে হবে এটিও কি সঠিক? বা পাইথন 2 এটি করার একমাত্র উপায়?
হোসেবাজবাজ

2
পাইথন 3 একটি নতুন সিনট্যাক্স প্রবর্তন করে - এটি কোঁকড়ানো ধনুর্বন্ধনী - তবে এটি ব্যবহার করার দরকার নেই। আপনি পুরানো বা নতুন ব্যবহার করতে পারেন। তবে তারা আলাদা; আপনি যদি কুঁড়ি ব্যবহার করছেন তবে আপনি শতাংশ লক্ষণ ব্যবহার করবেন না।
মার্ক রিড

2

আমি এই পদ্ধতির পছন্দ

my_hash = {}
my_hash["goals"] = 3 #to show number
my_hash["penalties"] = "5" #to show string
print("I scored %(goals)d goals and took %(penalties)s penalties" % my_hash)

বন্ধনীগুলিতে যথাক্রমে সংযুক্ত ডি এবং এস নোট করুন।

আউটপুট হবে:

I scored 3 goals and took 5 penalties
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.