الكائن النصي في Python غير قابل للتغيير. لذلك، في كل مرة نستخدم فيها عامل الجمع (+) لدمج سلسلتين، يتم إنشاء سلسلة جديدة. إذا كنا بحاجة إلى إلحاق العديد من السلاسل، فإن استخدام عامل الجمع (+) سيؤدي إلى إنشاء العديد من السلاسل المؤقتة بشكل غير ضروري قبل أن نحصل على النتيجة النهائية.
إلحاق سلسلة Python
لنلقي نظرة على وظيفة لدمج سلسلة ‘n’ مرات.
def str_append(s, n):
output = ''
i = 0
while i < n:
output += s
i = i + 1
return output
يرجى ملاحظة أنني أقوم بتعريف هذه الوظيفة لعرض استخدام عامل الجمع (+). سأستخدم في وقت لاحق وحدة timeit لاختبار الأداء. إذا كنت ترغب ببساطة في دمج سلسلة ‘n’ مرات، يمكنك القيام بذلك بسهولة باستخدام s = 'Hi' * 10
.
طريقة أخرى لأداء عملية إلحاق السلسلة هي عن طريق إنشاء قائمة وإلحاق السلاسل بالقائمة. ثم استخدم وظيفة الانضمام join() للسلسلة لدمجها معًا للحصول على سلسلة النتيجة.
def str_append_list_join(s, n):
l1 = []
i = 0
while i < n:
l1.append(s)
i += 1
return ''.join(l1)
لنقم بتجربة هذه الطرق للتأكد من أنها تعمل كما هو متوقع.
if __name__ == "__main__":
print('Append using + operator:', str_append('Hi', 10))
print('Append using list and join():', str_append_list_join('Hi', 10))
# استخدم الأدناه لهذه الحالة، تم إنشاء الطرق أعلاه لكي نتمكن
# من فحص الأداء باستخدام وحدة timeit
print('Append using * operator:', 'Hi' * 10)
الناتج:
Append using + operator: HiHiHiHiHiHiHiHiHiHi
Append using list and join(): HiHiHiHiHiHiHiHiHiHi
Append using * operator: HiHiHiHiHiHiHiHiHiHi
أفضل طريقة لإلحاق السلاسل في Python
I have both the methods defined in string_append.py
file. Let’s use timeit module to check their performance.
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append("Hello", 1000)'
1000 loops, best of 5: 174 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append_list_join("Hello", 1000)'
1000 loops, best of 5: 140 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append("Hi", 1000)'
1000 loops, best of 5: 165 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append_list_join("Hi", 1000)'
1000 loops, best of 5: 139 usec per loop
ملخص
إذا كانت هناك عدد قليل من السلاسل، فيمكنك استخدام أي طريقة لإلحاقها. من وجهة نظر قابلية القراءة، يبدو استخدام عامل الجمع (+) أفضل لعدد قليل من السلاسل. ومع ذلك، إذا كنت بحاجة لإلحاق الكثير من السلاسل، فعليك استخدام القائمة ووظيفة join().
يمكنك التحقق من النص البرمجي الكامل لبايثون والمزيد من أمثلة بايثون من مستودعنا على GitHub.
Source:
https://www.digitalocean.com/community/tutorials/python-string-append