🐍 Python & Raspberry 🐍
Open in Telegram
Python- Raspberry Pi-AI-IOT ادمین : فرهاد ناصری زاده @farhad_naserizadeh @farhad3412 گروه پایتون @Python_QA تبادل @mmtahmasbi کانال مرتبط @new_mathematical @micropython_iot @c_micro اینستاگرام http://Instagram.com/python_raspberry
Show more8 216
Subscribers
No data24 hours
-177 days
-8330 days
Posts Archive
Repost from Persian python
سلام دوستان وقتتون بخیر
ویدیو پلی لیست FastApi آپلود شد
قسمت : 30
موضوع : قسمت چهارم پروژه instagram - Delete Post - Authentication
امیدوارم که مفید بوده باشه
میتونین از لینک زیر تماشا کنید
https://youtu.be/poVMEc7-7Dk
فایل های این ویدیو در گیت هاب :
https://github.com/persianpython/FastApi
✔️ سوالها:
➖ چرا CPython رو با assembly نمینویسن؟
➖ چرا CPython رو مثل PyPy نمیکنن؟ یا چرا از PyPy بجای CPython استفاده نمیکنیم؟
✅ پاسخ سوال اول:
سوال اول: کد سی سریعتره کد اسمبلی؟
همه به من بگید ببینم، کامپایلرهای زبان سی از سورسکد C، چی تولید میکنن؟ خب حالت خییییلی پایه اینهکه از سورس C، کد اسمبلی تولید میکنن بعد با یه اسمبلر کد ماشینشون رو تحویل میدن.
اما حالت، هیچوقت حالت پایه نیست 😁
کاری که یه کامپایلر سی انجام میده اینه که یه خروجی خیلی efficient و کد اسمبلی خیلی سریع از اون سورسکد بیرون میکشه
این اصل ماجراست.
اینه که جواب سوال میشه کد سی در اکثر مواقع از کد اسمبلی hand written که دقیقا همون کار رو انجام میده سریعتره. این همه مغز و وقت صرف نوشتن کامپایلر کردن تا این بشه
تا این شده
این از این
سوال دوم: نوشتن کد سی آسونتره یا کد اسمبلی؟
سوال سوم: برای نوشتن یه برنامه خیلی ساده، کی سریعتر مینویسه یه C کار یا یه Assembly کار؟
سوال چهارم که جوابش هم میدونیم، کد کی سریعتره؟
تماما C برندهی ماجراست
پس فکر اینکه CPython رو با اسمبلی بنویسن سریعتر میشه رو بندازید بیرون.
به چند دلیل: سری دلایل اول -> همین دلایل بالا
سری دلایل دوم: بابا پایتون توی یه سری کارا کنده به هزار تا دلیل دیگه 😕 گیر ندید به سی یا اسمبلی
الان سورس PyPy که سرعت خیلی بیشتری از CPython توی خیلی جاها داره ببینید، پایتونه به ولله تقریبا بالای ۹۸ ۹۹ درصد پایتونه
پس مشکل جای دیگهست.
✅ پاسخ سوال دوم:
پیادهسازی CPython یک پیادهسازی general هست.
این خیلی معنیها داره
مثال: ببینید یه چیزی وجود داره به اسم numba
(برای مطالعه در مورد نامبا این مقالهام رو بخونید)
این یه JIT Compiler هست برای کارای عددی و محاسباتی دارای حلقههای زیاد
یکی از کارای jit ها همینه، چنین کدهایی رو سریع کنن اما آیا همه چنین کدهایی دارن؟ خیر
آیا تحمل اورهد و سنگینی JIT رو دارن؟ قطعا خیر
میدونید چقدر رم مصرف میکنن؟
برای یه راهحل مشابه بین پایتون و NodeJS، اون نسخهی NodeJS حدود ۴.۵ برابر بیشتر از پایتون رم مصرف کرده، صرفا بخاطر داشتن JIT.
جیتها start up رو هم کندتر میکنن
از اون طرف پایتون خیلی جاها از pypy سریعتره
مثلا یکیش وب
آقای Anthony shaw یه چند تا بنچمارک گرفتن با FastAPI و Uviloop و این دم و دستگاهها
توی همهشون pypy بسیار از CPython کندتر بوده و رم مصرفی خیلی بیشتری داشته
یه مشکل دیگه هم هست
پایپای به طور صد درصد با C extension moduleها اوکی نیست
فرض کن نتونی numpy استفاده کنی 🙂
پس هر چیزی رو بهرکاری ساختن
#M4hdi
〰〰〰〰〰〰〰〰
©@raspberry_python
✔️ سوالها:
➖ چرا CPython رو با assembly نمینویسن؟
➖ چرا CPython رو مثل PyPy نمیکنن؟ یا چرا از PyPy بجای CPython استفاده نمیکنیم؟
✅ پاسخ سوال اول:
سوال اول: کد سی سریعتره کد اسمبلی؟
همه به من بگید ببینم، کامپایلرهای زبان سی از سورسکد C، چی تولید میکنن؟ خب حالت خییییلی پایه اینهکه از سورس C، کد اسمبلی تولید میکنن بعد با یه اسمبلر کد ماشینشون رو تحویل میدن.
اما حالت، هیچوقت حالت پایه نیست 😁
کاری که یه کامپایلر سی انجام میده اینه که یه خروجی خیلی efficient و کد اسمبلی خیلی سریع از اون سورسکد بیرون میکشه
این اصل ماجراست.
اینه که جواب سوال میشه کد سی در اکثر مواقع از کد اسمبلی hand written که دقیقا همون کار رو انجام میده سریعتره. این همه مغز و وقت صرف نوشتن کامپایلر کردن تا این بشه
تا این شده
این از این
سوال دوم: نوشتن کد سی آسونتره یا کد اسمبلی؟
سوال سوم: برای نوشتن یه برنامه خیلی ساده، کی سریعتر مینویسه یه C کار یا یه Assembly کار؟
سوال چهارم که جوابش هم میدونیم، کد کی سریعتره؟
تماما C برندهی ماجراست
پس فکر اینکه CPython رو با اسمبلی بنویسن سریعتر میشه رو بندازید بیرون.
به چند دلیل: سری دلایل اول -> همین دلایل بالا
سری دلایل دوم: بابا پایتون توی یه سری کارا کنده به هزار تا دلیل دیگه 😕 گیر ندید به سی یا اسمبلی
الان سورس PyPy که سرعت خیلی بیشتری از CPython توی خیلی جاها داره ببینید، پایتونه به ولله تقریبا بالای ۹۸ ۹۹ درصد پایتونه
پس مشکل جای دیگهست.
✅ پاسخ سوال دوم:
پیادهسازی CPython یک پیادهسازی general هست.
این خیلی معنیها داره
مثال: ببینید یه چیزی وجود داره به اسم numba
(برای مطالعه در مورد نامبا این مقالهام رو بخونید)
این یه JIT Compiler هست برای کارای عددی و محاسباتی دارای حلقههای زیاد
یکی از کارای jit ها همینه، چنین کدهایی رو سریع کنن اما آیا همه چنین کدهایی دارن؟ خیر
آیا تحمل اورهد و سنگینی JIT رو دارن؟ قطعا خیر
میدونید چقدر رم مصرف میکنن؟
برای یه راهحل مشابه بین پایتون و NodeJS، اون نسخهی NodeJS حدود ۴.۵ برابر بیشتر از پایتون رم مصرف کرده، صرفا بخاطر داشتن JIT.
جیتها start up رو هم کندتر میکنن
از اون طرف پایتون خیلی جاها از pypy سریعتره
مثلا یکیش وب
آقای Anthony shaw یه چند تا بنچمارک گرفتن با FastAPI و Uviloop و این دم و دستگاهها
توی همهشون pypy بسیار از CPython کندتر بوده و رم مصرفی خیلی بیشتری داشته
یه مشکل دیگه هم هست
پایپای به طور صد درصد با C extension moduleها اوکی نیست
فرض کن نتونی numpy استفاده کنی 🙂
پس هر چیزی رو بهرکاری ساختن
#M4hdi
〰〰〰〰〰〰〰〰
©@raspberry_python
آخرین بازمانده از آن جمع پراکنده برفت؛
هوشنگ ابتهاج، ۶ اسفند ۱۳۰۶- ۱۹ مرداد ۱۴۰۱.
@raspberry_python
آخرین بازمانده از آن جمع پراکنده برفت؛
هوشنگ ابتهاج، ۶ اسفند ۱۳۰۶- ۱۹ مرداد ۱۴۰۱.
@raspberry_python
Repost from Persian python
سلام دوستان وقتتون بخیر
ویدیو پلی لیست Pyqt6 آپلود شد
قسمت : 39
موضوع : QML : Switch Button (Custom Switch) - CheckBox - ComboBox
امیدوارم که مفید بوده باشه
میتونین از لینک زیر تماشا کنید
https://youtu.be/ZRbTgd7ib6Q
فایل های این ویدیو در گیت هاب:
https://github.com/persianpython/Pyqt6
✔️ What is
if __name__ == "__main__":?
اول از همه، همه چیز توی پایتون یه آبجکته، زیاد شنیدیم و کلیشه شده ولی جداً یه سری آبجکتا رو نمیشناسیم.
یکی از اون تایپها ModuleType هست.
هر فایلی که سورس کد پایتون توش باشه، رو بهش میگیم ماژول؛ چرا؟ چون پایتون اون رو میگیره، یه آبجکت براش توی مموری درست میکنه.
چرا؟ خب یکی از دلایل منطقیش اینه که هر ماژول یه namespace باید داشته باشه (هر چند راحتتره بگیم هر ماژول یه namespace عه)
خب namespaceها توی پایتون چی هستن؟ خیلی سادهست :) همهشون دیکشنریاند (البته داندر slots قضیهاش فرق میکنه)
هر ماژول هم یکی از پایهای ترین نیاز هاش اینه که namespace داشته باشه تا کلاسها و توابع و متغیرها رو در دسترس ما قرار بده.
پس تا اینجا هر ماژول تبدیل به یه آبجکت میشه و یه namespace محسوب میشه. (اگه نمیشد که منتغی میشد 😂)
import types print(type(types)) -> <class 'module'> print(isinstance(types, types.ModuleType)) -> Trueمیدونی سیستم ایمپورت کردن توی پایتون چجوری کار میکنه؟ اول دنبال فایل میگرده بعدش لودش میکنه (آبجکتش رو درست میکنه) بعد کاملا رانش میکنه تا چیزای داخلش رو توی مموری بسازه (همون دیکشنری یا namespaceاش رو populate کنه.) حالا چون رانش میکنه، ممکنه مثلا پرینتی، صدا زدن تابعی، یک عمل زمانبری چیزی اون داخل وجود داشته باشه که موقع ایمپورت ما نمیخوایم چنین اتفاقی بیوفته. چون واقعا ران میشه. باید چه کار کنیم؟ هر ModuleType یه اسمی داره، فایلی اصلی که پایتون اول رو ران میکنه اسمش میشه main، اسم هم توی خود namespace عه ماژول ذخیره میشه توی name اما دیگر ماژولهایی که ایمپورت میشن اسمشون میشه اسم همون فایلشون
hola.py hello.py # inside hola.py print(name) # inside hello.py import hola # run hello.py output: holaپایتون یه شرط معروفی داره که صورت سوال ماست: الان میدونیم معنیش چیه
if __name__ == "__main__":داره میگه اگه ماژولی که ران میکنی اسمش main هست کدای زیرش رو اجرا کن که الان میدونیم که وقتی ماژول ایمپورت میشه اسمش اسم فایلشه و داندر مین نیست و این شرط غلط میشه و کدای زیرش اجرا نمیشن حالا میگیم اجرا نمیشن، اما کامپایل که میشن، پس اگه توی بلوک کد این if تو SyntaxError داشته باشی ارورش رو موقع ایمپورت کردنش میبینی. ایمپورت کردن چیزی نیست که «ما» بخوایم روی بهینهکردنش وقت بذاریم چون جدا نمیتونیم، اما اگه خود پایتون بهینهاش کنه تاثیری خوبی رو میبینیم. البته نه توی چیزای کوچیک، یه اپلیکیشنی که خیلی ایمپورت زیادی داره توش مشخص میشه و حتی بهتر اگه یه اپلیکیشنی به بزرگی اینستاگرام اون جاست که این بهینهسازی میتونه ساعتها کار رو سریعتر کنه، چجوری؟ یه سیستمی دارن توی پایتون ۳.۱۲ روش کار میکنن به اسم Lazy Imports، چطوری کار میکنه؟ وقتی ایمپورتها تنبل بشن، دیگه همون اول اول همهشون evaluate نمیشن، کداشون execute نمیشه و ... و وقتی که نیاز شد، اون ماژول کداش execute میشه. خب چقدر تاثیر میذاره؟ همه میدونیم که اینستاگرام از پایتون و جنگو استفاده میکنه، شرکت متا (فیسبوک) یه پیادهسازی پایتون داره به اسم Cinder این برای اینستاگرام بهینه شده مثلا garbage collector اش خاموشه و جدیدا مقالهای منتشر کردن که گفتن ما ایمپورتهارو کاملا lazy کردیم. قبلنا که تنبل نبودن اگه توسعهدهندهای حتی یه فایل رو عوض میکرد، اون سروری که اون فایل رو ران میکرد باید reload میشد و طبق گفته خودشون تا چند دقیقه طول میکشیده این قضیه. اما الان که ایمپورتها تنبل شدن بسیار بسیار سرعت کارشون زیاد شده چون دیگه وقت سر ایمپورت کردن و .... اول کار تلف نمیشه. پایتون به اندازه کافی سریعه، اما optimization باعث میشه که سریعتر بشه به این چیزا میگن بهینهسازی #M4hdi 〰️〰️〰️〰️〰️〰️〰️〰️〰️ ©@raspberry_python
✔️ What is
if __name__ == "__main__":?
اول از همه، همه چیز توی پایتون یه آبجکته، زیاد شنیدیم و کلیشه شده ولی جداً یه سری آبجکتا رو نمیشناسیم.
یکی از اون تایپها ModuleType هست.
هر فایلی که سورس کد پایتون توش باشه، رو بهش میگیم ماژول؛ چرا؟ چون پایتون اون رو میگیره، یه آبجکت براش توی مموری درست میکنه.
چرا؟ خب یکی از دلایل منطقیش اینه که هر ماژول یه namespace باید داشته باشه (هر چند راحتتره بگیم هر ماژول یه namespace عه)
خب namespaceها توی پایتون چی هستن؟ خیلی سادهست :) همهشون دیکشنریاند (البته داندر slots قضیهاش فرق میکنه)
هر ماژول هم یکی از پایهای ترین نیاز هاش اینه که namespace داشته باشه تا کلاسها و توابع و متغیرها رو در دسترس ما قرار بده.
پس تا اینجا هر ماژول تبدیل به یه آبجکت میشه و یه namespace محسوب میشه. (اگه نمیشد که منتغی میشد 😂)
import types print(type(types)) -> <class 'module'> print(isinstance(types, types.ModuleType)) -> Trueمیدونی سیستم ایمپورت کردن توی پایتون چجوری کار میکنه؟ اول دنبال فایل میگرده بعدش لودش میکنه (آبجکتش رو درست میکنه) بعد کاملا رانش میکنه تا چیزای داخلش رو توی مموری بسازه (همون دیکشنری یا namespaceاش رو populate کنه.) حالا چون رانش میکنه، ممکنه مثلا پرینتی، صدا زدن تابعی، یک عمل زمانبری چیزی اون داخل وجود داشته باشه که موقع ایمپورت ما نمیخوایم چنین اتفاقی بیوفته. چون واقعا ران میشه. باید چه کار کنیم؟ هر ModuleType یه اسمی داره، فایلی اصلی که پایتون اول رو ران میکنه اسمش میشه main، اسم هم توی خود namespace عه ماژول ذخیره میشه توی name اما دیگر ماژولهایی که ایمپورت میشن اسمشون میشه اسم همون فایلشون
hola.py hello.py # inside hola.py print(name) # inside hello.py import hola # run hello.py output: holaپایتون یه شرط معروفی داره که صورت سوال ماست: الان میدونیم معنیش چیه
if __name__ == "__main__":داره میگه اگه ماژولی که ران میکنی اسمش main هست کدای زیرش رو اجرا کن که الان میدونیم که وقتی ماژول ایمپورت میشه اسمش اسم فایلشه و داندر مین نیست و این شرط غلط میشه و کدای زیرش اجرا نمیشن حالا میگیم اجرا نمیشن، اما کامپایل که میشن، پس اگه توی بلوک کد این if تو SyntaxError داشته باشی ارورش رو موقع ایمپورت کردنش میبینی. ایمپورت کردن چیزی نیست که «ما» بخوایم روی بهینهکردنش وقت بذاریم چون جدا نمیتونیم، اما اگه خود پایتون بهینهاش کنه تاثیری خوبی رو میبینیم. البته نه توی چیزای کوچیک، یه اپلیکیشنی که خیلی ایمپورت زیادی داره توش مشخص میشه و حتی بهتر اگه یه اپلیکیشنی به بزرگی اینستاگرام اون جاست که این بهینهسازی میتونه ساعتها کار رو سریعتر کنه، چجوری؟ یه سیستمی دارن توی پایتون ۳.۱۲ روش کار میکنن به اسم Lazy Imports، چطوری کار میکنه؟ وقتی ایمپورتها تنبل بشن، دیگه همون اول اول همهشون evaluate نمیشن، کداشون execute نمیشه و ... و وقتی که نیاز شد، اون ماژول کداش execute میشه. خب چقدر تاثیر میذاره؟ همه میدونیم که اینستاگرام از پایتون و جنگو استفاده میکنه، شرکت متا (فیسبوک) یه پیادهسازی پایتون داره به اسم Cinder این برای اینستاگرام بهینه شده مثلا garbage collector اش خاموشه و جدیدا مقالهای منتشر کردن که گفتن ما ایمپورتهارو کاملا lazy کردیم. قبلنا که تنبل نبودن اگه توسعهدهندهای حتی یه فایل رو عوض میکرد، اون سروری که اون فایل رو ران میکرد باید reload میشد و طبق گفته خودشون تا چند دقیقه طول میکشیده این قضیه. اما الان که ایمپورتها تنبل شدن بسیار بسیار سرعت کارشون زیاد شده چون دیگه وقت سر ایمپورت کردن و .... اول کار تلف نمیشه. پایتون به اندازه کافی سریعه، اما optimization باعث میشه که سریعتر بشه به این چیزا میگن بهینهسازی #M4hdi 〰️〰️〰️〰️〰️〰️〰️〰️〰️ ©@raspberry_python
پاسخ و کمی توضیحات اضافه تر درباره سوال تستی:
یه کلاس ساخته شده به اسم Apple و توی لاین آخر بدون نمونه ساختن از کلاس، متد func "از روی کلاس" کال شده. این به این معناس که نیاز نیست که func حتما پارامتر self داشته باشه چون پارامتر اول با چیزی پر نمیشه (منظور از چیزی رفرنسی به نمونه ی ساخته شده هست)
خب با خط
Apple.func()
فانکشن func ران میشه. داخل این فانکشن زده شده:
global a
a = 1
یه نکته ای که باید بهش توجه کنید اینکه این خودش یک راه تعریف کردن متغیر global هست! ما معمولا از keyword عه global برای منظور دیگه ای استفاده میکردیم، یعنی متغیر ما توی global تعریف شده بود برای اینکه داخل فانکشن به همون اون متغیر اشاره کنیم میومدیم global ش میکردیم. ولی حتما نیاز نیست که متغیری باشه از قبل تو سطح ماژول یا همون namespace عه global ، بلکه همین دو خط تعریفش میکنه توی global. پس تا الان ما یه a توی global داریم.
حالا تو خط بعدی
Apple.func1
کال میشه این دفعه. همینجا یه سوال: چرا میشه به Apple دسترسی داشت ؟ چون فانکشن های داخل کلاس nested عه enclosing scope عه کلاسشون، در اینجا global هستن. دقت کنید nested عه کلاس نیستنا! nested عه ماژول هستن.
خب func1 کال شد... دوباره مثل func ، از روی کلاس کال شده پس b با رفرنسی به نمونه پر نمیشه با چیزی پر میشه که پاس داده شده بهش یعنی ۱۰. خب تا اینجا ۱۰ و داریم ولی اومده با a جمعش کرده. آیا مشکلی داره؟ نه نداره. گفتیم nested عه global هست namespace ش... توی global هم که a داریم پس از همون جا برمیداره و باهاش جمع میکنه و ۱۱ رو برمیگردونه.
حالا این عدد برگردونده شده کجا ذخیره میشه؟ هیچجا ! رو هوا از بین میره چون چیزی نگرفتتش. خروجی چش میشه ؟ None. اگه خب آخر fun به جای:
Apple.func1(10)
بود:
return Apple.func1(10)
اونوقت خروجی ۱۱ ما رو return میگرفت و تحویل caller عه خودش یعنی print میداد و ۱۱ چاپ میشد.
✒️ SorousH
پاسخ و کمی توضیحات اضافه تر درباره سوال تستی:
یه کلاس ساخته شده به اسم Apple و توی لاین آخر بدون نمونه ساختن از کلاس، متد func "از روی کلاس" کال شده. این به این معناس که نیاز نیست که func حتما پارامتر self داشته باشه چون پارامتر اول با چیزی پر نمیشه (منظور از چیزی رفرنسی به نمونه ی ساخته شده هست)
خب با خط
Apple.func()
فانکشن func ران میشه. داخل این فانکشن زده شده:
global a
a = 1
یه نکته ای که باید بهش توجه کنید اینکه این خودش یک راه تعریف کردن متغیر global هست! ما معمولا از keyword عه global برای منظور دیگه ای استفاده میکردیم، یعنی متغیر ما توی global تعریف شده بود برای اینکه داخل فانکشن به همون اون متغیر اشاره کنیم میومدیم global ش میکردیم. ولی حتما نیاز نیست که متغیری باشه از قبل تو سطح ماژول یا همون namespace عه global ، بلکه همین دو خط تعریفش میکنه توی global. پس تا الان ما یه a توی global داریم.
حالا تو خط بعدی
Apple.func1
کال میشه این دفعه. همینجا یه سوال: چرا میشه به Apple دسترسی داشت ؟ چون فانکشن های داخل کلاس nested عه enclosing scope عه کلاسشون، در اینجا global هستن. دقت کنید nested عه کلاس نیستنا! nested عه ماژول هستن.
خب func1 کال شد... دوباره مثل func ، از روی کلاس کال شده پس b با رفرنسی به نمونه پر نمیشه با چیزی پر میشه که پاس داده شده بهش یعنی ۱۰. خب تا اینجا ۱۰ و داریم ولی اومده با a جمعش کرده. آیا مشکلی داره؟ نه نداره. گفتیم nested عه global هست namespace ش... توی global هم که a داریم پس از همون جا برمیداره و باهاش جمع میکنه و ۱۱ رو برمیگردونه.
حالا این عدد برگردونده شده کجا ذخیره میشه؟ هیچجا ! رو هوا از بین میره چون چیزی نگرفتتش. خروجی چش میشه ؟ None. اگه خب آخر fun به جای:
Apple.func1(10)
بود:
return Apple.func1(10)
اونوقت خروجی ۱۱ ما رو return میگرفت و تحویل caller عه خودش یعنی print میداد و ۱۱ چاپ میشد.
✒️ SorousH
Repost from Persian python
#تمرین_شئ_گرایی
تمرین چهارم
1. یک کلاس بسازید به اسم Vector
که 3تا آرگیومنت x, y ,z داشته باشه
بدون مقدار Default
2. تابع repr باید به طوری نوشته بشه که یوزر بتونه ازش برای باز سازی آبجکت استفاده کنه
( Reconstruct the instance )
3. باید اندازه بردار رو حساب کنیم
برای محاسبه بردار نیازه که شما جذر جمع توان 2 هر نقطه رو حساب کنید
from math import sqrt sqrt( x **2 + y **2 + z **2 )وقتی از تابع abs روی آبجکت استفاده میکنیم اندازه بردار رو برگردونه
__abs__4. امکان جمع دو Vector باهم داشته باشه امکان ضرب یک عدد int و float با vector داشته باشه 5. تمامی عملگر های منطقی رو ساپورت کنه بر اساس
abs(Vector)6. قابلیت hash شدن رو داشته باشه 7. در تابع bool وقتی اندازه بردار 0 بود False برگردونه 8. و در آخر کلاس باید این اجازه رو به کاربر بده تا از طریق براکت بتونه نقاط رو بدست بیاره
v['y'] v['Y']بزرگ و کوچک هر2 رو باید ساپورت کنه... جواب این سوال در گیت هاب قرار گرفته است https://github.com/persianpython/PythonObjectOriented
Repost from هشتگ تبلیغ تخصصی
💻 دوره آموزشی «علـــــم داده (Data Science)»
✅ آموزش با نرم افزارها و زبــانهای R، Python و SQL Server
🔥 نیاز روز بــــازار کــــار ایــــــران و خـــارج
مخاطبان دوره:
🔸 دانشجویان و فارغالتحصیلان کلیه رشتههای تحصیلی
🔹 علاقمندان #علم_داده و تحلیلگری داده
🔸 کارشناسان و مدیران علوم داده
🔹 تحلیلگران کسب و کار
🔬 آموزش #آنلاین و با موردکاویهای واقعی و پروژه
🏛 موسسه آموزش عالی آزاد توسعه
📃 با گواهینامه مورد تایید وزارت علوم، تحقیقات و فناوری
👈 مشاهده جزئیات دوره و مشاوره رایگان (کلیک کنید) 👁🗨
➖➖
لینکداین ثبت نام در ۲۰ آموزش پرطرفدار در سال اخیر رو تا ۳۰ آگست رایگان کرده میتونید در یکی از اونها ثبت نام کنید ،تمامی دوره های لینکداین داری سرتیفیکیشن هستند دوره های آموزش پایتون،sql,powerbi,و دیجیتال مارکتینگ از جمله این آموزش ها هستند با دوستان خود به اشتراک بگذارید
https://www.linkedin.com/business/learning/blog/top-skills-and-courses/the-most-popular-linkedin-learning-courses
@raspberry_python
لینکداین ثبت نام در ۲۰ آموزش پرطرفدار در سال اخیر رو تا ۳۰ آگست رایگان کرده میتونید در یکی از اونها ثبت نام کنید ،تمامی دوره های لینکداین داری سرتیفیکیشن هستند دوره های آموزش پایتون،sql,powerbi,و دیجیتال مارکتینگ از جمله این آموزش ها هستند با دوستان خود به اشتراک بگذارید
https://www.linkedin.com/business/learning/blog/top-skills-and-courses/the-most-popular-linkedin-learning-courses
@raspberry_python
