از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
نحوه تعویض مقادیر دو متغیر بدون متغیر موقت در پایتون
سرفصلهای مطلب
تعویض مقادیر دو متغیر یک کار رایج در برنامه نویسی است. در حالی که ساده ترین رویکرد شامل استفاده از یک متغیر موقت است، پایتون چندین تکنیک زیبا را برای دستیابی به یک نتیجه بدون نیاز به آن متغیر اضافی ارائه می دهد.
در این آموزش، ما نگاهی به چند روش برای مبادله مقادیر متغیر در پایتون بدون استفاده از متغیر موقت خواهیم داشت.
چرا می خواهید مقادیر دو متغیر را بدون متغیر موقت در پایتون عوض کنید؟
تعویض مقادیر دو متغیر بدون استفاده از متغیر موقت در شرایطی که میخواهید مصرف حافظه یا پیچیدگی کد را به حداقل برسانید، مهم است.
در حالی که استفاده از یک متغیر موقت یک روش ساده و رایج برای مبادله مقادیر است، شرایطی وجود دارد که ممکن است تکنیکهای جایگزین را ترجیح دهید.
مزایای تعویض بدون متغیر موقت
- کارایی حافظه: تعویض بدون متغیر موقت باعث کاهش سربار حافظه می شود زیرا برای نگهداری موقت یکی از مقادیر به متغیر اضافی نیاز ندارید. در برخی از محیط های محدود به منابع، این می تواند مهم باشد.
- مختصر بودن: روش هایی مانند باز کردن بسته بندی تاپل و عملیات بیتی XOR راه حل های مختصر و ظریف تری ارائه می دهند. آنها میتوانند کد شما را خواناتر کنند و به خطوط کمتری نیاز داشته باشند، که مخصوصاً برای کدهای کوچک مفید است.
- کد عملکردی و بیانی: برخی از توسعه دهندگان کد مختصر و رسا را ترجیح می دهند. استفاده از این روش ها می تواند نیت کد را واضح تر کند و درهم و برهمی را کاهش دهد.
مزایای استفاده از متغیر موقت
- سازگاری: همه سناریوها امکان استفاده از برخی تکنیک های پیشرفته مبادله را نمی دهند. به عنوان مثال، XOR روش عملیات بیتی برای اعداد صحیح طراحی شده است و با انواع داده های دیگر به خوبی کار نمی کند.
- وضوح و خوانایی: درک آن برای توسعه دهندگانی که ممکن است با تکنیک های پیشرفته تر آشنا نباشند آسان تر است. مبادله مقادیر با یک متغیر موقت ساده ترین و شناخته شده ترین روش است.
- قابلیت نگهداری: کدی که از یک متغیر موقت استفاده میکند، اغلب در درازمدت قابل نگهداری است، زیرا درک آن آسانتر و کمتر مستعد خطا است.
نحوه تعویض متغیرها در پایتون با استفاده از Tuple Unpacking
پایتون به ما این امکان را می دهد که مقادیر دو متغیر را با یک خط کد با استفاده از تاپل باز کردن تغییر دهیم. (در صورت نیاز به بررسی، می توانید در اینجا اطلاعات بیشتری در مورد تاپل ها در پایتون بخوانید.)
باز کردن بسته بندی تاپل که به عنوان انتساب تاپل یا تجزیه تاپل نیز شناخته می شود، به توسعه دهندگان این امکان را می دهد که عناصر یک تاپل را به چندین متغیر در یک عبارت اختصاص دهند.
این تکنیک امکان پذیر است زیرا می توانید چندین متغیر را همزمان با استفاده از یک تاپل در سمت راست عملگر تخصیص اختصاص دهید. در اینجا یک مثال است:
در این کد، a
و b
بدون متغیر موقت مبادله می شوند. مقادیر در یک مرحله دوباره تخصیص داده می شوند و این رویکرد را مختصر و قابل خواندن می کند.
نحوه تعویض متغیرها در پایتون با استفاده از عملیات حسابی
روش دیگر برای مبادله مقادیر، استفاده از عملیات حسابی است. در اینجا ما از جمع و تفریق برای انجام مبادله بدون نیاز به متغیر اضافی استفاده می کنیم.
در این روش مجموع a
و b
اختصاص داده شده است a
و سپس b
به تفاوت بین جدید به روز می شود a
و قدیمی b
. سرانجام، a
برای نشان دادن تفاوت بین جدید به روز می شود a
و جدید b
. نتیجه یک مبادله موفقیت آمیز مقادیر است.
نحوه تعویض متغیرها در پایتون با استفاده از عملگر XOR Bitwise
برای مقادیر صحیح، یک روش هوشمندانه شامل استفاده از XOR (^) عملگر بیتی برای مبادله مقادیر بدون متغیر موقت.
اپراتور XOR که توسط ^
نماد، یک عملگر بیتی است که روی تک تک بیت های اعداد عمل می کند. وقتی روی اعداد صحیح اعمال می شود، می تواند روشی هوشمندانه برای مبادله مقادیر متغیر بدون متغیر موقت باشد.
a = 5
b = 10
a = a ^ b
b = a ^ b
a = a ^ b
print("a:", a)
print("b:", b)
در اینجا نحوه عملکرد این روش گام به گام آورده شده است
بیایید آنچه را که در کد بالا اتفاق می افتد مرور کنیم:
مقادیر اولیه: در آغاز، a
روی 5 تنظیم شده است و b
روی 10 تنظیم شده است.
- در باینری،
a
است0101
، وb
است1010
.
XORing a
و b
(خط اول):
a ^ b
عملیات XOR بین استa
وb
.- عملگر XOR (^) نمایش های باینری را با هم مقایسه می کند
a
وb
ذره ذره. - در باینری،
a
است0101
، وb
است1010
. وقتی XORed شد، بیتهای متفاوت را برمیگرداند و بیتهای یکسان را ترک میکند. - نتیجه این است
1111
در باینری که 15 در اعشار است. - بنابراین، پس از خط اول،
a
میشه 15
XORing a
و جدید b
(خط دوم):
- حالا که
a
دارای مقدار 15 وb
هنوز 10 است، ما XORa
با جدیدb
. a ^ b
است15 ^ 10
. در باینری،a
است1111
، وb
است1010
.- عملیات XOR بیت های مختلف را برمیگرداند، بنابراین نتیجه این است
0101
در باینری که 5 در اعشار است. - بعد از این خط،
b
5 می شود.
XORing a
و جدید b
باز هم (خط سوم):
- در حال حاضر، با
a
15 بودن وb
با بودن 5، ما XORa
با جدیدb
یک بار دیگر a ^ b
است15 ^ 5
. در باینری،a
است1111
، وb
است0101
.- عملیات XOR دوباره بیت های مختلف را برمیگرداند، بنابراین نتیجه این است
1010
در باینری که 10 در اعشار است. - بعد از این خط،
a
10 می شود.
در این مرحله، مقادیر a
و b
به طور موثر مبادله شده اند. عملیات XOR به ما اجازه داد تا بدون استفاده از یک متغیر موقت اضافی، مبادله را انجام دهیم.
این روش کار می کند زیرا عملیات XOR بین دو عدد یکسان منجر به 0 می شود و XOR کردن هر عددی با 0 عدد را بدون تغییر می گذارد.
این تکنیک روشی هوشمندانه برای دستیابی به مبادله مقادیر برای متغیرهای عدد صحیح است و می تواند در سناریوهایی که کارایی حافظه یا مختصر بودن کد در اولویت است مفید باشد. با این حال، مهم است که به یاد داشته باشید که به طور خاص برای مقادیر صحیح طراحی شده است و ممکن است برای انواع داده های دیگر آنطور که انتظار می رود کار نکند.
نحوه تعویض متغیرها در پایتون با استفاده از عبارات ریاضی (برای مقادیر عددی)
روش ساده دیگر شامل استفاده از عبارات ریاضی برای مبادله مقادیر است.
در پایتون، یک عبارت انتساب (:=)
به شما این امکان را می دهد که یک مقدار را به عنوان بخشی از یک عبارت بزرگتر به یک متغیر اختصاص دهید. اغلب برای تخصیص یک مقدار به یک متغیر و استفاده از آن مقدار اختصاص داده شده در یک خط استفاده می شود. این می تواند به ویژه زمانی مفید باشد که می خواهید از تکرار اجتناب کنید و کد مختصرتری بنویسید.
در اینجا چیزی است که گام به گام اتفاق می افتد
b := a
: این قسمت از عبارت عبارت انتساب است. مقدار آن را تعیین می کندa
بهb
. بنابراین، پس از این تکلیف،b
ارزش خواهد داشتa
، وa
بدون تغییر باقی می ماند. این تخصیص در عبارت بزرگتر اتفاق می افتد.a + b - (b := a)
: بقیه عبارت عملیات ریاضی را انجام می دهد. مجموع را محاسبه می کندa
و اصلb
، با کم کردن مقدارb
پس از اینکه مقدار آن به آن اختصاص یافتa
.
a + b
مقادیر اصلی را اضافه می کندa
وb
.(b := a)
قبلا به روز شده استb
برای داشتن ارزشa
، بنابراین این بخش به ارزیابی می شودa
.- در نهایت، نتیجه از مجموع کسر می شود
a
و اصلb
.
به طور موثر، این خط واحد از کد مقادیر را مبادله می کند a
و b
بدون نیاز به متغیر موقت مقدار آن را تعیین می کند a
به b
و ارزش b
به a
در حین انجام عملیات تعویض در یک خط.
اما باید توجه داشته باشید که در حالی که عبارات انتساب می توانند کد را مختصرتر کنند، اما اگر با این ویژگی آشنایی ندارید، می توانند آن را کمتر خوانا کنند. بنابراین مطمئن شوید که از عبارات تکلیف با دقت استفاده می کنید و هنگام تصمیم گیری در مورد استفاده از آنها، خوانایی و قابلیت نگهداری را در نظر بگیرید.
نحوه تعویض متغیرها در پایتون با استفاده از یک تابع
اگر نیاز به تعویض متغیرها در چندین مکان در کد خود دارید، میتوانید تابعی ایجاد کنید تا فرآیند قابل استفادهتر شود.
این تابع منطق مبادله را پنهان می کند و مقادیر مبادله شده را برمی گرداند و کد را ماژولارتر و خواناتر می کند.
زمان استفاده از هر روش
هر روش مبادله مقادیر در پایتون بدون متغیر موقت نقاط قوت و ضعف خاص خود را دارد. انتخاب این که از کدام روش استفاده شود بستگی به مورد استفاده خاص و ترجیحات کدنویسی شما دارد.
در اینجا خلاصه ای از موارد استفاده که برای هر نمونه مناسب است، همراه با برخی ملاحظات آورده شده است:
تاپل باز کردن بسته بندی
- مورد استفاده: تعویض دو مقدار با در نظر گرفتن سادگی و خوانایی.
- نقاط قوت: این روش مختصر، قابل درک است و به ویژه برای مبادله دو متغیر به روشی واضح و سرراست مناسب است.
- ملاحظات: برای دو متغیر بهترین کار را دارد و برای ساختارهای داده پیچیده تر مناسب نیست.
عملیات حسابی
- Use Case: روشی ساده و قابل درک برای مبادله مقادیر، مناسب برای طیف وسیعی از سناریوها.
- نقاط قوت: رویکرد حسابی یک روش همه کاره است که به خوبی با مقادیر عددی کار می کند و به راحتی در زمینه های مختلف اعمال می شود.
- ملاحظات: به سه عملیات حسابی نیاز دارد که ممکن است نسبت به روش های دیگر مختصرتر باشد.
اپراتور بیتی XOR
- Use Case: جابجایی مقادیر صحیح در حالی که مصرف حافظه را به حداقل می رساند.
- نقاط قوت: این روش از نظر حافظه کارآمد و مختصر است. برای سناریوهایی که میخواهید حافظه را ذخیره کنید و از یک رویکرد پیشرفتهتر و کارآمدتر استفاده کنید، مناسب است.
- ملاحظات: این مختص اعداد صحیح است و ممکن است برای توسعه دهندگانی که با عملیات بیتی آشنایی ندارند، خوانا نباشد.
عبارات ریاضی (بیان تکلیف)
- Use Case: روشی مختصر برای تعویض مقادیر با حفظ خوانایی کد.
- نقاط قوت: از این تکنیک می توان برای مبادله مقادیر به طور خلاصه در یک خط استفاده کرد. به ویژه زمانی مفید است که می خواهید بین مختصر بودن و خوانایی تعادل برقرار کنید.
- ملاحظات: متکی به استفاده از عبارات انتساب (:=) است که ممکن است برای همه توسعه دهندگان پایتون آشنا نباشد.
استفاده از یک تابع
- Use Case: زمانی که نیاز دارید مقادیر را در چندین مکان در کد خود تعویض کنید.
- نقاط قوت: ایجاد یک تابع برای مبادله ارزش، منطق را کپسوله می کند و آن را قابل استفاده مجدد می کند. این زمانی مفید است که شما نیاز به مبادله مقادیر در قسمت های مختلف کد خود دارید.
- ملاحظات: یک فراخوانی تابع را معرفی می کند، که ممکن است برای یک تعویض ساده یکباره مختصرتر نباشد.
روشی برای همه وجود ندارد که در هر شرایطی بهتر عمل کند. انتخاب شما باید بر اساس عواملی مانند مورد استفاده خاص، انواع داده های درگیر، و اهمیت کارایی حافظه یا خوانایی کد هدایت شود.
از نظر سهولت، روش هایی مانند باز کردن بسته بندی تاپل و عملیات حسابی برای اکثر توسعه دهندگان پایتون به طور کلی آسان تر قابل درک هستند. روش بیتی XOR، اگرچه کارآمد است، اما ممکن است کمتر قابل خواندن باشد و به طور معمول مورد استفاده قرار نگیرد. روش بیان ریاضی با عبارات انتساب مختصر است اما ممکن است برای توسعه دهندگانی که با آخرین ویژگی های پایتون به روز نیستند کمتر آشنا باشد.
در نهایت، بهترین روش به نیازهای خاص شما و ترجیحات سبک کدنویسی بستگی دارد. هنگام انتخاب تکنیک مبادله ارزش، ایجاد تعادل بین کارایی، خوانایی و قابلیت نگهداری ضروری است.
نتیجه
در این مقاله توضیح دادم که چگونه می توانید مقادیر دو متغیر را در پایتون بدون متغیر موقت تعویض کنید. ما به استفاده از چندین تکنیک، مانند باز کردن بسته بندی تاپل، عملیات حسابی، عملیات بیتی XOR، عبارات ریاضی، یا کپسوله کردن (پنهان کردن) منطق در یک تابع نگاه کردیم.
این روشها گزینههایی را برای موقعیتهای مختلف، از تک خطهای مختصر گرفته تا عملکردهای قابل استفاده مجدد، ارائه میکنند. با در نظر گرفتن انواع داده ها و زمینه کد خود، یکی را انتخاب کنید که به بهترین وجه با نیازهای خاص شما مطابقت دارد. چه خوانایی، عملکرد یا مختصر بودن را در اولویت قرار دهید، پایتون راه حلی برای همه ارائه می دهد.
منتشر شده در 1402-12-26 11:35:05