ویدیوکست: معرفی ویرایشگر VSCodium – کانفیگ برای قسمت‌های بعدی

به نظر عجیب میرسه چونکه قبلا اسمش VSCode بود؟!! خب باید بگم که این اون نیست! البته بیشترش یکیه ولی در کل این اون نیست! خودمم قاطی کردم کدوم کدومه .. ویدیو رو ببینید متوجه میشید. در ضمن من در آینده میخوام یه سری ویدیو آموزشی ضبط بکنم راجع به پایتون و جاوااسکریپت و… این کانفیگ ادیتور من برای این ویدیوها هستش پس دیگه نیازی نیست هر بار اینا رو بگم.

معرفی VSCodium – لینک یوتیوب

راهنمای سریع *args و **kwargs در پایتون

*args در پایتون

تصور کنید که شما قصد ساخت یک تابع را دارید که در آن ورودی‌ها خود را با همدیگر جمع می‌کند. ساده‌ترین راه برای تعریف چنین تابعی به صورت زیر خواهد بود:

def mul(x, y):
return x * y

print(mul(10, 5))

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

برای انجام چنین کاری می‌توان از آرگومان *args استفاده کرد:

def mul(*args):
return args

print(mul(10,20,30,40))

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

def mul(*args):
res = 1
for num in args:
res = res*num
return res

print(mul(10,20))
print(mul(10,20,30))
print(mul(10,20,30,40))

**kwargs در پایتون

تفاوت میان kwargs با args در این است که خروجی را بجای آنکه به صورت tuple برگشت دهد به صورت یک ساختمان داده دیکشنری برگشت می‌دهد. بنابراین شما برای وارد کردن اطلاعات‌تان نیز باید از قاعده key-value پیروی کنید. در غیر اینصورت خطا دریافت خواهید کرد. برای مثال به قطعه کد زیر دقت کنید:

def info(**kwargs):
return kwargs

print(info(‘Arastoo’, ‘Web Development))

خروجی قطعه کد بالا یک typeerorr خواهد بود. برای پر کردن تابع info شما نیاز دارید که به سبک زیر پیش بروید:

def info(**kwargs):
return kwargs

print(info(name = ‘Arastoo’, career= ‘Web Development))

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

def info(**kwargs):
for key, value in kwargs.items():
print(f’{key}: {value}’)

info(name = ‘Arastoo’, career= ‘Web Developer’)

ساخت یک وب اپلیکیشن ساده با استفاده از فلَسک

در میان میکروفریمورک‌های دنیای وب می‌توان گفت که فلسک یکی از محبوب‌ترین آن‌هاست. به همین دلیل تصمیم گرفتم تا یک مطلب کوتاه و در عین حال کاربردی برای شروع کار با فلَسک را بنویسم. برای مطالعه این مطلب به نوشته «ایجاد یک وب اپلیکیشن ساده با پایتون و فلاسک» مراجعه کنید.

چرا پایتون کُند است؟

«چرا پایتون کند است؟» مطلبی است از Anthony Shaw که در آن به بررسی دلایلی پرداخته که منجر به کند بودن پایتون شده است. برای خواندن متن فارسی این مطلب به نوشته «چرا پایتون کُند است؟» مراجعه کنید.

ویدیوکست: کار با JSON در پایتون + ویدیو

داشتن درک خوبی از JSON و شیوه کار کردن با اون می‌تونه برای تبدیل شدن به یک توسعه‌دهنده مؤثر خیلی کمک بکنه. JSON یک فرمت متنی برای نمایش داده هستش. JSON مخفف کلمات JavaScript Object Notation به معنای نشانه‌گذاری شیء جاوااسکریپت هستش که همون انگلیسی‌ش بهتره!

JSON به ما این کمک رو می‌کنه تا بتونیم یکسری داده و اطلاعات رو بین دو تا اپلیکیشن منتقل کنیم. این کار از طریق APIها می‌تونه صورت بگیره.

بعد از خوندن این مطلب پیشنهاد می‌کنم که ویدیو مطلب رو هم مشاهده بکنید، چرا که فارغ از آموزش موضوعات مقدماتی، یک مثال عملی از کار با JSON و API رو هم در خودش داره.

معرفی JSON

اما بیایید یک فایل یا رشته متنی که به سبک JSON نوشته شده رو ببینیم:

{
  "firstName": "John",
  "lastName": "Smith",
  "isAlive": true,
  "age": 27,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    },
    {
      "type": "mobile",
      "number": "123 456-7890"
    }
  ],
  "children": [],
  "spouse": null
}

اگر با جاوااسکریپت کار کرده باشید مطمئنا با ساختار داده‌ای Object آشنایی دارید. JSON یک Object مادر همراه با انواع ساختارهای داده‌ای به صورت فرزند در خود دارد. تمام این فرزندها نیز به صورت Key:Value نوشته می‌شوند. برای مثال:

{
   "Name" : "Arastoo",
}

ما توی کدهای بالا یک Key یا کلید با نام Name داریم و همچنین Value یا مقدار Arastoo. موضوع مهم اینه که شما همیشه باید Key یا کلید رو به صورت رشته بنویسید یعنی بین دو تا دابل کوتیشن قرارشون بدید. اما Value یا مقدار براساس نوع داده‌ای که می‌خواید. شما می‌تونید عدد ثابت، مقدار bool، مقدار null، آرایه و یا حتی یک Object دیگر رو اینجا بگذارید.

کار با داده جی‌سان در پایتون

برای اینکه بتونیم با داده‌های جی‌سان کار بکنیم، توی پایتون یه کتابخونه داخلی به اسم json وجود داره که به ما قابلیت خوندن و استفاده از داده‌های جی‌سان رو میده.

اولین کار اینه که اون رو import بکنیم:

import json

حالا اگه یک dir از json داشته باشیم خروجی زیر رو می‌بینیم:

>>> dir(json)
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']

این جا میشه تموم متدهای مربوط به این کتابخونه رو مشاهده کرد. چهار مورد مهمش که ما باهاشون کار خواهیم کرد عبارت هستند از load، loads، dump و dumps.

آشنایی با loads

زمانی که قصد تبدیل کردن یک رشته جی‌سان به یک فرمت که پایتون بتونه اون رو متوجه بشه داشته باشیم از loads استفاده می‌کنیم. برای مثال در قسمت پایین شما یک رشته رو می‌بینید که به سبک جی‌سان نوشته شده:

json_str = """
{
    "Name":"Arastoo",
    "Family":"Abasi",
    "Age":19,
    "is_developer":true,
    "Pet":null
}
"""

حالا چطوری از این دیتاها استفاده کنیم؟ مشکل اصلی اینجاست که پایتون اینو صرفا به صورت یک رشته می‌شناسه ولاغیر. اما قصد ما این هستش که داده‌های موجود رو استخراج یا load کنیم. برای اینکار json.loads رو فراخوانی می‌کنیم:

>>> json.loads(json_str)
{'Name': 'Arastoo', 'Family': 'Abasi', 'Age': 19, 'is_developer': True, 'Pet': None}

خروجی در نهایت به سبک یک دیکشنری پایتونی خواهد بود. حالا می‌تونیم به داده‌ها به صورت مستقل دسترسی داشته باشیم.

آشنایی با load

load هم دقیقا همون کار loads رو انجام میده با این تفاوت که بجای خوندن جی‌سان از یک رشته اون رو از یک فایل می‌خونه. برای اینکار باید یک فایل رو باز کرده و بعد از اون اطلاعات فایل رو load بکنیم. من یک فایل user.json با اطلاعات زیر دارم:

{
  "Name": "Arastoo",
  "Family": "Abasi",
  "Age": 19,
  "is_developer": true,
  "Pet": null
}

حالا قصد دارم که این اطلاعات جی‌سان رو توی پایتون استخراج بکنم. برای اینکار از دستور open with برای باز کردن فایل به صورت read استفاده می‌کنم:

with open('user.json', 'r') as json_file:
    json.load(json_file)

این کار دقیقا همون خروجی قبلی رو با یه روش دیگه بهمون میده.

آشنایی با dumps

متد dumps دقیقا نقطه مخالف با loads هستش. شما قبلا یک رشته جی‌سان داشتید که اون رو به دیکشنری پایتون تبدیل می‌کردید، حالا یک دیکشنری پایتون دارید و باید به یک رشته جی‌سان تبدیل ش بکنید. من یک دیکشنری در زیر دارم و قصد دارم که اون رو به جی‌سان تبدیل بکنم:

dict1 = {
    "Name":"Arastoo",
    "Family":"Abasi",
    "Age":19,
    "is_developer":True,
    "Pet":None
}

برای تبدیل کردنش کافیه dumps رو فراخونی کنم:

>>> json.dumps(dict1)
'{"Name": "Arastoo", "Family": "Abasi", "Age": 19, "is_developer": true, "Pet": null}'

آشنایی با dump

حالا قصد داریم تا همون داده‌ها رو که تبدیل کردیم به جی‌سان، در یک فایل قرار بدیم. برای اینکار باید یک فایل رو با with open به صورت w باز کرده و این اطلاعات رو درش قرار بدیم:

with open('user.json','w') as json_file:
    json.dump(dict1, json_file, indent=3)

ورودی اول dump برابر دیکشنری مورد نظر، ورودی دوم فایلی که می‌خواید جی‌سان درش قرار بگیره و ورودی سوم که یک ورودی اختیاریه برای ایجاد تورفتگی به میزان ۳ اسپیس استفاده میشه.

خیلی ساده و لذت بخش. اگر می‌خواید اطلاعات کامل‌تری راجع به این مطلب پیدا کنید و یک مثال عملی رو با این موضوع حل بکنید، ویدیوی مربوط به این ویدیو رو ببینید.

قصد داریم یک برنامه‌ای بنویسیم که براساس IP کاربر بفهمه که اهل کجاست، برای اینکار از API و JSON استفاده می‌کنیم.