PYTHONLEARNME Telegram 274
در زبان آلمانی بین دو جمله زیر تفاوت هست:
Shakespeare hat die Geschichte von Hamlet geschrieben.
شکسپیر، داستان هملت را نوشت.
Ein Mann namens Shakespeare schrieb die Geschichte von Hamlet.
مردی به نام شکسپیر، داستان هملت را نوشت.

میگن، شکسپیر اون شخص نیست، بلکه ی اسمه که روی اون شخص گذاشته شده.
اون شخص میتونه هر اسمی داشته باشه.

ولی در انگلیسی این ی بحث لفظی و بی معنیه و تفاوت معنایی بینشون نیست.

به متن زیر دقت کنید:
  “Suppose I say to Fat, or Kevin says to Fat, “You did not experience God. You merely experienced something with the qualities and aspects and nature and powers and wisdom and goodness of God.” This is like the joke about the German proclivity toward double abstractions; a German authority on English literature declares, “Hamlet was not written by Shakespeare; it was merely written by a man named Shakespeare.” In English the distinction is verbal and without meaning, although German as a language will express the difference (which accounts for some of the strange features of the German mind).”

Valis, p71 (Book-of-the-Month-Club Edition)

حالا ربطش به برنامه‌نویسی چیه؟
دو رویکرد بسیار شناخته شده و قابل درک برای انتقال پارامتر در زبان‌های برنامه‌نویسی مختلف، عبارتند از:
pass by reference = بر اساس مرجع
pass by value = بر اساس مقدار

بعنوان مثال، کد زیر رو در نظر بگیرید:
def reassign(lst: list) -> list:
lst = [0, 1]
return lst

def append(lst: list) -> list:
lst.append(1)
return lst

lst = [0]
print(reassign(lst))
print(append(lst))

حالا به این جمله دقت کنید:
«هملت توسط شکسپیر نوشته نشد، بلکه توسط مردی به نام شکسپیر نوشته شد.»

حالا بصورت کد:
a = []

اینجا [] ی لیست تهی و a هم متغیری که به این لیست تهی اشاره داره، ولی a ی لیست تهی نیست.
pass by reference:
در اینصورت، خود متغیر به تابع ارسال میشه و مقدار داخلش هم به تابع ارسال میشه.
مثل ی جعبه که با محتویات داخلش ارسال میشه.
اگه داخل تابع مقدارش رو تغییر بدیم، بیرون تابع هم مقدارش تغییر میکنه.

pass by value:
در اینصورت تابع ی کپی از اون متغیر رو دریافت میکنه که مقادیرش تو ی خونه دیگه حافظه رم نگهداری میشن.
مثل ی سری مدارک که داخل ی جعبه بودن، اومدیم ی کپی ازشون گرفتیم، گذاشتیم داخل ی جعبه دیگه و ارسالش کردیم.
اینجا با تغییر مقادیر داخل تابع، مقادیرش بیرون تابع تغییر نمیکنه.

pass by object reference value(Pythonic):
در اینصورت تابع ی رفرنس به اون آبجکت دریافت میکنه و میتونه به مقادیر اون آبجکت تو حافظه رم دسترسی داشته باشه، ولی خود اون جعبه‌ای که مقادیر توش هستن رو دریافت نمیکنه، بلکه تابع میاد جعبه خودش رو میسازه و ی متغیر جدید برای خودش داره که اینم به همون خونه‌ای که متغیر بیرونی اشاره میکرد اشاره میکنه.
متغیرها متفاوتن، گرچه اسمشون یکی باشه، اما رفرنس هر دو یکیه.
به تصویر بالا، shallow copy دقت کنید تا متوجه بشید چی میگم.
حالا اگه مقادیر رو داخل تابع تغییر بدیم، مقادیر بیرون تابع هم تغییر میکنن.

تو پست بعدی سعی میکنم ی جمع بندی درمورد shallow copy و deep copy صحبت کنم باز.

با تشکر از:
https://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as-explained-by-philip-k-dick/



tgoop.com/pythonlearnme/274
Create:
Last Update:

در زبان آلمانی بین دو جمله زیر تفاوت هست:
Shakespeare hat die Geschichte von Hamlet geschrieben.
شکسپیر، داستان هملت را نوشت.
Ein Mann namens Shakespeare schrieb die Geschichte von Hamlet.
مردی به نام شکسپیر، داستان هملت را نوشت.

میگن، شکسپیر اون شخص نیست، بلکه ی اسمه که روی اون شخص گذاشته شده.
اون شخص میتونه هر اسمی داشته باشه.

ولی در انگلیسی این ی بحث لفظی و بی معنیه و تفاوت معنایی بینشون نیست.

به متن زیر دقت کنید:
  “Suppose I say to Fat, or Kevin says to Fat, “You did not experience God. You merely experienced something with the qualities and aspects and nature and powers and wisdom and goodness of God.” This is like the joke about the German proclivity toward double abstractions; a German authority on English literature declares, “Hamlet was not written by Shakespeare; it was merely written by a man named Shakespeare.” In English the distinction is verbal and without meaning, although German as a language will express the difference (which accounts for some of the strange features of the German mind).”

Valis, p71 (Book-of-the-Month-Club Edition)

حالا ربطش به برنامه‌نویسی چیه؟
دو رویکرد بسیار شناخته شده و قابل درک برای انتقال پارامتر در زبان‌های برنامه‌نویسی مختلف، عبارتند از:
pass by reference = بر اساس مرجع
pass by value = بر اساس مقدار

بعنوان مثال، کد زیر رو در نظر بگیرید:
def reassign(lst: list) -> list:
lst = [0, 1]
return lst

def append(lst: list) -> list:
lst.append(1)
return lst

lst = [0]
print(reassign(lst))
print(append(lst))

حالا به این جمله دقت کنید:
«هملت توسط شکسپیر نوشته نشد، بلکه توسط مردی به نام شکسپیر نوشته شد.»

حالا بصورت کد:
a = []

اینجا [] ی لیست تهی و a هم متغیری که به این لیست تهی اشاره داره، ولی a ی لیست تهی نیست.
pass by reference:
در اینصورت، خود متغیر به تابع ارسال میشه و مقدار داخلش هم به تابع ارسال میشه.
مثل ی جعبه که با محتویات داخلش ارسال میشه.
اگه داخل تابع مقدارش رو تغییر بدیم، بیرون تابع هم مقدارش تغییر میکنه.

pass by value:
در اینصورت تابع ی کپی از اون متغیر رو دریافت میکنه که مقادیرش تو ی خونه دیگه حافظه رم نگهداری میشن.
مثل ی سری مدارک که داخل ی جعبه بودن، اومدیم ی کپی ازشون گرفتیم، گذاشتیم داخل ی جعبه دیگه و ارسالش کردیم.
اینجا با تغییر مقادیر داخل تابع، مقادیرش بیرون تابع تغییر نمیکنه.

pass by object reference value(Pythonic):
در اینصورت تابع ی رفرنس به اون آبجکت دریافت میکنه و میتونه به مقادیر اون آبجکت تو حافظه رم دسترسی داشته باشه، ولی خود اون جعبه‌ای که مقادیر توش هستن رو دریافت نمیکنه، بلکه تابع میاد جعبه خودش رو میسازه و ی متغیر جدید برای خودش داره که اینم به همون خونه‌ای که متغیر بیرونی اشاره میکرد اشاره میکنه.
متغیرها متفاوتن، گرچه اسمشون یکی باشه، اما رفرنس هر دو یکیه.
به تصویر بالا، shallow copy دقت کنید تا متوجه بشید چی میگم.
حالا اگه مقادیر رو داخل تابع تغییر بدیم، مقادیر بیرون تابع هم تغییر میکنن.

تو پست بعدی سعی میکنم ی جمع بندی درمورد shallow copy و deep copy صحبت کنم باز.

با تشکر از:
https://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as-explained-by-philip-k-dick/

BY 🧑‍💻PythonDev🧑‍💻




Share with your friend now:
tgoop.com/pythonlearnme/274

View MORE
Open in Telegram


Telegram News

Date: |

With the administration mulling over limiting access to doxxing groups, a prominent Telegram doxxing group apparently went on a "revenge spree." The public channel had more than 109,000 subscribers, Judge Hui said. Ng had the power to remove or amend the messages in the channel, but he “allowed them to exist.” Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group. The optimal dimension of the avatar on Telegram is 512px by 512px, and it’s recommended to use PNG format to deliver an unpixelated avatar.
from us


Telegram 🧑‍💻PythonDev🧑‍💻
FROM American