ترفندها و تکنیک‌های پایتون
29 ترفند پایتون که شاید از وجود آن‌ها بی اطلاع بودید
پایتون یکی از پر کاربردترین زبان‌های برنامه‌نویسی است. خوانایی و کوتاه‌نویسی دستورات باعث شده تا توسعه‌دهندگان از پایتون برای انجام پروژه‌های مختلف استفاده کنند. در این مطلب به معرفی چند ترفند کاربردی می‌پردازیم که در زمان کدنویسی به شما کمک می‌کنند.

1606683296_1_0.gif

1. جابه‌کردن دو مقدار بدون استفاده از متغیر ثالث

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

x, y = 10, 20

print(x, y)

x, y = y, x

print(x, y)

‌در قطعه کد بالا دو مقدار x و y بدون استفاده از متغیر ثالث تغییر می‌کنند.

2. معکوس کردن یک رشته در پایتون

a = "GeeksForGeeks"

print("Reverse is", a[::-1])

3. ساخت یک رشته منفرد از تمامی عناصر درون یک فهرست

a = ["Geeks", "For", "Geeks"]

print(" ".join(a))

‌4. به‌کارگیری زنجیره‌ای از عملگرهای مقایسه‌ای

n = 10

result = 1 < n < 20

print(result)

result = 1 > n <= 9

print(result)

5. چاپ مسیر فایل مرتبط با ماژول‌ها

import os

import socket

  

print(os)

print(socket)

خروجی قطعه کد بالا به شرح زیر است:

<module 'os' from '/usr/lib/python3.5/os.py'>

<module 'socket' from '/usr/lib/python3.5/socket.py'>

6. پیاده‌سازی مفهوم Enum در پایتون

class MyName:

    Geeks, For, Geeks = range(3)

  

print(MyName.Geeks)

print(MyName.For)

print(MyName.Geeks)

7. برگرداندن چند مقدار از توابع

def x():

    return 1, 2, 3, 4

a, b, c, d = x()

  

print(a, b, c, d)

8. پیدا کردن عنصری که بیشتر از سایر عناصر در یک فهرست تکرار شده است

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]

print(max(set(test), key = test.count))

9. بررسی وضعیت حافظه یک شی

import sys

x = 1

print(sys.getsizeof(x))

10. چاپ رشته‌ای به تعداد N مرتبه

n = 2

a = "GeeksforGeeks"

print(a * n)

11. کد بررسی آناگرام بودن دو کلمه در پایتون

from collections import Counter

def is_anagram(str1, str2):

     return Counter(str1) == Counter(str2)

  

# or without having to import anything 

def is_anagram(str1, str2): 

    return sorted(str1) == sorted(str2) 

  

print(is_anagram('geek', 'eegk'))

print(is_anagram('geek', 'peek'))    

12. ذخیره‌سازی سه مقدار یک فهرست درون سه متغیر جدید

>>> a = [1, 2, 3]

>>> x, y, z = a

>>> x

1

>>> y

2

>>> z

3

13. ساخت یک فهرست واحد بدون استفاده از حلقه‌ها

import itertools

test = [[-1, -2], [30, 40], [25, 35]]

print(list(itertools.chain.from_iterable(test)))

#-> [-1, -2, 30, 40, 25, 35]

اگر یک فهرست ورودی با حلقه‌های تودرتو یا نوع تاپل به عنوان عنصار دارید، بهتر است از تکنیک زیر استفاده کنید.

def unifylist(l_input, l_target):

    for it in l_input:

        if isinstance(it, list):

            unifylist(it, l_target)

        elif isinstance(it, tuple):

            unifylist(list(it), l_target)

        else:

            l_target.append(it)

    return l_target

test =  [[-1, -2], [1,2,3, [4,(5,[6,7])]], (30, 40), [25, 35]]

print(unifylist(test,[]))

#Output => [-1, -2, 1, 2, 3, 4, 5, 6, 7, 30, 40, 25, 35]

روش ساده دیگر برای ساخت یک فهرست واحد که شامل فهرست‌ها و تاپل‌ها است به‌کارگیری بسته <more_itertools> در پایتون است. این تکنیک هم نیازی به حلقه ندارد. روش انجام این‌کار به شرح زیر است:

import more_itertools

test = [[-1, -2], [1, 2, 3, [4, (5, [6, 7])]], (30, 40), [25, 35]]

print(list(more_itertools.collapse(test)))

#Output=> [-1, -2, 1, 2, 3, 4, 5, 6, 7, 30, 40, 25, 35]

14. پیاده‌سازی یک دستور switch-case در پایتون

def xswitch(x):

      return xswitch._system_dict.get(x, None)

xswitch._system_dict = {'files': 10, 'folders': 5, 'devices': 2}

print(xswitch('default'))

print(xswitch('devices'))

#1-> None

#2-> 2

15. جست‌وجوی درون خطی برای پیشوند‌های چندگانه درون یک رشته

print("http://www.google.com".startswith(("http://", "https://")))

print("http://www.google.co.uk".endswith((".com", ".co.uk")))

#1-> True

#2-> True

16. ساخت یک لغت‌نامه از دو مجموعه مرتبط با هم

t1 = (1, 2, 3)

t2 = (10, 20, 30)

print(dict (zip(t1,t2)))

#-> {1: 10, 2: 20, 3: 30}

17. بامبدا برای تقلید عملکرد چاپ

import sys

lprint=lambda *args:sys.stdout.write(" ".join(map(str,args)))

lprint("python", "tips",1000,1001)

#-> python tips 1000 1001

18. به‌کار‌گیری __slots__to برای کم کردن سرباره حافظه

import sys

class FileSystem(object):

      def __init__(self, files, folders, devices):

            self.files = files

            self.folders = folders

            self.devices = devices

print(sys.getsizeof( FileSystem ))

class FileSystem1(object):

      __slots__ = ['files', 'folders', 'devices']

      def __init__(self, files, folders, devices):

            self.files = files

            self.folders = folders

            self.devices = devices

print(sys.getsizeof( FileSystem1 ))

#In Python 3.5

#1-> 1016

#2-> 888

‌19. محاسبه فاکتوریل هر عددی تنها در یک خط

import functools

result = (lambda k: functools.reduce(int.__mul__, range(1,k+1),1))(3)

print(result)

#-> 6

20. ‌به‌کارگیری یک لغت‌نامه برای ذخیره‌سازی یک سوییچ

stdcalc = {

      'sum': lambda x, y: x + y,

      'subtract': lambda x, y: x - y

}

print(stdcalc['sum'](9,3))

print(stdcalc['subtract'](9,3))

#1-> 12

#2-> 6

21. باز کردن عملگردهای یک تابع با استفاده از عملگر splat

def test(x, y, z):

      print(x, y, z)

testDict = {'x': 1, 'y': 2, 'z': 3}

testList = [10, 20, 30]

test(*testDict)

test(**testDict)

test(*testList)

#1-> x y z

#2-> 1 2 3

#3-> 10 20 30

22. معکوس کردن یک رشته در یک خط

"Test Python"[::-1]

23.  معکوس کردن یک فهرست

testList = [1, 3, 5]

testList.reverse()

print(testList)

#-> [5, 3, 1]

24. شناسایی نسخه پایتون در زمان اجرا

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

import sys

#Detect the Python version currently in use.

if not hasattr(sys, "hexversion") or sys.hexversion != 50660080:

    print("Sorry, you aren't running on Python 3.5\n")

    print("Please upgrade to 3.5.\n")

    sys.exit(1)

#Print Python version in a readable format.

print("Current Python version: ", sys.version)

25. ساده کردن دستور if

برای اعتبارسنجی چند مقدار، ما از روش زیر استفاده می‌کنیم

if m in [1,3,5,7]:

به جای روش فوق می‌توان از روش زیر نیز استفاده کرد:

if m==1 or m==3 or m==5 or m==7:

26. بازرسی یک شی در پایتون

ما می‌توانیم به بازرسی اشیا در پایتون با فراخوانی متد dir() بپردازیم. قطعه کد زیر نحوه انجام این‌کار را نشان می‌دهد.

test = [1, 3, 5, 7]

print( dir(test) )

خروجی قطعه کد بالا به شرح زیر است:

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

27. تنظیم file sharing

پایتون اجازه اجرای یک سرور HTTP را می‌دهد که شما می‌توانید برای به‌اشتراک‌گذاری فایل‌های از دایرکتوری ریشه سرور از آن استفاده کنید. فرمان زیر برای انجام این‌کار استفاده می‌شود:

python3 -m http.server

28. دیباگ کردن اسکریپت‌ها

ما می‌توانیم نقاط شکستی در اسکریپت‌های پایتون با استفاده از ماژول <pdb> ایجاد کنیم. قطعه کد زیر نحوه انجام این‌کار را نشان می‌دهد:

import pdb

pdb.set_trace()

‌29. از کاربرد عملگر _ ‌غافل نشوید

این قابلیت خیلی مفید است و بیشتر ما از وجود آن بی اطلاع هستیم. در کنسول پایتون ، هر زمان عبارتی را تست کنیم یا تابعی را فراخوانی کنیم، نتیجه به یک نام موقت ارسال می‌شود که یک زیرخط (_ ) است ارسال می‌شود. _ به آخرین خروجی از آخرین عبارت اجرایی اشاره دارد. به قطعه کد زیر دقت کنید.

>>> 2 + 1

3

>>> _

3

>>> print _

3

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

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟