Forwarded from DevTwitter | توییت برنامه نویسی
درخت مرکل (Merkle Tree) یا درخت هش Hash Tree
ٰکاربرد:
Git, Blockchain , ...
توضیح:
نوعی ساختمان داده شامل یک درخت که خلاصهٔ اطلاعات یک دادهٔ بزرگتر نگه میدارد و برای تشخیص محتویات
ابزار:
با merkdir میتوانید از دایرکتوری سیستم خودتان Merkle tree بسازید
https://github.com/makew0rld/merkdir
@DevTwitter | <MehrdadLinux/>
ٰکاربرد:
Git, Blockchain , ...
توضیح:
نوعی ساختمان داده شامل یک درخت که خلاصهٔ اطلاعات یک دادهٔ بزرگتر نگه میدارد و برای تشخیص محتویات
ابزار:
با merkdir میتوانید از دایرکتوری سیستم خودتان Merkle tree بسازید
https://github.com/makew0rld/merkdir
@DevTwitter | <MehrdadLinux/>
یک خبر عالی: دیگه نوشتن کد توی Jupyter رو به ChatGPT بسپار
✅ با Jupyter AI به طور مستقیم میتونی کدهات رو با نوشتن prompt مناسب تولید کنی
✅ توی لینک های زیر یاد بگیرین چطور ازش استفاده کنین:
گیت هاب: https://lnkd.in/gKWbZTwR
داکیومنت: https://lnkd.in/gN5zYxtx
✅ با Jupyter AI به طور مستقیم میتونی کدهات رو با نوشتن prompt مناسب تولید کنی
✅ توی لینک های زیر یاد بگیرین چطور ازش استفاده کنین:
گیت هاب: https://lnkd.in/gKWbZTwR
داکیومنت: https://lnkd.in/gN5zYxtx
ایراد کد زیر چیست؟ فکر کنید این تابع قراره یک جایی از سیستم بک اندتون استفاده شه. قراره آدرس یوزر رو از یکی از سرویس های اینترنالتون از طریق پروتکل http بگیره. چه ایرادی میتونید تو این کد پیدا کنید؟
(resp.text)
from httpx import AsyncClient, HTTPError
from some_module import AddressNotFoundError, UserServiceException, UserId
from pydantic import BaseModel
class Address(BaseModel):
location: str
house_num: int
async def get_address(user_id: UserId) -> Address:
client = AsyncClient()
try:
resp = await client.get("http://user_service/v1/user-address", params={"user_id": user_id})
if resp.status_code == 404:
raise AddressNotFoundError(text=resp.text)
return Address(**resp.json())
except Exception as error:
raise UserServiceException
(resp.text)
from error
یکی از بهترین منبع های یادگیری گیت, خوده داکیومنتشه .
https://git-scm.com/book/en/v2
یک از سرفصل هاش submodule هست که واقعا میتونه مفید باشه براتون مخصوصا برای فرانت کارا و کسایی که js میزنن.
It often happens that while working on one project, you need to use another project from within it. Perhaps it’s a library that a third party developed or that you’re developing separately and using in multiple parent projects. A common issue arises in these scenarios: you want to be able to treat the two projects as separate yet still be able to use one from within the other.
https://git-scm.com/book/en/v2/Git-Tools-Submodules
https://git-scm.com/book/en/v2
یک از سرفصل هاش submodule هست که واقعا میتونه مفید باشه براتون مخصوصا برای فرانت کارا و کسایی که js میزنن.
It often happens that while working on one project, you need to use another project from within it. Perhaps it’s a library that a third party developed or that you’re developing separately and using in multiple parent projects. A common issue arises in these scenarios: you want to be able to treat the two projects as separate yet still be able to use one from within the other.
https://git-scm.com/book/en/v2/Git-Tools-Submodules
با سلام و وقت بخیر این گروه به هدف پرسش و پاسخ مسیر راه و رفع اشکال در تمام حوزه های برنامه نویسی ساخته شده و تمامی دوستانی که در حوزه های مختلف برنامه نویسی کار میکنید و دوستان تازه کاری که سعی دارن به طور کلی رفع اشکال های خودشان را انجام بدن میتوانند اشکال های خود راه رفع کنند و از دوستانی که سابقه کار در حوزه های برنامه نویسی را داشته اند تجربه کسب کنند موفق و موید باشید ❤️
https://t.me/+PMg6KSn2PQI1NzFk
https://t.me/+PMg6KSn2PQI1NzFk
Telegram
🧑💻اجتماع برنامه نویسان🧑💻
Deleted Account invites you to join this group on Telegram.
چند تا نکته پرتکرار در مورد رزومه نوشتن:
۱. اولا recruiter ها به طور میانگین ۸-۱۲ ثانیه رو هر رزومه وقت میذارن. واسه همین bold کردن کیوردها خیلی خیلی مهمه. سعی کنین مطالب مهمتر رو همون اول بیارین و در کل کار طرف رو برای فهمیدنش آسونتر کنین
۲. لیست skills بهتره اول آورده شه که لیستیه از تکنولوژی ها و زبان های برنامه نویسی و…
بعدش تو هر کدوم از تجربه های کاری یا حتی پژوهشی، تکنولوژی/زبان برنامه نویسی/مدل ماشین لرنینگ… استفاده شده بهتره bold شه. اینطوری اون مهارت باورپذیرتر میشه و بهش context داده میشه
۳. اعداد خیلی مهمن برای هر تجربه کاری. چیزایی مثل:
تعداد افرادی که تو هر پروژه باهاشون کار کردین و مخصوصاً lead کردین
تعداد افرادی که از تیمهای دیگه باهاشون کار کردین و پوزیشنهاشون
حجم داده ورودی
تعداد کاربرها
مقدار تغییر متریک با انجام اون پروژه
تعداد request در ثانیه،…
۴. برای پوزیشن های کاری، فقط چند تا publication کافیه و واسه بقیه بهتره لینک داده شه به google scholar. وگرنه اهمیت بقیه رزومه تحت تاثیر قرار میگیره. حتی بخش education میتونه پایینتر قرار بگیره و قبلش تجربه کاری و پروژههای مهم رو بیارین
۵. واسه هر پوزیشن سعی کنین رزومه رو یه کم ادیت کنین تا بیشتر به job description شبیه شه. حتی اگه skill جدید نیازه که قبلاً تجربهشو نداشتین، میتونین چند تا پروژه جانبی انجام بدین و به رزومه اضافه کنین. اونطوری کیوردهایی که دنبالشن رو راحتتر در اختیارشون قرار میدین
۶. به همه کسایی که میخوان رزومهشونو بفرستن واسم تا نظرمو بگم، میگم باشه. ولی در عمل اصن فرصتشو نمیکنم یا شاید تنبلیم میاد اما در مجموع نکته خیلی متفاوتی نسبت به چیزایی که اینجا گفتم به ذهنم نمیرسه معمولاً. امیدوارم اینطوری به آدمای بیشتری کمک کنه
۱. اولا recruiter ها به طور میانگین ۸-۱۲ ثانیه رو هر رزومه وقت میذارن. واسه همین bold کردن کیوردها خیلی خیلی مهمه. سعی کنین مطالب مهمتر رو همون اول بیارین و در کل کار طرف رو برای فهمیدنش آسونتر کنین
۲. لیست skills بهتره اول آورده شه که لیستیه از تکنولوژی ها و زبان های برنامه نویسی و…
بعدش تو هر کدوم از تجربه های کاری یا حتی پژوهشی، تکنولوژی/زبان برنامه نویسی/مدل ماشین لرنینگ… استفاده شده بهتره bold شه. اینطوری اون مهارت باورپذیرتر میشه و بهش context داده میشه
۳. اعداد خیلی مهمن برای هر تجربه کاری. چیزایی مثل:
تعداد افرادی که تو هر پروژه باهاشون کار کردین و مخصوصاً lead کردین
تعداد افرادی که از تیمهای دیگه باهاشون کار کردین و پوزیشنهاشون
حجم داده ورودی
تعداد کاربرها
مقدار تغییر متریک با انجام اون پروژه
تعداد request در ثانیه،…
۴. برای پوزیشن های کاری، فقط چند تا publication کافیه و واسه بقیه بهتره لینک داده شه به google scholar. وگرنه اهمیت بقیه رزومه تحت تاثیر قرار میگیره. حتی بخش education میتونه پایینتر قرار بگیره و قبلش تجربه کاری و پروژههای مهم رو بیارین
۵. واسه هر پوزیشن سعی کنین رزومه رو یه کم ادیت کنین تا بیشتر به job description شبیه شه. حتی اگه skill جدید نیازه که قبلاً تجربهشو نداشتین، میتونین چند تا پروژه جانبی انجام بدین و به رزومه اضافه کنین. اونطوری کیوردهایی که دنبالشن رو راحتتر در اختیارشون قرار میدین
۶. به همه کسایی که میخوان رزومهشونو بفرستن واسم تا نظرمو بگم، میگم باشه. ولی در عمل اصن فرصتشو نمیکنم یا شاید تنبلیم میاد اما در مجموع نکته خیلی متفاوتی نسبت به چیزایی که اینجا گفتم به ذهنم نمیرسه معمولاً. امیدوارم اینطوری به آدمای بیشتری کمک کنه
من راجب
این کد رو یکی از اعضا فرستاده (درحال code review این کد رو دیده)
یکی از دلایلی که
رو استفاده میکنیم این هست که دیگه
باقی مشکلات رو شما بگید (به اکثر موارد قبلاً اشاره شده توی کانال)
repr
, str
, ... صحبت کردم.این کد رو یکی از اعضا فرستاده (درحال code review این کد رو دیده)
@dataclassی مورد رو من بگم و بعد سکوت کنم :
class CasbinRuleEntity:
id: typing.Optional[int] = None
ptype: typing.Optional[str] = None
v0: typing.Optional[str] = None
v1: typing.Optional[str] = None
v2: typing.Optional[str] = None
v3: typing.Optional[str] = None
v4: typing.Optional[str] = None
v5: typing.Optional[str] = None
def __str__(self):
arr = [self.ptype]
for v in (self.v0, self.v1, self.v2, self.v3, self.v4, self.v5):
if v is None:
break
arr.append(v)
return ', '.join(arr)
def __repr__(self):
return '<CasbinRule {}: "{}">'.format(self.id, str(self))
یکی از دلایلی که
@dataclass
رو استفاده میکنیم این هست که دیگه
repr
بدرد نخور ننویسیم.باقی مشکلات رو شما بگید (به اکثر موارد قبلاً اشاره شده توی کانال)
🧑💻PythonDev🧑💻
من راجب repr, str , ... صحبت کردم. این کد رو یکی از اعضا فرستاده (درحال code review این کد رو دیده) @dataclass class CasbinRuleEntity: id: typing.Optional[int] = None ptype: typing.Optional[str] = None v0: typing.Optional[str] = None v1:…
دوستان به موارد زیادی اشاره کردند اما گفتم یکبار هم خودم همهی آن چیزی که توی کد ریویو انجام میدم رو بگم :
۱- وقتی کلاس یا تابع تعریف میکنید که خودش یا اجزا تشکیل دهندهاش مشخص نیست حتما باید داکیومنت یا کامنت داشته باشه
بدترین اسامی هست که میشه انتخاب کرد؛ چون برنامه نویس داره فرض میکنه که همهی افرادی که کد رو میخونند بیزینس رو بخوبی میشناسند.
۲- استفاده از
۳- از
۴- حالا که نوشته شده
۵- داخل
عدم استفاده از
عدم استفاده از
فرمت اشتباه؛ خروجی
۶- خورد
من حتی به این حالت هم فکر کردم که چون تعداد متغییرها زیاد بوده برنامهنویس خواسته از یک جایی به بعد
تقریبا ۲۰ خط کد بود و ۳۰ خط ایراد.
۱- وقتی کلاس یا تابع تعریف میکنید که خودش یا اجزا تشکیل دهندهاش مشخص نیست حتما باید داکیومنت یا کامنت داشته باشه
v0, v1, v2 , ...
بدترین اسامی هست که میشه انتخاب کرد؛ چون برنامه نویس داره فرض میکنه که همهی افرادی که کد رو میخونند بیزینس رو بخوبی میشناسند.
۲- استفاده از
typing optional
در اینجا درست نیست مخصوصا که برای همهی موارد تکرار شده و به همهی موارد دیفالت None
داده شده؛ حتی اگر همین کد رو بخوایم نگه داریم این راهکارها بهتر خواهد بود :v0: str | None
v0: typing.Union[str, None]
۳- از
dataclass
هیچ استفادهای نشده (frozen, ordering, slot ,
....) حتی از ویژگیهای حالت سادهترش هم استفاده نشده؛ مثل پیاده سازی methods که
یعنی repr و s
tr نیازی نبود نوشته بشه.۴- حالا که نوشته شده
repr
در
انتهای خروجی به str(self)
رو داره و این یعنی برنامه نویس سواد نوشتن repr درس
ت رو نداشته و چون توی حلقه بینهایت میوفته مجبور شده که str رو
هم پیادهسازی کنه۵- داخل
repr همه
چیز پر از ایراد هست (تمام موارد رو قبلا بررسی کردیم تو کانال) :عدم استفاده از
qualname
, هاردکد کردن اسم کلاسعدم استفاده از
r!
جهت نمایش درست تایپهای داخلیفرمت اشتباه؛ خروجی
repr رو
برای ساخت مجدد آبجکت از کلاس نمیشه استفاده کرد.۶- خورد
str کلا
سوال هست؛ نوشتاری که تمیز نیست؛ هدفش مشخص نیست و ....من حتی به این حالت هم فکر کردم که چون تعداد متغییرها زیاد بوده برنامهنویس خواسته از یک جایی به بعد
...
نشون بده مثل کاری که numpy , ....
میکنند؛ که اگر هدف هم این بوده پیاده سازی اشتباهی انجام داده و با یک جستجوی ساده حتی میتونسته به راهکار درست برسه reprlib builtin module
تقریبا ۲۰ خط کد بود و ۳۰ خط ایراد.
✔️ استیبل بودن یا نبودن یک الگوریتم مرتب سازی
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
lst = [
("Ashkan",17),
("Bahar",18),
("Sorena",17)
]
یک راه مرسوم اینه که به این روش sort رو انجام بدیم:
lst.sort(key=lambda x: (x[1], x[0]))
کاملا درسته و هیچ اشکالی نداره. بیشتر میخواستیم درباره موضوع پست صحبت کنیم.
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
lst.sort(key=lambda x: x[1])
اگه بدونیم الگوریتمی که استفاده شده stable هست بله میتونیم و گارانتی هست که آیتم های مساوی به همون ترتیب در خروجی قرار میگیرن، و چون در حال حاضر بر اساس حروف الفبا مرتب شده هستن، اون افرادی که نمره ی برابر دارن اتوماتیک بر اساس حروف الفبا هم مرتب هستن.
خروجی هردو:
[
('Ashkan', 17),
('Sorena', 17),
('Bahar', 18)
]
پایتون از Tim Sort استفاده میکنه و stable هست.
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
lst = [
("Ashkan",17),
("Bahar",18),
("Sorena",17)
]
یک راه مرسوم اینه که به این روش sort رو انجام بدیم:
lst.sort(key=lambda x: (x[1], x[0]))
کاملا درسته و هیچ اشکالی نداره. بیشتر میخواستیم درباره موضوع پست صحبت کنیم.
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
lst.sort(key=lambda x: x[1])
اگه بدونیم الگوریتمی که استفاده شده stable هست بله میتونیم و گارانتی هست که آیتم های مساوی به همون ترتیب در خروجی قرار میگیرن، و چون در حال حاضر بر اساس حروف الفبا مرتب شده هستن، اون افرادی که نمره ی برابر دارن اتوماتیک بر اساس حروف الفبا هم مرتب هستن.
خروجی هردو:
[
('Ashkan', 17),
('Sorena', 17),
('Bahar', 18)
]
پایتون از Tim Sort استفاده میکنه و stable هست.
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
🔶🔹File Handling🔹🔶
با استفاده از عملیات "فایل هندلینگ" در پایتون، شما میتوانید فایلها را مدیریت کرده و عملیات خواندن و نوشتن بر روی آنها را انجام دهید. این عملیات اجازه میدهد تا به برنامههای شما امکان تعامل با فایلهای داده و ذخیره و بازیابی اطلاعات را بدهد. در زیر، مراحل اساسی فایل هندلینگ در پایتون را توضیح میدهم:
1. باز کردن فایل:
قبل از هر چیزی، باید فایل مورد نظر را باز کنید. این کار با استفاده از تابع
در این مثال، فایل با نام "example.txt" برای خواندن باز شده است.
2. خواندن اطلاعات از فایل:
با داشتن فایل هندل، میتوانید اطلاعات موجود در فایل را خوانده و استفاده کنید. برای خواندن اطلاعات، از توابعی مانند
3. نوشتن در فایل:
اگر قصد دارید اطلاعاتی را در فایل بنویسید، باید فایل را در حالت مناسب باز کنید و از تابع
4. بستن فایل:
پس از اتمام کار با فایل، بهتر است آن را ببندید تا منابع سیستم را آزاد کنید. برای بستن فایل، از تابع
ضمناً، روش بهتری برای کار با فایلها و مدیریت آنها در پایتون، استفاده از بلوک
به خاطر داشته باشید که در حین کار با فایلها، باید از نحوهی باز کردن فایل، نوشتن و خواندن اطلاعات و بستن فایل به درستی اطمینان حاصل کنید تا از ایجاد خطاها و مشکلات جلوگیری شود.
با استفاده از عملیات "فایل هندلینگ" در پایتون، شما میتوانید فایلها را مدیریت کرده و عملیات خواندن و نوشتن بر روی آنها را انجام دهید. این عملیات اجازه میدهد تا به برنامههای شما امکان تعامل با فایلهای داده و ذخیره و بازیابی اطلاعات را بدهد. در زیر، مراحل اساسی فایل هندلینگ در پایتون را توضیح میدهم:
1. باز کردن فایل:
قبل از هر چیزی، باید فایل مورد نظر را باز کنید. این کار با استفاده از تابع
open()
انجام میشود. تابع open()
پارامترهایی مانند نام فایل و حالت باز کردن را دریافت میکند. به طور مثال:file = open("example.txt", "r") # باز کردن فایل برای خواندن
در این مثال، فایل با نام "example.txt" برای خواندن باز شده است.
2. خواندن اطلاعات از فایل:
با داشتن فایل هندل، میتوانید اطلاعات موجود در فایل را خوانده و استفاده کنید. برای خواندن اطلاعات، از توابعی مانند
.read()
و .readline()
و .readlines()
استفاده میکنیم. به طور مثال:content = file.read() # خواندن تمام محتوای فایل
line = file.readline() # خواندن یک خط از فایل
lines = file.readlines() # خواندن همه خطوط فایل و ذخیره آنها در یک لیست
3. نوشتن در فایل:
اگر قصد دارید اطلاعاتی را در فایل بنویسید، باید فایل را در حالت مناسب باز کنید و از تابع
write()
استفاده کنید. به طور مثال:file = open("example.txt", "w") # باز کردن فایل برای نوشتن
file.write("Hello, World!") # نوشتن رشته در فایل
4. بستن فایل:
پس از اتمام کار با فایل، بهتر است آن را ببندید تا منابع سیستم را آزاد کنید. برای بستن فایل، از تابع
close()
استفاده میکنید. به طور مثال:file.close()
ضمناً، روش بهتری برای کار با فایلها و مدیریت آنها در پایتون، استفاده از بلوک
with
است. مزیت استفاده از این بلوک این است که به صورت خودکار فایل را ببندید و نیازی به صریحترین بستن فایل ندارید. روش استفاده از بلوک with
به این صورت است:with open("example.txt", "r") as file:
content = file.read()
# انجام عملیات مورد نظر
# فایل به طور خودکار بسته میشود
به خاطر داشته باشید که در حین کار با فایلها، باید از نحوهی باز کردن فایل، نوشتن و خواندن اطلاعات و بستن فایل به درستی اطمینان حاصل کنید تا از ایجاد خطاها و مشکلات جلوگیری شود.
🔶🔹Python String Formatting🔹🔶
به آرایهای از کاراکترها که یک رشته نامیده میشود، "رشته" میگویند. یکی از قابلیتهای پایتون، فرمتبندی رشتهها است که به شما امکان میدهد مقادیر مختلف را درون یک رشته قرار داده و آن را به صورت مطلوب قالببندی کنید.
در پایتون، دو روش متداول برای فرمتبندی رشتهها وجود دارد:
۱. روش قدیمی: استفاده از عملگر % (عملگر قدیمی)
۲. روش جدید: استفاده از متد .format() (عملگر جدید)
از عملگر قدیمی % برای جایگذاری مقادیر در رشته استفاده میشود. این روش خاصیت وراثتی دارد که با فرمتبندیهای متنوعی تعامل دارد. به طور مثال:
Output:
در عملگر جدید .format()، مقادیر را با استفاده از علامت {} در رشته قرار میدهیم و سپس این مقادیر را با استفاده از متد .format() تعیین میکنیم. به طور مثال:
Output:
همچنین در روش جدید، میتوانید با استفاده از شماره موقعیت مقادیر در .format()، ترتیب قرارگیری آنها را تغییر دهید. به طور مثال:
Output:
همچنین میتوانید با استفاده از ویژگیهای فرمتبندی مانند تعداد اعشاری که نمایش داده میشود، طول فیلد و... رشته را قالببندی کنید. به طور مثال:
Output:
این بخشی از قدرتمندیهای فرمتبندی رشته در پایتون است. در این روش جدید، میتوانید انواع دیگری از فرمتها را نیز برای قالببندی استفاده کنید.
ضمناً در پایتون 3.6 و بالاتر، میتوان از روش f-string استفاده کرد. این روش بسیار ساده و خوانا است و با استفاده از علامت f و داخل آن قرار دادن متغیرها، رشته را قالببندی میکند. به طور مثال:
Output:
به آرایهای از کاراکترها که یک رشته نامیده میشود، "رشته" میگویند. یکی از قابلیتهای پایتون، فرمتبندی رشتهها است که به شما امکان میدهد مقادیر مختلف را درون یک رشته قرار داده و آن را به صورت مطلوب قالببندی کنید.
در پایتون، دو روش متداول برای فرمتبندی رشتهها وجود دارد:
۱. روش قدیمی: استفاده از عملگر % (عملگر قدیمی)
۲. روش جدید: استفاده از متد .format() (عملگر جدید)
از عملگر قدیمی % برای جایگذاری مقادیر در رشته استفاده میشود. این روش خاصیت وراثتی دارد که با فرمتبندیهای متنوعی تعامل دارد. به طور مثال:
age = 25
name = "John"
message = "My name is %s and I am %d years old." % (name, age)
print(message)
Output:
My name is John and I am 25 years old.
در عملگر جدید .format()، مقادیر را با استفاده از علامت {} در رشته قرار میدهیم و سپس این مقادیر را با استفاده از متد .format() تعیین میکنیم. به طور مثال:
age = 25
name = "John"
message = "My name is {} and I am {} years old.".format(name, age)
print(message)
Output:
My name is John and I am 25 years old.
همچنین در روش جدید، میتوانید با استفاده از شماره موقعیت مقادیر در .format()، ترتیب قرارگیری آنها را تغییر دهید. به طور مثال:
age = 25
name = "John"
message = "My name is {1} and I am {0} years old.".format(age, name)
print(message)
Output:
My name is John and I am 25 years old.
همچنین میتوانید با استفاده از ویژگیهای فرمتبندی مانند تعداد اعشاری که نمایش داده میشود، طول فیلد و... رشته را قالببندی کنید. به طور مثال:
pi = 3.14159265359
formatted_pi = "{:.2f}".format(pi)
print(formatted_pi)
Output:
3.14
این بخشی از قدرتمندیهای فرمتبندی رشته در پایتون است. در این روش جدید، میتوانید انواع دیگری از فرمتها را نیز برای قالببندی استفاده کنید.
ضمناً در پایتون 3.6 و بالاتر، میتوان از روش f-string استفاده کرد. این روش بسیار ساده و خوانا است و با استفاده از علامت f و داخل آن قرار دادن متغیرها، رشته را قالببندی میکند. به طور مثال:
age = 25
name = "John"
message = f"My name is {name} and I am {age} years old."
print(message)
Output:
My name is John and I am 25 years old.
🔷🔸Python Arrays🔸🔷
در پایتون، برای ذخیره و مدیریت دادهها، از ساختار دادهها استفاده میشود.
یکی از این ساختارها، آرایه (Array) است که نقطه قوت قابلیت ذخیرهسازی دادههای همنوع (دادههایی که همگی از یک نوع هستند) و دسترسی به عناصر با استفاده از شاخصها است.
در پایتون، میتوانیم از دو نوع آرایه استفاده کنیم: "لیستها" (Lists) و "آرایههای numpy" (NumPy Arrays).
1. لیستها:
لیستها در پایتون یک ساختار داده پویا و چند منظوره هستند. با استفاده از لیستها میتوانیم دادههای مختلف را در یک لیست ذخیره کنیم. برای ایجاد یک لیست، از علامت
لیستها میتوانند انواع مختلف دادهها را شامل شوند، مانند اعداد، رشتهها، لیستهای دیگر و حتی ترکیبی از انواع مختلف. البته، در لیستها همچنین میتوانیم به عناصر با استفاده از اندیس (شاخص) دسترسی پیدا کنیم و در عملیاتهایی مانند اضافه کردن، حذف، تغییر و مرتبسازی عناصر لیست، تغییراتی ایجاد کنیم.
2. آرایههای numpy:
آرایههای numpy یک کتابخانه پرکاربرد در پایتون هستند که مفهوم آرایه را گسترش میدهند. این کتابخانه امکانات بسیاری را برای عملیات عملیاتی، ریاضیاتی و استنباطی روی دادههای چند بعدی فراهم میکند. برای استفاده از آرایههای numpy، ابتدا باید کتابخانه را با دستور
برخلاف لیستها، آرایههای numpy باید از مقداردهی اولیه دادهها با استفاده از توابع خاصی مانند
آرایههای numpy قابلیتهای بسیاری دارند، از جمله عملیات ریاضی و آماری، شاخصگذاری و برش، تبدیلات شکل و بسیاری دیگر.
در نتیجه، آرایهها در پایتون ابزارهای قدرتمندی هستند که به ما امکان میدهند دادهها را سازماندهی و برای آنها عملیات مختلفی انجام دهیم. 🦦📊
#FXL
#numpy
#Python_Arrays
در پایتون، برای ذخیره و مدیریت دادهها، از ساختار دادهها استفاده میشود.
یکی از این ساختارها، آرایه (Array) است که نقطه قوت قابلیت ذخیرهسازی دادههای همنوع (دادههایی که همگی از یک نوع هستند) و دسترسی به عناصر با استفاده از شاخصها است.
در پایتون، میتوانیم از دو نوع آرایه استفاده کنیم: "لیستها" (Lists) و "آرایههای numpy" (NumPy Arrays).
1. لیستها:
لیستها در پایتون یک ساختار داده پویا و چند منظوره هستند. با استفاده از لیستها میتوانیم دادههای مختلف را در یک لیست ذخیره کنیم. برای ایجاد یک لیست، از علامت
[]
و اعضا را با کاما جدا میکنیم. مثال زیر روشهای ساختن یک لیست را نشان میدهد:my_list = [] # ایجاد یک لیست خالی
my_list = [1, 2, 3, 4, 5] # ایجاد لیست با مقادیر اولیه
my_list = ['apple', 'banana', 'cherry'] # لیستی از رشتهها
لیستها میتوانند انواع مختلف دادهها را شامل شوند، مانند اعداد، رشتهها، لیستهای دیگر و حتی ترکیبی از انواع مختلف. البته، در لیستها همچنین میتوانیم به عناصر با استفاده از اندیس (شاخص) دسترسی پیدا کنیم و در عملیاتهایی مانند اضافه کردن، حذف، تغییر و مرتبسازی عناصر لیست، تغییراتی ایجاد کنیم.
2. آرایههای numpy:
آرایههای numpy یک کتابخانه پرکاربرد در پایتون هستند که مفهوم آرایه را گسترش میدهند. این کتابخانه امکانات بسیاری را برای عملیات عملیاتی، ریاضیاتی و استنباطی روی دادههای چند بعدی فراهم میکند. برای استفاده از آرایههای numpy، ابتدا باید کتابخانه را با دستور
import numpy as np
وارد کنیم.برخلاف لیستها، آرایههای numpy باید از مقداردهی اولیه دادهها با استفاده از توابع خاصی مانند
numpy.array()
استفاده کنند. مثال زیر نشان میدهد که چگونه یک آرایه یک بعدی از لیستها ایجاد کنیم:import numpy as np
my_array = np.array([1, 2, 3, 4, 5]) # ایجاد یک آرایه یک بعدی
آرایههای numpy قابلیتهای بسیاری دارند، از جمله عملیات ریاضی و آماری، شاخصگذاری و برش، تبدیلات شکل و بسیاری دیگر.
در نتیجه، آرایهها در پایتون ابزارهای قدرتمندی هستند که به ما امکان میدهند دادهها را سازماندهی و برای آنها عملیات مختلفی انجام دهیم. 🦦📊
#FXL
#numpy
#Python_Arrays
🔷🔸Python PIP🔸🔷
به معنای "PIP Installs Packages." است. PIP یک سیستم مدیریت بستهها در Python است که برای نصب و مدیریت بستههای نرمافزاری در Python استفاده میشود.
بستهها در Python کدهای توسعهیافتهی قابل استفاده مجدد هستند که قابلیتها و امکانات خاصی را به برنامهها اضافه میکنند.
این بستهها میتوانند کتابخانهها، ابزارها، فریم ورکها و سایر منابع نیازمند در حوزه برنامهنویسی Python باشند. PIP، امکان نصب و بهروزرسانی این بستهها را فراهم میکند.
شما میتوانید با استفاده از دستورات PIP، بستههای مورد نیاز خود را از Python Package Index (PyPI) دانلود و نصب کنید. PyPI یک مخزن در اینترنت است که بستههایی را که توسط جامعه Python توسعه داده شدهاند، میزبانی میکند.
بعضی از دستورات متداول PIP عبارتند از:
-
-
-
-
-
همچنین، میتوانید با استفاده از فایل
پیشنهاد میشود قبل از استفاده از PIP، نسخهی مناسبی از Python را نصب کنید و مطمئن شوید که محیط Python شما از PIP پشتیبانی میکند. 🐍📦
#FXL
به معنای "PIP Installs Packages." است. PIP یک سیستم مدیریت بستهها در Python است که برای نصب و مدیریت بستههای نرمافزاری در Python استفاده میشود.
بستهها در Python کدهای توسعهیافتهی قابل استفاده مجدد هستند که قابلیتها و امکانات خاصی را به برنامهها اضافه میکنند.
این بستهها میتوانند کتابخانهها، ابزارها، فریم ورکها و سایر منابع نیازمند در حوزه برنامهنویسی Python باشند. PIP، امکان نصب و بهروزرسانی این بستهها را فراهم میکند.
شما میتوانید با استفاده از دستورات PIP، بستههای مورد نیاز خود را از Python Package Index (PyPI) دانلود و نصب کنید. PyPI یک مخزن در اینترنت است که بستههایی را که توسط جامعه Python توسعه داده شدهاند، میزبانی میکند.
بعضی از دستورات متداول PIP عبارتند از:
-
pip install package_name
: برای نصب یک بسته از PyPI.-
pip uninstall package_name
: برای حذف یک بسته نصب شده.-
pip freeze
: نمایش لیست تمام بستههای نصب شده به همراه نسخه آنها.-
pip list
: نمایش لیست بستههای نصب شده.-
pip show package_name
: نمایش اطلاعات جزئیات یک بسته نصب شده.همچنین، میتوانید با استفاده از فایل
requirements.txt
، لیستی از بستههای مورد نیاز خود را جهت نصب و استفاده توسط PIP تعریف کنید.پیشنهاد میشود قبل از استفاده از PIP، نسخهی مناسبی از Python را نصب کنید و مطمئن شوید که محیط Python شما از PIP پشتیبانی میکند. 🐍📦
#FXL
در اینجا دو مثال ساده برای استخراج اطلاعات از یک وب سایت با استفاده از پایتون و کتابخانه
مثال 1: استخراج عنوان های خبرها از یک سایت خبری
مثال 2 : استخراج قیمت ارزها از یک سایت ارزی
لطفاً توجه داشته باشید که شما باید آدرس وب سایت مورد نظر خودتونو در توابع
همچنین، ممکنه برای استخراج اطلاعات از وب سایت خاصی نیاز به استفاده از تکنیکها و قوانین خاص داشته باشید که برای هر مورد باید اونهارو بررسی کنید. 🕵️♀️
#FXL
#Web_scraping
#پایتون_پیشرفته
#استخراج
beautifulsoup
رو برای شما آوردم:مثال 1: استخراج عنوان های خبرها از یک سایت خبری
import requests
from bs4 import BeautifulSoup
# ارسال درخواست به صفحه وب و دریافت پاسخ
response = requests.get('https://example.com/news')
# بررسی وضعیت درخواست
if response.status_code == 200:
# پارس کردن محتوای صفحه وب
soup = BeautifulSoup(response.text, 'html.parser')
# استخراج عنوان های خبرها
news_titles = soup.find_all('h2', class_='title')
# چاپ عنوان های خبرها
for title in news_titles:
print(title.text)
else:
print('درخواست موفقیتآمیز نبود.')
مثال 2 : استخراج قیمت ارزها از یک سایت ارزی
import requests
from bs4 import BeautifulSoup
# ارسال درخواست به صفحه وب و دریافت پاسخ
response = requests.get('https://example.com/currency')
# بررسی وضعیت درخواست
if response.status_code == 200:
# پارس کردن محتوای صفحه وب
soup = BeautifulSoup(response.text, 'html.parser')
# استخراج قیمت ارزها
currency_prices = soup.find_all('span', class_='price')
# چاپ قیمت ارزها
for price in currency_prices:
print(price.text)
else:
print('درخواست موفقیتآمیز نبود.')
لطفاً توجه داشته باشید که شما باید آدرس وب سایت مورد نظر خودتونو در توابع
requests.get()
قرار بدید و الگوهای HTML مورد استخراج رو براساس وب سایت خود تنظیم کنید.همچنین، ممکنه برای استخراج اطلاعات از وب سایت خاصی نیاز به استفاده از تکنیکها و قوانین خاص داشته باشید که برای هر مورد باید اونهارو بررسی کنید. 🕵️♀️
#FXL
#Web_scraping
#پایتون_پیشرفته
#استخراج
PythonNotesForProfessionals.pdf
6.1 MB
یادداشتهایی از پایتون برای حرفهایها:
یک کتاب کامل برای یادگیری و مرور نکات پایتون که توش از مفاهیم ساده مثل انواع داده و توابع تا مباحث پیچیده گفته.
یک کتاب کامل برای یادگیری و مرور نکات پایتون که توش از مفاهیم ساده مثل انواع داده و توابع تا مباحث پیچیده گفته.
🔹 امنیت پایتون
درباره امنیت پایتون باید بگم که این زبان برنامهنویسی یک مجموعهای از ابزارها و روشهای خوبی رو برای افزایش امنیت برنامههای اون ارائه میده.
در زیر به توضیحات بیشتری درباره این موضوع میپردازم:
1. رمزنگاری (Encryption): پایتون امکان استفاده از الگوریتمهای رمزنگاری مختلف مانند RSA، AES و HMAC رو فراهم میکنه. این الگوریتمها میتونن در ارتباطات امن، ذخیره سازی اطلاعات حساس و سایر موارد مورد استفاده قرار بگیرند.
2. اعتبارسنجی و ورود به سیستم (Authentication and Login): پایتون دارای کتابخونههای مختلفی مانند Flask-Login و Django Authentication هست که امکانات کاملی برای اعتبارسنجی و ورود به سیستم رو فراهم میکنن.
این کتابخونهها شامل امکانات مانند مدیریت کوکیها، نگهداری رمزنگاری شده رمزعبور و مکانیزمهای امنیتی برای جلوگیری از حملات سرقت حساب کاربری میشوند.
3. حفاظت در برابر تزریق کد (Code Injection Prevention): با استفاده از تکنیکهایی مانند استفاده از عملکردهای پیشفرض امن به جای توابع اشیا از رشد، استفاده از سنتکسهای امن مانند f-string برای ایجاد رشتهها و استفاده از توابع امن برای دسترسی به پایگاه داده، پایتون میتونه در مقابل تزریق کد و جلوگیری از حملات تزریق SQL و تزریق کد خطرناک دیگر مقاومت نشون بده.
درباره امنیت پایتون باید بگم که این زبان برنامهنویسی یک مجموعهای از ابزارها و روشهای خوبی رو برای افزایش امنیت برنامههای اون ارائه میده.
در زیر به توضیحات بیشتری درباره این موضوع میپردازم:
1. رمزنگاری (Encryption): پایتون امکان استفاده از الگوریتمهای رمزنگاری مختلف مانند RSA، AES و HMAC رو فراهم میکنه. این الگوریتمها میتونن در ارتباطات امن، ذخیره سازی اطلاعات حساس و سایر موارد مورد استفاده قرار بگیرند.
2. اعتبارسنجی و ورود به سیستم (Authentication and Login): پایتون دارای کتابخونههای مختلفی مانند Flask-Login و Django Authentication هست که امکانات کاملی برای اعتبارسنجی و ورود به سیستم رو فراهم میکنن.
این کتابخونهها شامل امکانات مانند مدیریت کوکیها، نگهداری رمزنگاری شده رمزعبور و مکانیزمهای امنیتی برای جلوگیری از حملات سرقت حساب کاربری میشوند.
3. حفاظت در برابر تزریق کد (Code Injection Prevention): با استفاده از تکنیکهایی مانند استفاده از عملکردهای پیشفرض امن به جای توابع اشیا از رشد، استفاده از سنتکسهای امن مانند f-string برای ایجاد رشتهها و استفاده از توابع امن برای دسترسی به پایگاه داده، پایتون میتونه در مقابل تزریق کد و جلوگیری از حملات تزریق SQL و تزریق کد خطرناک دیگر مقاومت نشون بده.
4. شبهکد نویسی: پایتون معمولاً برای نوشتن کدها و الگوریتمهای پیچیده استفاده میشه.
با توجه به اینکه پایتون یک زبان شبهکدی هست، عموماً نیازی به نگرانی از خطرات امنیتی مربوط به زبانهای کامپایل شده نیست.
اما باید بهبود امنیتی رو در نظر داشته باشید و به روزرسانیهای امنیتی پایتون اعتنا کنید.
5. پکیجهای استاندارد: پایتون با داشتن یک مجموعه وسیعی از پکیجهای استاندارد، امکانات امنیتی فراوانی رو ارائه میده.
مثلاً کتابخونههایی مانند
6. آسیبپذیریهای معروف: هر زبان برنامهنویسی ممکن است به آسیبپذیریهای خاصی آسیبپذیر باشد.
با توجه به اینکه پایتون یک زبان شبهکدی هست، عموماً نیازی به نگرانی از خطرات امنیتی مربوط به زبانهای کامپایل شده نیست.
اما باید بهبود امنیتی رو در نظر داشته باشید و به روزرسانیهای امنیتی پایتون اعتنا کنید.
5. پکیجهای استاندارد: پایتون با داشتن یک مجموعه وسیعی از پکیجهای استاندارد، امکانات امنیتی فراوانی رو ارائه میده.
مثلاً کتابخونههایی مانند
hashlib
برای رمزنگاری و هش، ssl
برای ارتباطات امن و secrets
برای مدیریت رازها و کلیدها به کار میروند.6. آسیبپذیریهای معروف: هر زبان برنامهنویسی ممکن است به آسیبپذیریهای خاصی آسیبپذیر باشد.
چند وقتی بود خیلی جاها میدیدم دوستان زیادی سوال میکردن یا دنبال تحقیق بودن که اصلا چه دلیلی داره ما وارد زبان #پایتون بشیم؟
تو این چند روز میخواستم در جواب به این سوال این متن رو آماده کنم که زیاد وقت نمیکردم اما الان میخوام نظر خودم رو بگم.
اولا اینکه دوستان انتخاب زبان نباید به گفته بقیه یا رسانه ها باشه حتما باید بر اساس نیاز و علاقه خود شخص شما باشه. چرا که شما بر اساس حوزه کاری تون زبان مناسب رو انتخاب میکنید.
اگر بخوام مثال بزنم زبان #انگلیسی در دنیا زبان اول هست هرکس این زبانو بلد باشه قطعا تو هیچ کشوری گیر نمیکنه ولی یسری شرایط هستن که مجبور میکنه شما از زبان دیگه ای استفاده کنید مثلا روسیه، آلمان یا نوروژ و... شرطی که دارن برای اقامت تحصیلی و کاری حتما باید زبان محلی اون کشور رو بلد باشید.
این یعنی شما مجبور میشید به غیر از انگلیسی زبان دیگری رو نیز یاد بگیرید.
حالا این امر توی برنامه نویسی هم هست اگر علاقه شما به هر دلیلی پایتون هست و ورود کردید ادامه بدید تا آخر ول نکنید از این شاخه به اون شاخه نپرید بعد که حداقل به جایی رسیدید اونجا تصمیم بگیرید که میخواید تغیر بدید یا نه حالت چرا باید تا ته بریم؟
پایتون یک زبان شی گرا، راحت، مفسری و دارای کتابخونه های گسترده و همچنین زبان سطح بالا هست.
پایتون تو حوزه های مختلفی استفاده میشه مثل هوش مصنوعی، دیتا، وب و... اما این نیاز یک #بیزینس هست که تکنولوژی رو انتخاب میکنه که با #جنگو) یکی از فریم ورکای پایتون برای بکند وب هست(بره جلو یا با فریم ورک دیگه یا با #پایتون جلو بره یا زبان دیگه.
پس اگر وارد یک حوزه یا زبانی میشید سعی کنید اول تمامش کنید تمام کننده یک راهی که شروع کردید خیلی مهم و موثر هست بعد ببینید شا قراره تو اون حوزه بمونید یا نه.
برای برنامه نویسی قطعا برای شروع شما باید اول از زبان های راحتی مثل پایتون، سی شارپ)حالا شاید فکر کنید سی شارپ راحت نیست ولی برای شروع مثل پایتون خوبه(شروع کنید سپس بریم سراغ زبان های پیچیده مثل سی و....
پس سعی نکنید وسط راه مسیرتون رو عوض کنید. و درنهایت برای اینکه خبره بشید تو اون حوزه سعی کنید شورشو دربیاری انقد بخونید، مطالعه کنید تمرین کنید که صاحب نظر اون حوزه بشید. یادتون باشه همه چی با خوندن نیست بعضی جاها ممکنه با 10 تا کتاب خوندن هم نتونید یه مورد رو درک کنید خیلی چیزا به تمرین و تجربه هم بستگی دارن تا شما تجربه نکنید تمرین نکنید نمیتونید اون مسئله رو حل کنید.
قبل از همه اینا که دوس داشتم آخر این متن بنویسم تقویت زبان انگلیسی تون هست که حتما حتما باید منابع رو به زبان اصلی بخونید و این خیلی کمک کننده هست براتون.
پس اگر یکی میگه پایتون بدرد نمیخوره مطمئن باشید تو بیزینس اون شخص بدردش نخورده و ممکنه بالعکس باشه و در بیزینس شما زبان دیگه ای بدرد نخوره!
و اینم بگم خیلیا میگن چرا خیلی از بیزینس ها با زبان های دیگه ای نوشته شده.
دوستان اکثر بیزینس ها چون در زمان های گذشته نوشته شدن یا قدیمین دیگه نمیصرفه بیان تکنولوژی عوض کنن یا هزینه کنن حتی میتونه ریسک هم باشه و جرات نمیکنن این کار رو بکنن پس اینم مقایسه نکنید چرا فلان بیزینس که مربوط میشه به 20 سال پیش با فلان زبان نوشته شده!
تو این چند روز میخواستم در جواب به این سوال این متن رو آماده کنم که زیاد وقت نمیکردم اما الان میخوام نظر خودم رو بگم.
اولا اینکه دوستان انتخاب زبان نباید به گفته بقیه یا رسانه ها باشه حتما باید بر اساس نیاز و علاقه خود شخص شما باشه. چرا که شما بر اساس حوزه کاری تون زبان مناسب رو انتخاب میکنید.
اگر بخوام مثال بزنم زبان #انگلیسی در دنیا زبان اول هست هرکس این زبانو بلد باشه قطعا تو هیچ کشوری گیر نمیکنه ولی یسری شرایط هستن که مجبور میکنه شما از زبان دیگه ای استفاده کنید مثلا روسیه، آلمان یا نوروژ و... شرطی که دارن برای اقامت تحصیلی و کاری حتما باید زبان محلی اون کشور رو بلد باشید.
این یعنی شما مجبور میشید به غیر از انگلیسی زبان دیگری رو نیز یاد بگیرید.
حالا این امر توی برنامه نویسی هم هست اگر علاقه شما به هر دلیلی پایتون هست و ورود کردید ادامه بدید تا آخر ول نکنید از این شاخه به اون شاخه نپرید بعد که حداقل به جایی رسیدید اونجا تصمیم بگیرید که میخواید تغیر بدید یا نه حالت چرا باید تا ته بریم؟
پایتون یک زبان شی گرا، راحت، مفسری و دارای کتابخونه های گسترده و همچنین زبان سطح بالا هست.
پایتون تو حوزه های مختلفی استفاده میشه مثل هوش مصنوعی، دیتا، وب و... اما این نیاز یک #بیزینس هست که تکنولوژی رو انتخاب میکنه که با #جنگو) یکی از فریم ورکای پایتون برای بکند وب هست(بره جلو یا با فریم ورک دیگه یا با #پایتون جلو بره یا زبان دیگه.
پس اگر وارد یک حوزه یا زبانی میشید سعی کنید اول تمامش کنید تمام کننده یک راهی که شروع کردید خیلی مهم و موثر هست بعد ببینید شا قراره تو اون حوزه بمونید یا نه.
برای برنامه نویسی قطعا برای شروع شما باید اول از زبان های راحتی مثل پایتون، سی شارپ)حالا شاید فکر کنید سی شارپ راحت نیست ولی برای شروع مثل پایتون خوبه(شروع کنید سپس بریم سراغ زبان های پیچیده مثل سی و....
پس سعی نکنید وسط راه مسیرتون رو عوض کنید. و درنهایت برای اینکه خبره بشید تو اون حوزه سعی کنید شورشو دربیاری انقد بخونید، مطالعه کنید تمرین کنید که صاحب نظر اون حوزه بشید. یادتون باشه همه چی با خوندن نیست بعضی جاها ممکنه با 10 تا کتاب خوندن هم نتونید یه مورد رو درک کنید خیلی چیزا به تمرین و تجربه هم بستگی دارن تا شما تجربه نکنید تمرین نکنید نمیتونید اون مسئله رو حل کنید.
قبل از همه اینا که دوس داشتم آخر این متن بنویسم تقویت زبان انگلیسی تون هست که حتما حتما باید منابع رو به زبان اصلی بخونید و این خیلی کمک کننده هست براتون.
پس اگر یکی میگه پایتون بدرد نمیخوره مطمئن باشید تو بیزینس اون شخص بدردش نخورده و ممکنه بالعکس باشه و در بیزینس شما زبان دیگه ای بدرد نخوره!
و اینم بگم خیلیا میگن چرا خیلی از بیزینس ها با زبان های دیگه ای نوشته شده.
دوستان اکثر بیزینس ها چون در زمان های گذشته نوشته شدن یا قدیمین دیگه نمیصرفه بیان تکنولوژی عوض کنن یا هزینه کنن حتی میتونه ریسک هم باشه و جرات نمیکنن این کار رو بکنن پس اینم مقایسه نکنید چرا فلان بیزینس که مربوط میشه به 20 سال پیش با فلان زبان نوشته شده!