স্ট্রিং ফর্ম্যাট করার সময় একই মান একাধিক বার serোকানো


111

আমার এই ফর্মটির একটি স্ট্রিং রয়েছে

s='arbit'
string='%s hello world %s hello world %s' %(s,s,s)

স্ট্রিংয়ের সমস্ত% s এর মান একই (যেমন) have এটি লেখার আরও ভাল উপায় আছে কি? (তিনবার গুলি তালিকাভুক্ত না করে)



2
এই %স্ট্রিং অপারেটরটি "পাইথন ৩.১ এ হ্রাস করা হবে এবং কিছু সময় পরে অপসারণ করা হবে" ডকস.প্যাথথন.আর. / রিলিজ / ৩.০.১ / ওয়াটসনেউ / ঃ এখন আমি ভাবছি যে সংস্করণ সামঞ্জস্যতা এবং সুরক্ষা উভয়ের জন্য সবচেয়ে পরামর্শ দেওয়া উপায় কী।
ক্রেগোক্স

2
@ কাওস আমি জানি যে এটি বেশ দেরি হয়ে গেছে তবে আমি এটি ব্যবহার করতে পছন্দ করি str.format()। উদাহরণস্বরূপ: ফর্ম্যাট স্ট্রিংটি query = "SELECT * FROM {named_arg}"; query.format(**kwargs)যেখানে queryফর্ম্যাট স্ট্রিংয়ের kwargsসাথে কীগুলির সাথে মেলে একটি অভিধান named_arg
এডউইন

4
@Cawas হ্যাঁ, ব্যতীত আদম tuple স্বরলিপি, যেখানে ব্যবহার করা {0}, {1}, {2}এবং তাই মিলা উপর tuple সূচকের থেকে 0, 1এবং 2যথাক্রমে। বিকল্পভাবে, আরগগুলির নামকরণ (যেমন {named_arg}) এবং প্রতিটি ফর্ম্যাট পদ্ধতিতে সেট করা সম্ভব , যেমন:'Hi {fname} {lname}!'.format(fname='John', lname='Doe')
এডউইন

2
@ বিগনোজ আপনি উভয় প্রশ্নের নকলকে একে অপরের চিহ্ন হিসাবে চিহ্নিত করেছেন এর মত google.com/…
অভি

উত্তর:


203

আপনি পাইথন ২.6 এবং পাইথন ৩.x এ উপলব্ধ উন্নত স্ট্রিং ফর্ম্যাটিং ব্যবহার করতে পারেন :

incoming = 'arbit'
result = '{0} hello world {0} hello world {0}'.format(incoming)

11
~ আমার ব্যক্তিগত পছন্দ, কাওয়ার্গস স্টাইলের জন্য যানresult = '{st} hello world {st} hello world {st}'.format(st=incoming)
নেহম

40
incoming = 'arbit'
result = '%(s)s hello world %(s)s hello world %(s)s' % {'s': incoming}

আপনি একটি বোঝার জন্য এটি পড়তে পছন্দ করতে পারেন: স্ট্রিং ফর্ম্যাটিং অপারেশনস


1
খুশী হলাম। এই সম্পর্কে ভুলে গিয়েছিলাম। স্থানীয়রা () পাশাপাশি করবে।
গৌতম

2
@ গৌতম: আপনার পাইথনের সংস্করণ আপ টু ডেট থাকলে অ্যাডাম রোজেনফিল্ডের উত্তরটি আরও ভাল হতে পারে।
mhakke

এটা আসলে। আইএম এখনও নতুন স্ট্রিং ফর্ম্যাটিং ক্রিয়াকলাপে অভ্যস্ত।
গৌতম

3
আরও ভাল, আপনি বেস স্ট্রিংটি বহুগুণ করতে পারেন: '% (গুলি) এর হ্যালো ওয়ার্ল্ড' * 3% {'s': 'আসাদাদ'}
ডালোলিওগাম

15

আপনি অভিধানের ধরণের বিন্যাস ব্যবহার করতে পারেন:

s='arbit'
string='%(key)s hello world %(key)s hello world %(key)s' % {'key': s,}

1
এই সদৃশ উত্তর প্রদানের ক্ষেত্রে খুব অল্প বিন্দু বলে মনে হচ্ছে। এখানে আরও একটি রয়েছে: '% (স্ট্রিং_গোয়েস_এইর) এর হ্যালো ওয়ার্ল্ড% (স্ট্রিং_গোয়েস_এইর) এর হ্যালো ওয়ার্ল্ড% (স্ট্রিং_গোয়_সেস) এর'% {'স্ট্রিং_গোয়াস_ এখানে': এস,}} কার্যত সম্ভাবনাগুলির অসীম সংখ্যা রয়েছে।
mhakke

3
মাওহেক: আমার ব্রাউজারটি পৃষ্ঠাটি পুনরায় লোড করার আগে আমি বার্তাটি পোস্ট করেছি যাতে আমি সেই মাতৃভূমিতে জানতাম না যে প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছিল। তোমার অভদ্র মানুষ হওয়ার দরকার নেই !!।
লুকাস এস

2
@ লুকাস: আমি মনে করি যে এটি সম্ভবত আপনার উত্তরটি টাইপ করতে 13 মিনিট সময় নিয়েছে :) এবং নীচের ভোটের জন্য ধন্যবাদ ... অনেক প্রশংসা হয়েছে
মহাওকে

13

আপনি কী বোঝাতে চেয়েছেন তার উপর নির্ভর করে। আপনার লক্ষ্য যদি অতিরিক্ত কাজ অপসারণ করে তবে এটি কাজ করে।

s='foo'
string='%s bar baz %s bar baz %s bar baz' % (3*(s,))

3
>>> s1 ='arbit'
>>> s2 = 'hello world '.join( [s]*3 )
>>> print s2
arbit hello world arbit hello world arbit

আমি অনুমান করি যে প্রশ্নের উদাহরণটি 'হ্যালো ওয়ার্ল্ড' পুনরাবৃত্তি সম্পর্কে ছিল না, তবে কোনও নকল ছাড়াই একটি আসল টেম্পলেট ছিল। এজন্যই আমি ডাউনটিভোট করেছি।
গ্রে

1

Fstrings

আপনি যদি ব্যবহার করছেন তবে Python 3.6+আপনি নতুন তথাকথিত ব্যবহার করতে পারেন f-stringsযা ফর্ম্যাট করা স্ট্রিংয়ের জন্য দাঁড়িয়েছে এবং এটি fস্ট্রিংয়ের শুরুতে অক্ষর যুক্ত করে এটি এফ-স্ট্রিং হিসাবে চিহ্নিত করতে ব্যবহার করা যেতে পারে ।

price = 123
name = "Jerry"
print(f"{name}!!, {price} is much, isn't {price} a lot? {name}!")
>Jerry!!, 123 is much, isn't 123 a lot? Jerry!

এফ-স্ট্রিংগুলি ব্যবহারের প্রধান সুবিধা হ'ল এগুলি আরও পঠনযোগ্য, দ্রুততর হতে পারে এবং আরও ভাল পারফরম্যান্স সরবরাহ করে:

প্রত্যেকের জন্য উত্স পান্ডা: পাইথন ডেটা বিশ্লেষণ, ড্যানিয়েল ওয়াই চেন দ্বারা

benchmarks

কোনও সন্দেহ নেই যে f-stringsনতুনগুলি আরও বেশি পঠনযোগ্য, আপনাকে স্ট্রিংগুলি পুনর্নির্মাণ করতে হবে না, তবে সহায়তাকারী উদ্ধৃতিতে যেমন বলা হয়েছে তবু এটি আরও দ্রুত?

price = 123
name = "Jerry"

def new():
    x = f"{name}!!, {price} is much, isn't {price} a lot? {name}!"


def old():
    x = "{1}!!, {0} is much, isn't {0} a lot? {1}!".format(price, name)

import timeit
print(timeit.timeit('new()', setup='from __main__ import new', number=10**7))
print(timeit.timeit('old()', setup='from __main__ import old', number=10**7))
> 3.8741058271543776  #new
> 5.861819514350163   #old

10 মিলিয়ন পরীক্ষা চালানো দেখে মনে হচ্ছে f-stringsনতুনটি ম্যাপিংয়ে আসলে আরও দ্রুত।

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