Learn with Osman – Telegram
Learn with Osman
192 subscribers
19 photos
2 videos
19 links
ID: @osman_makhtoom
Portfolio: https://osmanmakhtoom.dev
|
My knowledge sharing channel about Software Engineering and Python Development
Download Telegram
استفاده از and و or در مقایسه مقادیر منطقی در پایتون:

وقتی از and در مقایسه استفاده می‌کنیم باید هر دو طرف True باشن تا نتیجه True بشه در غیر اینصورت نتیجه False میشه.
کلا ۴ حالت داریم:

False and True => False
True and False => False
False and False => False
True and True => True

شاید فکر کنید False and False باید True می‌شد اما چرا False شد.
به دو صورت میشه این رو توضیح داد:
۱- میتونیم بگیم پایتون کلا خیلی حساسه 😁 و اگه از and استفاده کنیم هیچ جایی از حرفمون نادرست(False) نباشه.
پایتون میاد می‌بینه اگه سمت چپ and تونست False پیدا کنه دیگه با بقیه کاری نداره و همون False رو نتیجه میده، مثل اولی و سومی، و اگه سمت چپ پیدا نکرد میره سمت راست رو نگاه میکنه و اگه پیدا کرد باز همون False رو نتیجه میده و اگه هیچ جای حرفمون نادرست نبود ناچار میاد حرفمون رو تصدیق میکنه و True رو نتیجه میده 😁.

۲- بصورت ریاضی درنظر بگیریم، یعنی بجای False مقدار عددیش یعنی 0 و بجای True هم 1 رو درنظر بگیریم که میشه:
0 * 1 = 0
1 * 0 = 0
0 * 0 = 0
1 * 1 = 1

اما or کلا متفاوته و دقیقا برعکس and اگر ی جای حرفمون درست بود همونو برمیگردونه.
همون ۴ حالت:
False or True => True
True or False => True
False or False => False
True or True => True

برعکس and که فقط ی حالتش True and True نتیجه‌اش True بود اینجا فقط ی حالت False or False میشه False و بقیه همه True.

پس وقتی با پایتون صحبت میکنیم باید رو انتخاب کلماتمون دقت کنیم و مراقب باشیم چی داریم میگیم.

باهام همراه باشید...🌺

@osmanmakhtoomdev
👌3👍1
آموزش دادن خیلی عالیه واقعا.
مثلا همین بحث مطلب قبلی تا الان بهش دقت نکرده بودم تا اینکه هنرجوی ۱۳ ساله‌ام برگشت پرسید چرا اینجوری شد نتیجه؟
یا حتی همون هنرجو پرسید آیا import هم ی تابعه تو پایتون؟
ی مورد دیگه هم که امروز برام پیش اومد این بود که داشتم به هنرجو نشون می‌دادم جای استفاده از if elif else و match case میتونه از دیکشنری هم استفاده کنه.
بعد اومدیم ی ماشین حساب نوشتیم اینجوری، مقدار پیشفرض عدد اول و دوم رو 1 گذاشته بودم، هی میخاستم ریشه دوم بگیرم از تابع لگاریتم که نوشته بودیم خطا میگرفت که تقسیم بر صفر میکنه(چون لگاریتم 1 بر مبنای 1 این مشکل رو داره)، مونده بودم این چه ربطی به اون داره آخه.
بقیه توابع همه ۲ تا عدد میگرفتن از کاربر و فقط ریشه دوم یا همون جذر فقط ی عدد میگرفت و عدد دوم پیشفرض 1 بود.
بعد برداشتن تابع لگاریتم متوجه شدم که وقتی با دیکشنری مینویسم و پرانتز تابع رو هم میذاریم، پایتون میاد تک تک توابع رو ارزیابی میکنه و نتیجه رو نگه میداره!
دو تا راه حل داره این مسئله:
۱- میشه کنترل استثنا نوشت برای توابعی که ممکنه خطا پیش بیاد.
۲- که پیشنهادم هم همینه، میشه تو دیکشنری برای توابع پرانتز نداشت و بعد دیکشنری که میخایم get کنیم اسم کلید رو بیایم پرانتز بذاریم براش.
مثلا کد زیر رو درنظر بگیرین:
import math

def calculator():
first_number = 1
second_number = 1
try:
first_number = int(input("Number: "))
except ValueError:
print("Please enter valid integer or float number")
operator = input("Operator(sqrt,+,-,/,*,log,**): ")
if operator in "+ - * ** / log".split():
try:
second_number = int(input("Number: "))
except ValueError:
print("Please enter valid integer or float number")

def add(first_number: int | float, second_number: int | float) -> int | float:
return first_number + second_number

def subtract(first_number: int | float, second_number: int | float) -> int | float:
return first_number - second_number

def square_root(first_number: int | float) -> int | float:
return first_number ** .5

def logarithm(first_number: int | float, second_number: int | float) -> int | float:
return math.log(first_number, second_number)

commands = {
"+": add(first_number, second_number),
"-": subtract(first_number, second_number),
"sqrt": square_root(first_number),
"log": logarithm(first_number, second_number),
}.get(operator, "+" )


تو این کد، دیکشنری commands میاد هر تابعی رو اجرا میکنه و نتیجه رو تو خودش نگه میداره، ما برای جلوگیری از این کار باید بیایم به روش زیر عمل کنیم:

commands = {
"+": add,
"-": subtract,
"sqrt": square_root,
"log": logarithm,
}.get(operator, "+" )(first_number, second_number)


البته باز نیاز به گذاشتن شرط هست😂 اگه جذر بود فقط ی ورودی لازم داره، مگر اینکه کد رو وصله‌دار کنیم و برای اونم ی آرگومان سوخته تعریف کنیم و داخل تابع ازش استفاده نکنیم که اینم اصولی نیست.

اگه شما هم راه حلی دارین خوشحال میشم باهام به اشتراک بذارین.😉

باهام همراه باشید...

@osmanmakhtoomdev
👍1🤔1
جمعه رو واسه خودم خراب کردم 😐
جریان از این قراره که به سرم زد ی اسکریپت پایتون بنویسم از بی حوصلگی.
اومدم ببینم چطور میشه از تلفیق pandas, bs4, requests, asyncio برای scrape گوگل و ریختن و خوندن نتایج جستجو تو و از فایل اکسل استفاده کرد.
گفتم موضوع چی باشه؟
رفتم لیست واحدهای پول کشورهای جهان رو از ویکیپدیا اسکرپ کردم و ریختم تو اکسل، بعد با پانداس اومدم از اکسل دوباره خوندم و یک به یک دادم به گوگل تبدیل کنه به ریال ایران.
چشمتون روز بد نبینه خلاصه 😢

به محض اینکه از دپرسی دربیام اسکریپت و ویدیوی آموزشی رو حتما براتون میذارم.

باهام همراه باشید...

@osmanmakhtoomdev
شوخی جمعه:

اگه گفتین واحد پول فیلیپین چیه؟
PHP 😂

حالا اگه گفتین هر PHP چند IRR:
771.440
😂😂😂

@osmanmakhtoomdev
دوستان خبرای خوبی در راهه...
باهام همراه باشید که قراره بترکونیم 😍

@osmanmakhtoomdev
👍1
داریم در حد توان ی استودیو ساده درست میکنیم که ان‌شاءالله از فردا یا پس فردا شروع کنیم به ضبط :)

هرگونه همراهی، همدلی، نظر، پیشنهاد، انتقاد مفید، دسته گل، جیغ و هورا، بهمون هیجان و انگیزه میده که بتونیم کار با کیفیتی ارائه بدیم.

پس هر کدوم رو خاستین ازمون دریغ نکنید و باهام همراه باشید تا بترکونیم...

@osmanmakhtoomdev
👍5
امروز اولین ویدیو ضبط شد و بزودی بعد میکس و ادیت منتشرش میکنیم.

باهام همراه باشید...

@osmanmakhtoomdev
🔥1
Forwarded from Sadra Codes
بررسی جوانب پایتون ۳.۱۲

از این به بعد می‌تونید fstring های تودرتو بنویسید. مثلا:
phrase = f"Hello {f"{name}"}"
# Hello Sadra

بنظرم آنچنان کاربردی نیست و فهمیدنش در نگاه اول یکم سخته. شاید هایلایترها درکش رو راحت‌تر کنن در آینده ولی یه فیچر جدید که اضافه شده و خوشم اومد، multiline fstring هست که بهتون اجازه می‌ده، اف استرینگ رو در چند خط بنویسید و حسابی expandش کنید. تازه می‌تونید در بدنه‌اش، کامنت هم بنویسید:

phrase = f"Hello {
name # User.name
}"
# Hello Sadra

بهینه‌سازی سیستم Tokenization. پایتون یه ماژول tokenizer داره که ازش واسه آنالیز و پارس کردن کلمات و حروف ولید پایتون استفاده می‌کنه. به هر چانک حروف از استرینگ ورودی توکن میگن. اکثر تول‌های linting و formatting از این ماژول واسه فرمت و لینت کردن کد پایتون استفاده می‌کنن. تا نسخه ۳.۱۱، این ماژول به زبان پایتون بود. بدلیل اضافه شدن nested fstring و مولتی لاین fstring، مجبور شدن این ماژول رو بازنویسی کنن و با C نوشتنشن و از لحاظ زمان runtime، سرعتش به شدت رفته بالا. این باعث میشه تمام tool هایی که از tokenizer استفاده می‌کنن، سریع‌تر اون ماکروهاشون ران شن.

لایبرری distutils دیپریکت شده و دیگه توی standard library قرار نداره. از این لایبرری واسه نوشتن و توزیع کردن پکیج پایتون استفاده میشد که به دلیل سرعت پایین و محدودیت‌هایی که نسبت به پکیج setuptools داشت، ملت همیشه میرفتن سمت setuptools. حتی خود pip هم به setuptools وابسته هست. اگه venv بسازین، میبینید که بصورت دیفالت، setuptools نصبه. یه نکته که هست، setuptools جزو standard library نیست و درواقع از هسته distutils پایتون استفاده می‌کنه. از اونجا که distutilsی دیگه در کار نیست و pip نسخه‌های ۲۲.۱ به بالا دیگه وابستگی به setuptools نداره، عملا هیچ ابزار رسمی‌ای واسه توزیع پکیج پایتون هم نخواهیم داشت. این هم خوبه، هم بد.

pip (>= 22.1) does not require setuptools to be installed in the environment. setuptools-based (and distutils-based) packages can still be used with pip install, since pip will provide setuptools in the build environment it uses for building a package.

حالا یه اتفاق دیگه هم افتاده. اونم اینکه venv دیگه بخشی از پکیج setuptools نیست. تا امروز بود ولی دیگه نیس. حالا چیکار میشه کرد؟ خب distutils مستقل شده و شما می‌تونید خودتون setuptools رو pip install کنید و ازش استفاده کنید و واسه venv هم، virtualenv نصب کنید. دیگه کامند زیر کار نمیکنه:

python -m venv venv

بطور کلی، از این به بعد هر محیط venv که با virtualenv می‌سازید، در isolatedترین شکل ممکن قرار دارن و site-packageتون خالی خالیه. حتی wheel هم ندارید. فقط pip رو دارید. این بنظرم ساید خوبشه.

از این به بعد می‌تونید تایپ هینت kwargs** رو کاستومایز کنید. من خودم همیشه انوتیت می‌کردم به typing.Any ولی از این به بعد می‌تونید TypedDict رو بهش انوتیت کنید:

from typing import TypedDict, Unpack

class Values(TypedDict):
name: str
age: int

def main(**kwargs: Unpack[Values]): ...

یه تایپ هینت جدید اومده که خیلی خوشم اومد، typing.override هست. این موقعی بدرد می‌خوره که می‌خواین تایپ هینت ست کنید واسه متدی که توی subclass قراره اوررایت شه. اگه تغییری توی superclass ایجاد شه و اسم اون متد توی سوپرکلس تغییر کنه، اگه یه سیستم type checking داشته باشین یه چیز مثل mypy، حتما خطا رو می‌گیره و بهتون نشون میده. این درحالیه که اگه کد رو اجرا کنید، ممکنه خطا نگیرید و اون متد هم override نشه.

from typing import override

class A:
def greet(): ...

class B(A):
@override
def greet(): ...

توی این مثال، اگه روزی برسه که اسم متد greet توی سوپرکلس تغییر کنه به greeting، حتما type checker ارور میده ولی اگه annotate نکرده باشید، اروری دریافت نمی‌کنید و صرفا اون logic درست کار نمی‌کنه.

تمام comprehensionهایی که در بدنه فانکشن‌ها هستن، از لحاظ سرعت اجرا بهینه‌تر شدن.

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

دوتا سینتکس جدید هم اضافه شده به پایتون. یکی type هست که واسه Type Alias استفاده میشه و دیگری هم Type Parameter هست که یه مدل جدید واسه تعریف فانکشن‌ها و کلس‌های جنریک پایتونه. شیوه استفاده ازشون به این شکله:

type name = str
type age = int

قبلا باید جنریک فانکشن رو اینجوری تعریف می‌کردیم:

def greet(name: List[str]): ...

ولی الان می‌نویسیم:

type T = List[str]

def greet[T](name: T): ...

این باعث میشه که پرینسیپل DRY آسیب نبینه.
👍1🔥1
Forwarded from Python BackendHub
بزرگ ترین تغییر ۳.۱۲ نسبت به ۳.۱۱ که بنظرم صدرا اشاره نکرد بهش PEP 684 بود

A Per-Interpreter GIL
که البته فعلا تو سطح پایتون نیست و python api نداره.


ولی این تغییر تو ۳.۱۳ خودشو خیلی بیشتر نشون میده. جایی که API python اش میاد. طبق PEP 554.
https://peps.python.org/pep-0554/
جایی که ما میتونیم حالا از این تغییراتی که تو ۳.۱۲ انجام شده و API پایتونیش تو ۳.۱۳ هست استفاده کنیم‌:)

اینکه چیه و چیکار میکنه تو این پست نمیگنجه. توصیه میکنم حتما این دو PEP رو وقت بذارین و بخونید که از بقیه جلوتر باشید تا وقتی ۳.۱۳ اومد بدونید چی باید یاد بگیرید 😁 فقط یک مقایسه میکنم بین sub Interpreter و مولتی پروسس

True Parallelism -> Multiprocess: YES | Subinterpreters: Potential
Isolation -> Multiprocess: HIGH | Subinterpreters: MEDIUM
Overhead -> Multiprocess: HIGH | Subinterpreters: LOW

و توی theory حداقل باید Subinterpreters یک مموری ایزوله و هندل CPU Bound task به صورت بهینه تر رو به ما بدن که باعث میشه پایتون با استفاده از این مفهوم جدید برای real-time processing و streaming data بسیار مناسب تر شه. چرا؟‌چون میتونید یک subinterpreter داشته باشید که دیتا رو بگیره و یک subinterpreter داشته باشید که دیتا رو پروسس کنه که این ایزوله سازی باعث استفاده بهتر و بهینه تر از ریسورستون میشه و latency رو هم کاهش میده

@ManiFoldsPython
ادیت کلیپ‌ها رو خودم انجام میدم، سعی میکنم فردا اوکی کنم 😅
👏2
Media is too big
VIEW IN TELEGRAM
خب بچه‌ها بالاخره ویدیوی اول رو آماده کردم و با حجم مناسب اینجا و تو کانال یوتوب آپلود کردم.

این ویدیو معرفی دوره هست و قراره ادامه دار باشه.
مباحثی که صحبت کردیم:
- ویژگیهای دوره
- معرفی مربی دوره
- نحوه استفاده از دوره

باهام همراه باشید... ❤️🌱

@osmanmakhtoomdev
3🔥1🕊1
cubes = [lambda x: x + i for i in range(10)]

print(cubes[3](4))


@osmanmakhtoomdev
👎1
Learn with Osman
cubes = [lambda x: x + i for i in range(10)] print(cubes[3](4)) @osmanmakhtoomdev
بنظرتون نتیجه چی میشه؟
سطح سوال: متوسط به بالا
Final Results
25%
7
14%
9
36%
13
21%
Error
4%
None
def get_number(number):
return lambda x: x + number

cubes = [get_number(i) for i in range(10)]

print(cubes[3](4))


@osmanmakhtoomdev
بچه‌ها متاسفانه این یکی دو روزه بخاطر کسالت نتونستم برم سمت ضبط جلسه دوم، ان‌شاءالله سعی میکنم روز شنبه یکشنبه ضبط رو اوکی کنم.
5🕊1
Media is too big
VIEW IN TELEGRAM
تو این ویدیو درمورد ماشین و زبان‌های برنامه‌نویسی صحبت کردیم.
ماشین چطور کار میکنه؟
زبان‌های برنامه‌نویسی اومدن چه دردی رو دوا کنن؟
زبان‌های برنامه‌نویسی چطور کار میکنن؟
چه تقسیم بندی هایی دارن؟
سطح زبان یعنی چی؟


لینک یوتوب:
https://youtu.be/-CWJjLd170Q?feature=shared

باهام همراه باشید... 🌱❤️

@osmanmakhtoomdev
🕊1
دوستانی که قصد دارن دیتا استراکچر و الگوریتم رو خوب متوجه بشن، ی اپلیکیشن هست برای گوشی های اندروید که تازگی آپدیت داده و دیدم خیلی پیشرفت خوبی کرده.
الان میتونید بصورت بصری هر الگوریتم رو بررسی کنید:

https://play.google.com/store/apps/details?id=com.pranitkulkarni.sortingdemo

باهام همراه باشید...❤️🌺

@osmanmakhtoomdev
سلام دوستان عزیزم
این مدت درگیر اومدن به تهران و شروع بکار با شرکت جدید بودم.
البته هنوز مشکل ی جای مناسب برای سکونت رو دارم.
اما باید با قدرت و بدون مقصر دونستن شرایط به سمت جلو رفت
خیلی فاصله افتاد بین فعالیت کانال
سعی میکنم به زودی با مطالب و تجربیات جدیدتری کانال رو بروز نگه دارم

پس باهام همراه باشید ❤️🌱

@osmanmakhtoomdev
🕊3👍1
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
* مفهوم ضربان قلب در علم کامپیوتر چیست؟

اون قدیمترها من وقتی که تازه‌کار بودم و وبسرور راه مینداختم و API مینوشتم، یه کاری رو میکردم که مطمئن بشم سروری که راه انداختم داره بدون اشکال کار میکنه، اونم این بود که با یه برنامه زماندار (کرونجاب/cronjob) هر چند دقیقه سرور رو پینگ میکردم که مطمئن بشم هنوز داره کار میکنه...
اما پبینگ کردن کافی نبود، شما میتونی برنامه‌ای بنویسی که هر چند وقت (زمانش بستگی به شما داره) به سرور بگه که من ادمین هستم، بگو ببینم وضعیتت چطوره؟
* بگو دیسکت چقدر جا داره
* بگو آپتایمت چقدره
* بگو آمپر CPUت روی چند درصده
* بگو چقدر رمت پره و چقدر خالیه

هر چند دقیقه اینارو از سرور بپرسه...

و هر بار چک کنه همه چی نرمال باشه، اگه رشد غیر طبیعی ببینه یا اتفاقی بیفته دیسک پر بشه یا سرور جواب نده یا هرچی، یه بوقی بزنه یا یه ایمیلی بده یا خیلی دیگه خفن باشه بهت یه sms بده که یه مشکلی توی سرور هست، مثلا دیسک شده 90 درصد... برو رسیدگی کن

این میشه مفهوم ضربان قلب که الان تخصصی‌تر میگم*
=+=+=+=+=+=+=+=

مانیتور کردن سیستم خیلی بحث مهمیه،
فرض کنین یه API ثالث (ثرد-پارتی) که توی سرورتون استفاده کردین بنا به دلایلی داون میشه، سرور ازش ریسپانس نمیگیره و به ارور میخوره... اما به کارش ادامه میده، چون شما زرنگ بودی و ارور هارو با ترای-کچ هندل کردی:
▪️فرق بین ارور و اکسپشن و وارنینگ و نوتیس چیه؟
▪️فلسفه ترای-کچ چیه؟

سیستم به کارش ادامه میده و شروع میکنه به لاگ انداختن که توی ساعت فلان، ثانیه فلان من این ریکوئست روبه API زدم منتهی داون بود و جواب نداد...
1 بار لاگ میندازه 2 بار لاگ میندازه 3 بار لاگ میندازه...
ایــــــــنقدر لاگ میندازه که یهو فایل لاگ میشه 60 گیگ، دیسک ددیکیت‌شده شما پر میشه و سرورتون داون میشه.
این یه مثال عملی بود از اینکه سرورها ممکنه به چه مشکلاتی بخورن...

اگه سیستم‌ادمین باشین این سناریوها براتون به کرات اتفاق می‌افته.
همیشه هم شما نمیتونی مطمئن باشی چه چیزی ممکنه مشکل ایجاد کنه،

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

مثلا من یه برنامه داشتم که یه رکوئست HTTP میزد (با پست) و به سرور میگفت من ادمینم اینم توکنم، بهم بگو علائم حیاتیت چیه...؟
سرور جواب میداد که:
* آپتایم 24 روز و 8 ساعت
* سی‌پی‌یو 7 درصد
* رم 1 گیگ
* دیسک 128 گیگ خالی دارم
* سرعت پینگم هم 60 میلی ثانیه‌ست

برنامه اینارو چک میکرد و اگه چیز آنرمالی میدید به من خبر میداد.
شما اگه خیلی خفن بودین میتونستین برنامه رو جوری بنویسین که مثلا بصورت نمایی، اطلاعات چندتا ضربان قلب قبلی سرور رو ذخیره کرده باشه و کنار هم بذاره و رشد خاصی رو برونیابی کنه و اگه حدس میزنه چیزی در حال تغییر غیر عادیه خبر بده...،
مثلا 5 ساعت پیش دیسک 128 گیگ خالی داشته،
4 ساعت پیش 128 گیک خالی داشته،
3 ساعت پیش 120 گیگ خالی داشته،
2 ساعت پیش 89 گیگ،
حالا هم 24 گیگ،

خب این یه تغییر غیر طبیعیه، فرمولهای ساده ریاضیاتی هستن که میتونن نسبت بگیرن و تغییرات ناخواسته‌ای مثل این رو دیتکت کنن، برنامه به شما سریع sms بده که زود باش SSH کن به سرور که یه اتفاقی افتاده دیسک داره پر میشه...
شما سریع میری و مثلا میبینین که یه I/O اکسپشنی رخ داده یه فایل بسته نشده و هی داره توش داده نوشته میشه...،
قبل از اینکه دیسک پر بشه و سرور داون بشه و محاسباتتون دچار مشکل بشه و یا اطلاعات خاصیتون بپره، فیکسش میکنین*-*

اما،
امــــا،...
بعدا که رفتم ارشد، توی یه درسی همینو به ما درس دادن و فهمیدم این حرکت اصلا یه قسمت از علم کامپیوتره که بهش میگن کاندیشن مانیتورینگ
* Condition Monitoring
و اصلا یه پرتکل شبکه‌ای وجود داره به اسم SNMP:
Simple Network Management Protocol
که روی UDP ران میشه و کارش مدیریت کردن خودکار یه دستگاه شبکه‌ای هست و این پرتکل بای دیفالت مثلا روی روترها و سوئیچها پشتیبانی میشه....
اگه میخواین بیشتر بخونین:
https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol
=+=+=+=+=+=+=+=

حالا شما میتونین خودتون یه پرتکل ضربان قلب پیاده کنین...
کتابخونه‌ها و پرتکلهای آماده ای هم براین این موضوع هستن،
اگه سرورتون بزرگ و حساس هم هست میتونین بازه زمانی ضربان قلب گرفتن رو کمتر کنین، مثلا هر 1 دقیقه سیستم رو مانیتور کنین.
اگه میخواین ضربان قلب یا heartbeat رو تخصصی مطالعه کنین:
https://en.wikipedia.org/wiki/Heartbeat_(computing)
2