پیشوندهای u و r در رشتههای پایتون دقیقاً چه کار میکنند و رشتههای خام (raw string literals) چی هستند؟
What exactly do u and r string prefixes do, and what are raw string literals?
در زبان پایتون، وقتی از پیشوندهای u و r در تعریف رشتهها استفاده میکنیم، این پیشوندها چه تأثیری دارند و چه مفهومی دارند؟ همچنین، منظور از "رشتههای خام" (raw string literals) در پایتون چیست؟
در زبان پایتون، وقتی از پیشوندهای u و r در تعریف رشتهها استفاده میکنیم، این پیشوندها چه تأثیری دارند و چه مفهومی دارند؟ همچنین، منظور از رشتههای خام (raw string literals) در پایتون چیست؟
پاسخ سوال به فارسی:
خب، توی پایتون دو تا پیشوند u و r داریم که هر کدوم کارای خاص خودشون رو میکنند.
- پیشوند u:
این پیشوند در نسخههای قدیمیتر پایتون (مثل پایتون 2) استفاده میشد تا به رشتهها نشون بده که قراره به صورت رشته یونیکد پردازش بشن. این یعنی کاراکترها به جای اینکه بر اساس ASCII باشن، به صورت یونیکد تفسیر میشن. اما توی پایتون 3، همه رشتهها به صورت پیشفرض یونیکدن، پس این پیشوند دیگه زیاد کاربردی نداره.
# This creates a Unicode string in Python 2 my_string = u"سلام"
- پیشوند r:
این پیشوند به معنی رشته خام (raw string) هست. رشته خام یعنی تمام کاراکترها داخل رشته همون طوری که هستند تفسیر میشن و کاراکترهای خاص مثل \n (که به معنی خط جدید هست) یا \t (که برای تب استفاده میشه) دیگه به صورت ویژه تفسیر نمیشن. این موضوع خیلی به درد میخوره وقتی میخوایم رشتههایی مثل مسیر فایلها یا الگوهای regex بنویسیم.
# Raw string - no special treatment for backslashes path = r"C:\Users\YourName\Documents"
نکته:
توی پایتون 3 نیازی به استفاده از u نیست چون همه رشتهها به صورت پیشفرض یونیکدن. اما r هنوز هم استفاده میشه چون مواقعی هست که میخوایم از تفسیر ویژهی کاراکترها جلوگیری کنیم.