আমি কীভাবে ইনলাইন ভেরিয়েবলগুলি সহ একাধিক লাইন পাইথন স্ট্রিং তৈরি করব?


102

আমি বহু লাইন পাইথন স্ট্রিংয়ের মধ্যে ভেরিয়েবলগুলি ব্যবহার করার জন্য একটি পরিষ্কার উপায় সন্ধান করছি। বলুন আমি নিম্নলিখিতটি করতে চেয়েছিলাম:

string1 = go
string2 = now
string3 = great

"""
I will $string1 there
I will go $string2
$string3
"""

$পাইথন সিনট্যাক্সের একটি ভেরিয়েবল নির্দেশ করার জন্য পার্লের মতো কিছু আছে কিনা তা আমি সন্ধান করছি ।

যদি তা না হয় - ভেরিয়েবলগুলি সহ একটি বহুরেখা তৈরি করার সর্বোত্তম উপায় কী?

উত্তর:


158

সাধারণ উপায় হ'ল format()ফাংশন:

>>> s = "This is an {example} with {vars}".format(vars="variables", example="example")
>>> s
'This is an example with variables'

এটি একটি বহু-লাইন বিন্যাসের স্ট্রিংয়ের সাথে সূক্ষ্মভাবে কাজ করে:

>>> s = '''\
... This is a {length} example.
... Here is a {ordinal} line.\
... '''.format(length='multi-line', ordinal='second')
>>> print(s)
This is a multi-line example.
Here is a second line.

আপনি ভেরিয়েবল সহ একটি অভিধানও পাস করতে পারেন:

>>> d = { 'vars': "variables", 'example': "example" }
>>> s = "This is an {example} with {vars}"
>>> s.format(**d)
'This is an example with variables'

আপনি যা চেয়েছিলেন তার নিকটতম জিনিস (সিনট্যাক্সের ক্ষেত্রে) টেম্পলেট স্ট্রিং । উদাহরণ স্বরূপ:

>>> from string import Template
>>> t = Template("This is an $example with $vars")
>>> t.substitute({ 'example': "example", 'vars': "variables"})
'This is an example with variables'

আমার যোগ করা উচিত যদিও format()ফাংশনটি বেশি সাধারণ কারণ এটি সহজেই পাওয়া যায় এবং এর জন্য কোনও আমদানি লাইনের প্রয়োজন হয় না।


4
প্রশ্নে vars()বা locals()অভিধান হিসাবে অভিধান হিসাবে ব্যবহার করতে পারে
ইসমাইল বাদোয়া

4
ইমপ্লাউই স্পষ্ট বর্ণিত চেয়ে ভাল। আপনার প্রয়োজনীয় ভেরিয়েবলগুলিতে পাস করা ভাল। আপনার কী প্রয়োজন তা যদি আপনি না জানেন, কারণ স্ট্রিংটি ব্যবহারকারী দ্বারা সরবরাহ করা হয়, তবে "ভেরিয়েবল" dictকোনওভাবেই আইটেম হওয়া উচিত ।
agf

দ্বিতীয় সমাধানটি পরিষ্কার আইএমও। মাল্টিলাইন স্টিংয়ের মধ্যে অভিধান থেকে সুস্পষ্ট পরিবর্তনশীল নামের সাথে অভিধান। আমি এই পদ্ধতি ব্যবহার করা হবে। ধন্যবাদ নীচে দুর্দান্ত উত্তরের লোড কিন্তু এটি নিখুঁত ছিল।
বিবর্তন

@ সাইমনভিজার, "স্ট্রিং"। ফর্ম্যাট (...) লিগ্যাসি পাইথন সংস্করণগুলিতে বৈধ নয় (উদাহরণস্বরূপ 2.4)
ওজ 123

কোঁকড়া ধনুর্বন্ধনী ব্যবহার করে, তাদের মতো পালানো দরকার {{this}}
জনি

54

উল্লেখ্য : পাইথন মধ্যে বিন্যাসন স্ট্রিং না করার প্রস্তাবিত উপায় ব্যবহার করা format()যেমন রূপরেখায় গৃহীত উত্তর । আমি এই উত্তরটিকে সি-স্টাইল সিনট্যাক্সের উদাহরণ হিসাবে সংরক্ষণ করছি যা সমর্থিত।

# NOTE: format() is a better choice!
string1 = "go"
string2 = "now"
string3 = "great"

s = """
I will %s there
I will go %s
%s
""" % (string1, string2, string3)

print(s)

কিছু পড়া:


4
এটি আসলে একই নয় কারণ ওপি নামকরা প্যারামিটার চায়, অবস্থানগত নয়।
ইসমাইল বাদোয়া

4
এটি এখনও একটি ভাল সমাধান এবং একটি বহু-লাইন অন্তরঙ্গনের জন্য এটি আরও সরাসরি। আপনাকে কোনও জিনিস আমদানি করতে হবে না এবং এটি নিয়মিত পাইথন ইন্টারপোলেশন ব্যবহার করে।
ফুল ফোটে

4
" আপনি সম্ভবত
গুগলিংয়ের

32

আপনি পাইথন 3.6 এর এফ-স্ট্রিংগুলি ভেরিয়েবলগুলির জন্য বহু-লাইন বা দীর্ঘ একক-লাইন স্ট্রিংয়ের জন্য ব্যবহার করতে পারেন । আপনি ম্যানুয়ালি নতুন লাইন অক্ষর ব্যবহার করে নির্দিষ্ট করতে পারেন \n

একটি বহু-লাইনের স্ট্রিংয়ে পরিবর্তনশীল

string1 = "go"
string2 = "now"
string3 = "great"

multiline_string = (f"I will {string1} there\n"
                    f"I will go {string2}.\n"
                    f"{string3}.")

print(multiline_string)

আমি সেখানে
যাব আমি এখন
দুর্দান্ত যাব

একটি দীর্ঘ একক-লাইনের স্ট্রিংয়ে পরিবর্তনশীল

string1 = "go"
string2 = "now"
string3 = "great"

singleline_string = (f"I will {string1} there. "
                     f"I will go {string2}. "
                     f"{string3}.")

print(singleline_string)

আমি সেখানে যাব. আমি এখন যাব. দুর্দান্ত


বিকল্পভাবে, আপনি ট্রিপল উদ্ধৃতি সহ একটি বহু লাইন এফ স্ট্রিং তৈরি করতে পারেন।

multiline_string = f"""I will {string1} there.
I will go {string2}.
{string3}."""

এটি আপনার সোর্স কোড চমত্কার খুঁজছেন, এবং প্রাক Python3.6 আপনি শুধুমাত্র এই (প্রথম বন্ধনী অতিরিক্ত সেট এবং ব্যবহার করে একই প্রভাব পেতে পারেন রাখে +: CONCATENATE করার জন্য) stackoverflow.com/a/54564926/4561887
গ্যাব্রিয়েল আপনি Staples

ট্রিপল উদ্ধৃতি ব্যাপকভাবে পছন্দ করা হয়। আপনার প্রথমে সেই ফর্মটি উপস্থাপন করা উচিত।
jpmc26

@ jpmc26 আমি কোড ইন্ডেন্টেশনের জন্য পিইপি 8 এর নির্দেশিকাগুলির উপর ভিত্তি করে প্রথম বন্ধনী-স্টাইল উপস্থাপন করেছি । ট্রিপল উদ্ধৃতি কেন পছন্দ হবে?
স্টিভোসিয়াক

10

এটাই তুমি চাও:

>>> string1 = "go"
>>> string2 = "now"
>>> string3 = "great"
>>> mystring = """
... I will {string1} there
... I will go {string2}
... {string3}
... """
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, 'string3': 'great', '__package__': None, 'mystring': "\nI will {string1} there\nI will go {string2}\n{string3}\n", '__name__': '__main__', 'string2': 'now', '__doc__': None, 'string1': 'go'}
>>> print(mystring.format(**locals()))

I will go there
I will go now
great

দ্রষ্টব্য যে ট্রিপল কোটগুলি """নতুন লাইনের সংরক্ষণ করে, যার অর্থ আগে এবং পরে অতিরিক্ত নিউলাইন রয়েছেmystring
স্টিভোসিয়াক

একটি নতুন লাইন তৈরি এড়াতে আপনি ট্রিপল কোটসের অভ্যন্তরে একটি পিছনে ব্যবহার করতে পারেন .strip(), .rstrip()বা .lstrip(), বা ue করতে পারেন । মাইস্ট্রিং = "" "\ এবিসি \" ""
হাভোক

6

একটি অভিধানে পাস করা যেতে পারে format(), প্রতিটি মূল নাম প্রতিটি সম্পর্কিত মানের জন্য একটি পরিবর্তনশীল হয়ে যাবে।

dict = {'string1': 'go',
        'string2': 'now',
        'string3': 'great'}

multiline_string = '''I'm will {string1} there
I will go {string2}
{string3}'''.format(**dict)

print(multiline_string)


এছাড়াও একটি তালিকাতে পাস করা যেতে পারে format(), প্রতিটি মানের সূচক নম্বরটি এক্ষেত্রে ভেরিয়েবল হিসাবে ব্যবহৃত হবে।

list = ['go',
        'now',
        'great']

multiline_string = '''I'm will {0} there
I will go {1}
{2}'''.format(*list)

print(multiline_string)


উপরে উভয় সমাধান একই আউটপুট হবে:

আমি সেখানে
যাব আমি এখন
মহান যাব


1

যদি কেউ পাইথন-গ্রাফিকাল ক্লায়েন্টের কাছ থেকে কোন অবজেক্টটি ভেরিয়েবল হিসাবে পাস করার সমাধান খুঁজতে চাইলে আমি এখানে যা ব্যবহার করেছি তা এখানে রয়েছে:

query = """
{{
  pairs(block: {block} first: 200, orderBy: trackedReserveETH, orderDirection: desc) {{
    id
    txCount
    reserveUSD
    trackedReserveETH
    volumeUSD
  }}
}}
""".format(block=''.join(['{number: ', str(block), '}']))

 query = gql(query)

আমার মতো সমস্ত কোঁকড়া ধনুর্বন্ধনী পালানোর বিষয়টি নিশ্চিত করুন: "{{", "}}"


1

এফ-স্ট্রিংগুলি , "ফর্ম্যাটেড স্ট্রিং ল্যাটারালস" নামে পরিচিত, স্ট্রিং লিটারাল যা fশুরুতে থাকে; এবং কোঁকড়া ধনুর্বন্ধনী যা অভিব্যক্তিগুলি সহ তাদের মানগুলির সাথে প্রতিস্থাপিত হবে।

রান-টাইমে এফ-স্ট্রিংগুলি মূল্যায়ন করা হয়।

সুতরাং আপনার কোডটি আবার লিখিত হতে পারে:

string1="go"
string2="now"
string3="great"
print(f"""
I will {string1} there
I will go {string2}
{string3}
""")

এবং এটি মূল্যায়ন করবে:

I will go there
I will go now
great

আপনি এটি সম্পর্কে এখানে আরও শিখতে পারেন ।

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