স্ট্রিং ফর্ম্যাটিং নামক পরামিতি?


134

আমি জানি এটি সত্যিই একটি সহজ প্রশ্ন, তবে কীভাবে এটি গুগল করা যায় সে সম্পর্কে আমার কোনও ধারণা নেই।

আমি কিভাবে করব

print '<a href="%s">%s</a>' % (my_url)

সুতরাং যে my_urlদুইবার ব্যবহার করা হয়? আমি ধরে নিয়েছি যে আমার "নাম" দিতে হবে %sএবং তারপরে প্যারামগুলিতে একটি ডিক ব্যবহার করতে হবে, তবে আমি সঠিক বাক্য গঠন সম্পর্কে নিশ্চিত নই?


শুধু এফওয়াইআই, আমি সচেতন আমি my_urlপ্যারামগুলিতে মাত্র দু'বার ব্যবহার করতে পারি , তবে এটি বিন্দু নয় :)


প্রশ্নের শিরোনামটি কিছুটা বিভ্রান্তিকর। স্ট্রিং ইন্টারপোলেশন কীভাবে কাজ করে তা মুদ্রণ বিবৃতিতে এর কোনও যোগসূত্র নেই।
গ্রেগ বল

কীভাবে এটি গুগল করবেন আপনার কোনও ধারণা নেই, সন্ধানটি ব্যবহার করতে এখানে যান: পাইথন.আর / ডক । এটি একটি গুরুত্বপূর্ণ কারণে গুগলের চেয়ে ভাল।
এসলট

উত্তর:


79

পাইথন ২.6+ এবং পাইথন 3 এ আপনি নতুন স্ট্রিং ফর্ম্যাটিং পদ্ধতিটি ব্যবহার করতে পারেন।

print('<a href="{0}">{0}</a>'.format(my_url))

যা আপনাকে যুক্তি পুনরাবৃত্তি করা থেকে বাঁচায়, বা

print('<a href="{url}">{url}</a>'.format(url=my_url))

আপনি যদি নামকরণ পরামিতি চান।

print('<a href="{}">{}</a>'.format(my_url, my_url))

যা কঠোরভাবে অবস্থানগত এবং কেবলমাত্র সেই বিন্যাসের সাথেই আসে (ফর্ম্যাট) (আর্গুমেন্টগুলি পাইথন বিধি অনুসরণ করে যেখানে নামবিহীন আরোগুলি অবশ্যই প্রথমে আসে, নামযুক্ত যুক্তিগুলির পরে, * আরগগুলি (তালিকার মতো বা তালিকার মতো ক্রম) এবং তারপরে * কোয়ার্গস (একটি ডিক আপনি যদি আপনার জন্য ভাল তা জানেন তবে স্ট্রিংগুলি সহ কীডযুক্ত)। অন্তরঙ্গকরণের পয়েন্টগুলি প্রথমে তাদের লেবেলে নামকৃত মানগুলি প্রতিস্থাপন করে এবং তারপরে যা রয়েছে তা স্থির করে নির্ধারিত হয়। সুতরাং, আপনি এটিও করতে পারেন ...

print('<a href="{not_my_url}">{}</a>'.format(my_url, my_url, not_my_url=her_url))

তবে এটি না ...

print('<a href="{not_my_url}">{}</a>'.format(my_url, not_my_url=her_url, my_url))

++ থেকে #
cod3monk3y

3
উপরের পদ্ধতিটি নামযুক্ত স্ট্রিং ফর্ম্যাটিংয়ের জন্য নয় তবে এটি পজিশনাল স্ট্রিং ফর্ম্যাটিং। সুতরাং এটি আসলে প্রশ্নের উত্তর দেয় না।
japapz

"literal {arg1}".format(arg1="arg!")নামে বিন্যাস, পাইথন 3.5 সঙ্গে কাজ করে যেহেতু terser f"literal {arg1}"পাইথন 3.6 অথবা ঊর্ধ্বতন সংস্করণ, আমি যতদূর জানি একটি নতুন নতুনত্ব।
মার্কহু

218
print '<a href="%(url)s">%(url)s</a>' % {'url': my_url}

3
আমি কাওয়ার্গস দিয়ে ডিকটি তৈরি করতে পছন্দ করি:'<a href="%(url)s">%(url)s</a>' % dict(url=my_url)
স্ক্ল্যামার

11
আমি ভাবছি তুমি কেন এই স্কাম্লামারকে পছন্দ কর? ওপি যে ডিকের সাধারণ ঘোষণার তুলনা করেছে তার তুলনা করে আমি সহজেই জানতাম না ...
গ্রিনএজজেড

1
ডকুমেন্টেশন বলা আছে না এই চালু করা হয়, তাই এটি সম্ভবত সব পাইথন 2 সংস্করণে আছে।
এভেজেনি সার্জিভ

2
আপনি যদি পারেন তবে বিন্যাসটি () ব্যবহার করুন, এটি আরও ভাল এবং আরও বেশি জায়গায় কাজ করে। আপনার প্রয়োজন হলে% ব্যবহার করুন।
উছুগাকা

39

পাইথন 3.6+ এ সমাধান

পাইথন ৩.6 আক্ষরিক স্ট্রিং ফর্ম্যাটিংয়ের পরিচয় দেয় , যাতে আপনি স্ট্রিংয়ের বাইরে আপনার নামকরণকৃত প্যারামিটারগুলির কোনও পুনরাবৃত্তি না করে নামকরণ পরামিতিগুলি বিন্যাস করতে পারেন:

print(f'<a href="{my_url:s}">{my_url:s}</a>')

এটি মূল্যায়ন করবে my_url, সুতরাং এটি নির্ধারিত না হলে আপনি একটি পাবেন NameError। প্রকৃতপক্ষে, পরিবর্তে my_url, আপনি একটি নির্বিচার পাইথন এক্সপ্রেশন লিখতে পারেন, যতক্ষণ না এটি স্ট্রিংয়ের (মূল্যায়ন :sকোডের কারণে) মূল্যায়ন করে । আপনি একটি মত প্রকাশের ফলে একটি স্ট্রিং না হতে পারে, প্রতিস্থাপন জন্য একটি স্ট্রিং উপস্থাপনা চান :sদ্বারা !sনিয়মিত মতো প্রাক-আক্ষরিক স্ট্রিং বিন্যাস।

আক্ষরিক স্ট্রিং ফর্ম্যাটিংয়ের বিশদগুলির জন্য, পিইপি 498 দেখুন , যেখানে এটি প্রথম চালু হয়েছিল।


1
পিইপি সমস্ত ফর্ম্যাটর আবরণ করে বলে মনে হয় না; আমার মনে হয় এগুলি স্ট্রিম ফর্ম্যাট হিসাবে একই যা এখানে নথিভুক্ত করা হয়েছে: ডকস.পাইথন.আর.৩.৩.৪
স্ট্রিং

6

আপনি সিনট্যাক্স আসক্ত হবে।

এছাড়াও সি # 6.0, ইকামাস্ক্রিপ্ট বিকাশকারীরাও এই সিনট্যাক্সটি ফ্যামিলি করেছেন।

In [1]: print '{firstname} {lastname}'.format(firstname='Mehmet', lastname='Ağa')
Mehmet Ağa

In [2]: print '{firstname} {lastname}'.format(**dict(firstname='Mehmet', lastname='Ağa'))
Mehmet Ağa

5

এইচটিএমএল পৃষ্ঠাগুলি তৈরির জন্য, আপনি কোনও টেম্প্লেটিং ইঞ্জিন ব্যবহার করতে চান, সাধারণ স্ট্রিং ইন্টারপোলেশন নয়।


2
জ্যাঙ্গোর টেম্প্লেটিং ইঞ্জিনটি আপনি যে ইমেলগুলি তৈরি করছেন তার জন্য আদর্শ সরঞ্জাম হিসাবে প্রমাণিত হতে পারে।
মাইক গ্রাহাম

6
জ্যাঙ্গো টেমপ্লেটটি এর render()পদ্ধতির সাহায্যে ইমেল বডি তৈরি করতে আপনাকে কী থামছে ? কিছুই আপনাকে টেমপ্লেট আউটপুট খাওয়ানো আছে বলে না HttpResponse()। জাজানো বিব্রতকরভাবে বহুমুখী।
মাইক ডিসিমোন 16'10

1
@ মাইক: আমি ভেবেছিলাম জাঙ্গোরও এর সমাধান হতে পারে তবে আমি এখনও এটি খুঁজে পাইনি: পি আমি তখন আমার ইমেলগুলি টেমপ্লেটগুলিতে সরিয়ে ফেলব! ধন্যবাদ। হতে পারে আমি বিরক্ত, কিন্তু আমি এটি বেশ কয়েকটি ক্ষেত্রে দৃ in়রূপে পেয়েছি।
এমপেন

2
@random মানুষ যে এই মন্তব্য পড়তে: যে কাজ করতে কিভাবে সম্পর্কে আরো বিবরণ পাওয়া এখানে rossp.org/blog/2006/jul/11/sending-e-mails-templates
mpen

1
প্রশ্নগুলিতে মন্তব্য করার জন্য, আপনি মন্তব্যগুলি ব্যবহার করতে চান, উত্তরগুলি নয়।
suriv

2

অভিধানের পাশাপাশি, নিম্নলিখিত ফর্ম্যাটটি জানার জন্য এটি কার্যকর হতে পারে:

print '<a href="%s">%s</a>' % (my_url, my_url)

এখানে এটি একটি বাজে রিডানড্যান্ট এবং অভিধানের উপায়টি কোড পরিবর্তন করার সময় অবশ্যই কম ত্রুটিযুক্ত, তবে একাধিক সন্নিবেশের জন্য টিপলস ব্যবহার করা এখনও সম্ভব। প্রথমটি %sটিপলে প্রথম উপাদানটির %sজন্য প্রতিস্থাপিত হয়, দ্বিতীয়টি টিপলে দ্বিতীয় উপাদানটির জন্য প্রতিস্থাপিত হয়, এবং তাই টিপলে প্রতিটি উপাদানের জন্য থাকে।


আমি কেবল একজনকে এই পরামর্শ দেওয়ার জন্য বললাম :) সে তার পোস্টটি মুছে ফেলছে। আমার এখন খারাপ লাগছে bad হ্যাঁ, আমি সচেতন আমি এটি করতে পারি তবে আমি যা খুঁজছিলাম তা এটি ছিল না। যেমনটি আপনি বলেছেন, এটি অনর্থক, এবং my_urlএটি আসলে একটি ফাংশন কল যা আমি দুবার মূল্যায়ন করতে চাই না।
দু'বার

5
আমি অনুভব করেছি যে আমি আমার রাখব, যদি এটি অন্য কাউকে সহায়তা করে। ওয়েল, অভিধানের উপায় সম্ভবত সবচেয়ে ভাল উপায়। কিন্তু অতিরিক্ত (get_my_url(), )*20কাজ করার জন্য, কেবল একবারই ফাংশনটি কল করে এবং 20 বার নকল করে।
পোনকডুডল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.