<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های دانیال</title>
        <link>https://virgool.io/feed/@danial.bidekani</link>
        <description>مهندس نرم‌افزار، مهندس داده، علاقه‌مند به هوش مصنوعی (دانش‌آموخته‌ی دانشگاه خواجه نَصیرُالدین طوسی)</description>
        <language>fa</language>
        <pubDate>2026-06-17 07:36:21</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>دانیال</title>
            <link>https://virgool.io/@danial.bidekani</link>
        </image>

                    <item>
                <title>ابتدایی‌ترین مفهوم در علوم کامپیوتر</title>
                <link>https://virgool.io/coderlife/%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7%DB%8C%DB%8C%D8%AA%D8%B1%DB%8C%D9%86-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%AF%D8%B1-%D8%B9%D9%84%D9%88%D9%85-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-a3rm4159zbpp</link>
                <description>اگر دانشجوی یکی از رشته‌های مرتبط با کامپیوتر هستید، احتمالا با ابتدایی‌ترین مفهوم علوم کامپیوتر آشنایی دارید. معمولا استادهای خوش‌سلیقه می‌دانند که باید ذهن یک دانشجوی کامپیوتر را با مدل ورودی - پردازش - خروجی آشنا کنند.فرض کنیم در کلاس درس هستیم،معمولا این طور شروع می‌شود: برای حل اکثر مساله‌ها در علوم کامپیوتر سه بخش وجود دارد:مدل ورودی - پردازش - خروجیمعمولا هر مساله‌ای یک سری ورودی دارد، سپس این ورودی‌ها در مرحله‌ی دوم پردازش می‌شوند و در مرحله‌ی آخر پردازش خروجی مناسب تولید می‌شود.ورودی‌ها معمولا توسط یک عامل انسانی یا یک پروسه‌ی در حال اجرا به برنامه داده می‌شود، برنامه این ورودی‌ها را پردازش می‌کند و در مرحله‌ی آخر خروجی مناسب را تولید می‌کند.مثال ۱ (تابع در برنامه‌نویسی)فرض کنیم از ما خواسته می‌شود تا برنامه‌ای بنویسیم که یک عدد را از ورودی بگیرد، اگر این عدد مضرب سه بود، پیغام OK و در غیر این صورت پیغام NO به خروجی فرستاده شود.def multiple_by_three(num):
    if num % 3 == 0:
        return &amp;quotOK&amp;quot
    else:
        return &amp;quotNO&amp;quotدر این جا ورودی مساله یک عدد است که از ورودی گرفته می‌شود سپس وارد مرحله‌ی پردازش می‌شود، در مرحله‌ی پردازش بررسی می‌شود که آیا باقیمانده‌ی عدد وارد شده بر سه صفر است یا نه. اگر صفر بود یعنی این عدد مضرب سه است. اگر عدد مضرب سه بود پیغام OK و در غیر این صورت پیغام NO به خروجی فرستاده می‌شود.مثال ۲ (فرایند ETL)در مهندسی داده (Data Engineering) هم با مسائلی از این دست مواجه می‌شویم. یکی از وظایف مهندس داده نوشتن روال‌های ETL است که طی این روال یک سری داده به عنوان ورودی می‌خواند آن‌ها را تمیز می‌کند و پس از تبدیل کردن به شکل مناسب آن‌ها را به خروجی می‌فرستد:یک ETL نمونهمثلا در فرایند ETL بالا، یک مهندس داده می‌خواد مقدار male را با صفر  و مقدار female را با یک جایگزین کند، یک فایل CSV به عنوان ورودی به برنامه داده می‌شود، برنامه تبدیل مورد نظر را انجام می‌دهد و در نهایت یک فایل CSV جدید به عنوان خروجی تولید می‌کند.منابعhttps://en.wikipedia.org/wiki/IPO_model</description>
                <category>دانیال</category>
                <author>دانیال</author>
                <pubDate>Fri, 26 Jun 2020 13:17:28 +0430</pubDate>
            </item>
                    <item>
                <title>در مورد Slicing</title>
                <link>https://virgool.io/@danial.bidekani/%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-slicing-cawv5u4hgzac</link>
                <description>یکی از ویژگی‌های قوی زبان برنامه‌نویسی پایتون این است که می‌توان بر روی Sequenceها مانند لیست، تاپل ، استرینگ و... از عملگر برش (Slicing) استفاده کرد. عملگر برش به ما کمک می‌کند که تنها بخشی از دنباله‌ی مورد نظر را انتخاب کنیم. مثلا اگر یک لیست به طول چهار داشته باشیم با استفاده از عملگر برش می‌توان سه عضو ابتدایی یا سه عضو انتهایی آن را انتخاب کرد.قرارداد (Convention) پایتونیک استفاده از عملگر برش به این صورت است که از Zero-based indexing پشتیبانی می‌کند. Zero-based indexing یعنی نخستین عضو هر دنباله در پایتون همیشه از صفر شروع می‌شود. به عبارت دیگر اگر یک لیست به نام lst داشته باشید، برای دسترسی به نخستین عضو آن کافی‌ست از عبارت زیر استفاده کنید:lst[0]وقتی از عملگر برش استفاده می‌کنید، برای انتخاب سه عضو اول لیست، باید به صورت زیر عمل کنید:lst[:3]عبارت بالا به این معنی‌ست که سه عضو ابتدایی لیست lst انتخاب شود.مزایای استفاده از Zero-based Indexing: به راحتی می‌توان طول یک Slice یا Range را محاسبه کرد؛ به این صورت که:lst[start: stop]
Length of lst = stop - startبه راحتی می‌توان یک دنباله را به دو نیم تقسیم (Split) کرد بدون این که نگران مساله‌ی Overlapping باشیم:&gt;&gt;&gt; lst = [1, 2, 3, 4, 5]
&gt;&gt;&gt; lst[:2]
[1, 2]
&gt;&gt;&gt; lst[2:]
[3, 4, 5]</description>
                <category>دانیال</category>
                <author>دانیال</author>
                <pubDate>Wed, 30 Oct 2019 21:47:29 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت کامپایلر و مفسر</title>
                <link>https://virgool.io/@danial.bidekani/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84%D8%B1-%D9%88-%D9%85%D9%81%D8%B3%D8%B1-compiler-vs-interpreter-mede0nsuwahl</link>
                <description>قصد داریم به سادگی تفاوت میان زبان‌های کامپایلری و زبان‌های مفسری را بیان کنیم.کامپایلراگر تجربه‌ی کار کردن با زبان‌هایی مثل سی یا سی‌پلاس‌پلاس را داشته باشید، می‌دانید که پس از نوشتن کد منبع، برای اجرا باید آن را کامپایل کنید. زمانی که یک کد به زبان سی را کامپایل می‌کنید، کامپایلر سی از روی کد منبع شما، یک فایل شیٔ (Object file) درست می‌کند که ترجمه‌ی کد شما به زبان ماشین است. (همان فایل با پسوند o که تولید می‌شود) این فایل ترجمه‌ی کدمنبع به زبان ماشین است. سپس برای اجرا کافی‌ست فایل ترجمه‌شده را اجرا کنید. پس در این جا متوجه شدیم که یک کامپایلر در ابتدا کل کد منبع را می‌گیرد و آن را به کد ماشین ترجمه می‌کند.مفسرهنگام استفاده از زبان‌های مفسری مثل پایتون، مرحله‌ی کامپایل کد منبع وجود ندارد. پس از نوشتن کد برنامه‌نویس آن را اجرا می‌کند و مفسر خط به خط برنامه را به کد ماشین تبدیل می‌کند و اجرا می‌کند. توجه شود که مرحله‌ی کامپایل در این جا وجود ندارد. برنامه یک خط از کد را می‌خواند، به کد ماشین تبدیل می‌کند، سپس آن را اجرا می‌کند هنگامی که این خط در حال اجراست مفسر خط بعدی را به زبان ماشین ترجمه می‌کند تا مجددا ترجمه‌ی آن را برای اجرا آماده کند.تفاوت کامپایلر و مفسرمقایسهسرعتدر زبان‌های کامپایلری فقط یک بار کد به زبان ماشین ترجمه می‌شود و پس از آن می‌توان بارها آن را اجرا کرد. در زبان‌های مفسری اما برای هر بار اجرا پروسه‌ی خط به خط ترجمه کردن کد به زبان ماشین وجود دارد. به همین خاطر زبان‌های کامپایلری از زبان‌های مفسری سریع‌تر هستند.سهولتاز آن جا که زبان‌های مفسری خط به خط کد منبع را به زبان ماشین ترجمه می‌کنند برای برنامه‌نویسان تازه‌کار مناسب‌تر هستند. برنامه‌نویس تازه کار می‌تواند خط به خط خطاهای کد خود را تصحیح کند.دسترسیبرای اجرای کدهای نوشته‌شده به زبان‌های مفسری نیاز به مفسر آن کد روی سیستم داریم. برای اجرا کدهای نوشته‌شده به زبان‌های کامپایلری تنها نیاز به فایل کامپایل شده‌ی کد داریم. (البته در صورتی این کد قابل اجراست که روی ماشین با سیستم‌عامل مشابه اجرا شود.) برای مثال برای اجرای کدهای نوشته‌شده به زبان پایتون باید مفسر پایتون را در سیستم‌عامل موردنظر داشته باشید. اما برای اجرای یک برنامه به زبان سی تنها کافی‌ست یک بار کد را کامپایل کند سپس فایل کامپایل شده را روی سیستم‌عامل مورد نظر برده و اجرا کنید.منابع:https://en.wikipedia.org/wiki/Compilerhttps://en.wikipedia.org/wiki/Interpreter_(computing)</description>
                <category>دانیال</category>
                <author>دانیال</author>
                <pubDate>Fri, 07 Jun 2019 14:25:42 +0430</pubDate>
            </item>
                    <item>
                <title>فرق کپی سطحی  و کپی عمیق (Deep copy vs shallow copy)</title>
                <link>https://virgool.io/@danial.bidekani/%D9%81%D8%B1%D9%82-%DA%A9%D9%BE%DB%8C-%D8%B3%D8%B7%D8%AD%DB%8C-shallow-copy-%D9%88-%DA%A9%D9%BE%DB%8C-%D8%B9%D9%85%DB%8C%D9%82-deep-copy-nxereucntigj</link>
                <description>در زبان‌های برنامه‌نویسی هنگامی که نیاز باشد از یک متغیر کپی گرفته شود، معمولا دو راه معرفی می‌شود.یک) استفاده از کپی سطحی یا Shallow copyدو) استفاده از کپی عمیق یا Deep copyاما فرق این دو در چیست؟در کپی سطحی، یک متغیر ساخته می‌شود و به مکانی در حافظه، که مقدار متغیر قبلی در آن قرار گرفته است، اشاره می‌کند. پس اگر شما مقدار متغیر اول را تغییر دهید، متغیر دوم هم تغییر می‌کند. و همین‌طور اگر مقدار متغیر دوم را تغییر دهید، مقدار متغیر اول هم تغییر می‌کند.در کپی عمیق، یک متغیر ساخته می‌شود و مقدار متغیر قبلی در آن کپی می‌شود. توجه شود که در این جا پس از کپی کردن، اگر مقدار هر کدام از متغیرها را تغییر دهیم، تغییری در مقدار متغیر دیگر مشاهده نمی‌کنیم.یک مفسر پایتون باز کنید تا بهتر با این مفهوم آشنا شوید:حالا بحث این جاست که این کارها را چگونه می‌توان در پایتون انجام داد؟در پایتون سه حالت کپی کردن وجود دارد! بله سه حالت.حالت اول به صورت زیر است که کاملا کپی سطحی به حساب می‌آید:a = [1,2,3,4]
b = a
id(a)
id(b)
b[1] = 30
print(a)
print(b)در حالت دوم ابتدا یک شی ساخته می‌شود و سپس به تمام اجزای موجود در لیست اشاره می‌کند. (توجه کنید که مقادیر کپی نمی‌شوند.)import copy
a = [1,2,3,4]
b  = [5,6]
c = a+b
d = copy.copy(c)
id(c)
id(d)
c[0][1] = 12
print(c)
print(d)در حالت آخر که کپی عمیق نامیده می‌شود، پس از کپی دو متغیر به طور کامل از همدیگر جدا هستند و تغییر دادن یکی در دیگری اثری ندارد.import copy
a = [1,2,3,4]
b  = [5,6]
c = a+b
d = copy.deepcopy(c)
id(c)
id(d)
c[0][1] = 12
print(c)
print(d)</description>
                <category>دانیال</category>
                <author>دانیال</author>
                <pubDate>Fri, 17 May 2019 10:47:12 +0430</pubDate>
            </item>
            </channel>
</rss>