وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

پیشوندهای رشته «u» و «r» و رشته‌های خام در پایتون

0 6
زمان لازم برای مطالعه: 6 دقیقه


معرفی

در حین یادگیری پایتون یا خواندن کد شخص دیگری، ممکن است با پیشوندهای ‘u’ و ‘r’ و حروف خام رشته ای مواجه شده باشید. اما این اصطلاحات به چه معناست؟ آنها چگونه روی کد پایتون ما تأثیر می گذارند؟ در این مقاله سعی خواهیم کرد این مفاهیم را رمزگشایی کنیم و کاربرد آنها را در پایتون درک کنیم.

رشته های Literals در پایتون

رشته لفظی در پایتون دنباله ای از کاراکترهای محصور در نقل قول است. ما می‌توانیم از گیومه‌های تکی (‘ ‘) یا دو گیومه (” “) برای تعریف یک رشته استفاده کنیم.


my_string = 'Hello, rasanegar readers!'
print(my_string)


my_string = "Hello, rasanegar readers!"
print(my_string)

با اجرای این کد موارد زیر به شما داده می شود:

$ python string_example.py
Hello, rasanegar readers!
Hello, rasanegar readers!

خیلی سرراست، درست است؟ به نظر من چیزی که اکثر مردم را گیج می کند همین است “به معنای واقعی کلمه” بخش ما عادت کرده ایم که آنها را فقط “رشته” صدا کنیم، بنابراین وقتی می شنوید که آن را “رشته واقعی” می نامند، چیزی پیچیده تر به نظر می رسد.

پایتون همچنین راه های دیگری برای تعریف رشته ها ارائه می دهد. می‌توانیم برای تغییر رفتار آن‌ها، حرف‌های رشته‌ای را با کاراکترهای خاصی پیشوند کنیم. اینجاست که پیشوندهای ‘u’ و ‘r’ وارد می شوند که بعداً در مورد آنها صحبت خواهیم کرد.

پایتون همچنین از نقل قول های سه گانه (””” یا “”” “””) برای تعریف رشته ها پشتیبانی می کند. اینها به ویژه زمانی مفید هستند که بخواهیم رشته ای را تعریف کنیم که چندین خط را در بر می گیرد.

در اینجا یک مثال از یک رشته چند خطی آورده شده است:


my_string = """
Hello, 
rasanegar readers!
"""
print(my_string)

با اجرای این کد، خروجی زیر خواهد بود:

$ python multiline_string_example.py

Hello, 
rasanegar readers!

به خطوط جدید در خروجی توجه کنید؟ این به لطف نقل قول های سه گانه است!

پیشوندهای رشته “u” و “r” چیست؟

در پایتون، رشته‌ها می‌توانند پیشوندهای اختیاری داشته باشند که اطلاعات بیشتری در مورد رشته ارائه می‌کنند. این پیشوندها ‘u’ و ‘r’ هستند و قبل از رشته literal برای تعیین نوع آن استفاده می شوند. پیشوند ‘u’ مخفف Unicode و پیشوند ‘r’ مخفف خام است.

اکنون، ممکن است تعجب کنید که رشته های یونیکد و خام چیست. خوب، بیایید آنها را یکی یکی بشکنیم و با پیشوند ‘u’ شروع کنیم.

پیشوند رشته ‘u’

پیشوند ‘u’ در پایتون مخفف Unicode است. برای تعریف رشته یونیکد استفاده می شود. اما رشته یونیکد چیست؟

یونیکد یک استاندارد رمزگذاری بین المللی است که برای هر کاراکتر، صرف نظر از پلتفرم، برنامه یا زبان، یک عدد منحصر به فرد ارائه می دهد. این امکان استفاده و نمایش متن از چندین زبان و مجموعه نمادها را در برنامه های پایتون شما فراهم می کند.

در پایتون 3.x، تمام رشته ها به طور پیش فرض یونیکد هستند. با این حال، در Python 2.x، باید از پیشوند ‘u’ برای تعریف رشته یونیکد استفاده کنید.

پیشنهاد می‌کنیم بخوانید:  یک محدوده به لیست در پایتون اضافه کنید

به عنوان مثال، اگر می خواهید یک رشته با حروف چینی در Python 2.x ایجاد کنید، باید از پیشوند ‘u’ مانند این استفاده کنید:

chinese_string = u'你好'
print(chinese_string)

وقتی این کد را اجرا می کنید، خروجی را دریافت خواهید کرد:

$ 你好

که در چینی “سلام” است.

توجه داشته باشید: در Python 3.x، همچنان می‌توانید از پیشوند «u» استفاده کنید، اما لازم نیست زیرا همه رشته‌ها به طور پیش‌فرض یونیکد هستند.

بنابراین، این پیشوند “u” است. این به شما کمک می کند تا با متن بین المللی در برنامه های پایتون خود کار کنید، به خصوص اگر از Python 2.x استفاده می کنید. اما پیشوند r چطور؟ در بخش بعدی به آن خواهیم پرداخت.

پیشوند رشته ‘r’

پیشوند ‘r’ در پایتون به معنای واقعی کلمه یک رشته خام است. هنگامی که یک رشته را با ‘r’ پیشوند قرار می دهید، به پایتون می گوید که رشته را دقیقاً همانطور که هست تفسیر کند و هیچ گونه بک اسلش یا متاکاراکتر خاصی را که ممکن است رشته داشته باشد تفسیر نکند.

این کد را در نظر بگیرید:

normal_string = "\tTab character"
print(normal_string)

خروجی:

    Tab character

اینجا، \t به عنوان یک کاراکتر تب تفسیر می شود. اما اگر پیشوند این رشته را با ‘r’ قرار دهیم:

raw_string = r"\tTab character"
print(raw_string)

خروجی:

\tTab character

می بینید که ‘\t’ دیگر به عنوان یک کاراکتر تب تفسیر نمی شود. به عنوان دو شخصیت مجزا در نظر گرفته می شود: یک بک اسلش و ‘t’.

این به ویژه در هنگام برخورد با عبارات منظم یا زمانی که نیاز دارید تعداد زیادی بک اسلش در رشته خود وارد کنید مفید است.

کار با پیشوندهای ‘u’ و ‘r’ در Python 2.x

حالا بیایید در مورد Python 2.x صحبت کنیم. در Python 2.x، از پیشوند ‘u’ برای نشان دادن یک رشته یونیکد استفاده می شود، در حالی که پیشوند ‘r’ برای نشان دادن یک رشته خام، درست مانند Python 3.x استفاده می شود.

با این حال، تفاوت در نوع رشته پیش فرض است. در پایتون 3.x، تمام رشته ها به طور پیش فرض یونیکد هستند. اما در Python 2.x رشته ها به طور پیش فرض ASCII بودند. بنابراین، اگر نیاز به کار با رشته های یونیکد در Python 2.x داشتید، باید آنها را با ‘u’ پیشوند قرار دهید.


unicode_string = u"Hello, world!"
print(unicode_string)

خروجی:

Hello, world!

اما اگر به یک رشته نیاز داشتید که هم Unicode باشد و هم خام در Python 2.x چه؟ می توانید از هر دو پیشوند “u” و “r” با هم استفاده کنید، مانند این:


unicode_raw_string = ur"\tHello, world!"
print(unicode_raw_string)

خروجی:

\tHello, world!

توجه داشته باشید: نحو “ur” است نه پشتیبانی در پایتون 3.x. اگر به یک رشته نیاز دارید که هم خام و هم یونیکد در پایتون 3.x باشد، می توانید از پیشوند r به تنهایی استفاده کنید، زیرا همه رشته ها به طور پیش فرض یونیکد هستند.

نکته کلیدی در اینجا این است که پیشوند ‘u’ در Python 2.x به دلیل پیش‌فرض ASCII مهم‌تر بود. در پایتون 3.x، تمام رشته ها به طور پیش فرض یونیکد هستند، بنابراین پیشوند ‘u’ چندان ضروری نیست. با این حال، پیشوند r هنوز برای کار با رشته های خام در هر دو نسخه بسیار مفید است.

پیشنهاد می‌کنیم بخوانید:  نمودارها در پایتون - تئوری و پیاده سازی - حداقل درختان پوشا

استفاده از لفظ رشته خام

اکنون که متوجه شدیم حرف‌های رشته‌ای خام چیست، بیایید به نمونه‌های بیشتری از روش استفاده از آنها در کد پایتون نگاه کنیم.

یکی از رایج‌ترین کاربردها برای لفظ رشته‌ای خام، عبارت‌های منظم است. عبارات معمولی اغلب شامل بک اسلش هستند که در صورت عدم استفاده صحیح می تواند منجر به مشکلاتی شود. با استفاده از یک رشته خام، به راحتی می توانیم از این مشکلات جلوگیری کنیم.

یکی دیگر از موارد استفاده رایج برای لفظهای رشته خام، هنگام کار با مسیرهای فایل ویندوز است. همانطور که می دانید، ویندوز در مسیرهای فایل خود از بک اسلش استفاده می کند که به دلیل نقش بک اسلش به عنوان یک کاراکتر فرار، می تواند در پایتون مشکلاتی ایجاد کند. با استفاده از یک رشته خام، می توانیم از این مسائل کاملاً جلوگیری کنیم.

در اینجا یک مثال است:


path = "C:\\path\\to\\file"
print(path)



path = r"C:\\path\\to\\file"
print(path)

همانطور که می بینید، رشته خام به ما اجازه می دهد تا مسیر فایل را به درستی نشان دهیم، در حالی که رشته استاندارد اینطور نیست.

اشتباهات رایج و روش اجتناب از آنها

هنگام کار با پیشوندهای رشته “u” و “r” و کلمات خام رشته ای در پایتون، تعدادی از اشتباهات رایج وجود دارد که توسعه دهندگان اغلب مرتکب می شوند. بیایید برخی از آنها را مرور کنیم و ببینیم چگونه می توانید از آنها اجتناب کنید.

اول، یک اشتباه رایج استفاده از پیشوند ‘u’ در پایتون 3.x است. به یاد داشته باشید که پیشوند ‘u’ در پایتون 3.x مورد نیاز نیست زیرا رشته ها به طور پیش فرض در این نسخه یونیکد هستند. استفاده از آن باعث خطا نمی شود، اما اضافی است و به طور بالقوه می تواند توسعه دهندگان دیگری را که کد شما را می خوانند سردرگم کند.


u_string = u'Hello, World!'

دوم، فراموش کردن استفاده از پیشوند ‘r’ هنگام کار با عبارات منظم می تواند منجر به نتایج غیرمنتظره به دلیل دنباله های فرار شود. همیشه هنگام برخورد با عبارات منظم در پایتون از پیشوند r استفاده کنید.


regex = '\bword\b'


regex = r'\bword\b'

در نهایت، درک نکردن این موضوع که حرف‌های رشته‌ای خام، بک اسلش را به عنوان یک کاراکتر خاص در نظر نمی‌گیرند، می‌تواند منجر به خطا شود. برای مثال، اگر می‌خواهید یک بک اسلش تحت اللفظی در انتهای یک رشته خام قرار دهید، ممکن است با مشکلاتی مواجه شوید زیرا پایتون همچنان یک بک اسلش را در انتهای رشته به عنوان فرار از نقل قول پایانی تفسیر می‌کند. برای اضافه کردن یک بک اسلش در انتها، باید با یک بک اسلش از آن فرار کنید، حتی در یک رشته خام.


raw_string = r'C:\path\'

# This is the correct way
raw_string = r'C:\path\\'

نتیجه

در این مقاله، پیشوندهای رشته «u» و «r» را در پایتون و همچنین حروف خام رشته‌ای را بررسی کرده‌ایم. ما آموخته ایم که پیشوند ‘u’ برای نشان دادن رشته های یونیکد استفاده می شود، در حالی که پیشوند ‘r’ برای رشته های خام استفاده می شود، که اسلش ها را به عنوان کاراکترهای تحت اللفظی به جای کاراکترهای فرار در نظر می گیرند. ما همچنین به اشتباهات رایج در هنگام استفاده از این پیشوندها و حروف الفبای رشته ای خام و روش اجتناب از آنها پرداختیم.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1402-12-27 13:24:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید