python - সহজ ভাষায় পাইথন ৩ pdf




কেন পাইথন lambdas দরকারী? (18)

আমি পাইথন lambdas খুঁজে বের করার চেষ্টা করছি। লাম্বা কি সেই "আকর্ষণীয়" ভাষাগুলির মধ্যে একটি যা বাস্তব জীবনে ভুলে যাওয়া উচিত?

আমি নিশ্চিত যে কিছু প্রান্তের ক্ষেত্রে এটি প্রয়োজন হতে পারে তবে এটির অস্পষ্টতা দেওয়া হয়েছে, ভবিষ্যতের প্রকাশগুলিতে এটির সম্ভাব্যতা (আমার সংজ্ঞাগুলি বিভিন্ন সংজ্ঞাগুলির উপর ভিত্তি করে) এবং কম কোডিং স্বচ্ছতা - এটি হওয়া উচিত অবহেলিত?

এটি আমাকে সি টাইপের বর্ধিত (বাফার ওভারফ্লো) মনে করিয়ে দেয় - অন্য ক্ষেত্রের মানগুলি সেট করতে উপরের পরিবর্তনশীল এবং ওভারলোডিংয়ের দিকে নির্দেশ করে। এটি একটি techie showmanship কিন্তু রক্ষণাবেক্ষণ কোডার দুঃস্বপ্ন সাজানোর মত মনে হয়।


আমি শুধু পাইথন শুরু করছি এবং প্রথমেই ল্যামডায় মাথা ঘোরাচ্ছিলাম- এটি সম্পর্কে কিছুটা সময় লেগেছিল।

উল্লেখ্য যে এটি একটি নিন্দা নয়। প্রত্যেকেরই একটি ভিন্ন সেট আছে যা সহজেই আসে না।

লাম্বা কি সেই 'মজার' ভাষা আইটেমগুলির মধ্যে একটি যা বাস্তব জীবনে ভুলে যাওয়া উচিত?

না।

আমি নিশ্চিত যে কিছু প্রান্তের ক্ষেত্রে এটি প্রয়োজন হতে পারে নিশ্চিত, কিন্তু এটি অস্পষ্টতা দেওয়া,

এটা অস্পষ্ট নয়। গত দুই টি দল আমি কাজ করেছি, সবাই এই বৈশিষ্ট্যটি সর্বদা ব্যবহার করে।

ভবিষ্যতের প্রকাশনায় এটির সম্ভাব্যতাকে পুনরায় সংজ্ঞায়িত করা হচ্ছে (আমার ধারনা এটি বিভিন্ন সংজ্ঞাগুলির উপর ভিত্তি করে)

আমি পাইথন-এ এটি পুনরায় সংজ্ঞায়িত করার কোন গুরুতর প্রস্তাবনা দেখিনি, কয়েক বছর আগে ক্লোজার সেম্যান্টিকগুলি ফিক্স করার পরেও।

এবং কমে কোডিং স্বচ্ছতা - এড়ানো উচিত?

আপনি এটি সঠিকভাবে ব্যবহার করছেন, এটা কম স্পষ্ট নয়। বিপরীতভাবে, আরো ভাষা গঠন উপলব্ধ থাকার স্বচ্ছতা বৃদ্ধি করে

এটি আমাকে সি টাইপের ওভারফ্লোিং (বাফার ওভারফ্লো) মনে করিয়ে দেয় - উপরের ভেরিয়েবল এবং ওভারলোডিংয়ের দিকে নির্দেশ করে অন্য ক্ষেত্রের মানগুলি সেট করতে ... একটি টেকি শোম্যানশিপের মতো কিন্তু রক্ষণাবেক্ষণ কোডার দুঃস্বপ্ন।

Lambda বাফার overflow মত? কি দারুন. আপনি যদি মনে করেন যে এটি "রক্ষণাবেক্ষণের দুঃস্বপ্ন" বলে মনে করেন তবে আপনি কিভাবে ল্যাম্বা ব্যবহার করছেন তা কল্পনা করতে পারবেন না।


Lambdas গভীরভাবে কার্যকরী প্রোগ্রামিং শৈলী লিঙ্কযুক্ত হয়। কিছু তথ্য ফাংশন প্রয়োগ করে এবং ফলাফলগুলি মার্জ করে আপনি সমস্যার সমাধান করতে পারেন এমন ধারণাটি গুগল তার বেশিরভাগ অ্যালগরিদমগুলি বাস্তবায়নের জন্য ব্যবহার করে।

কার্যকরী প্রোগ্রামিং শৈলীতে লেখা প্রোগ্রামগুলি সহজে সমান্তরাল হয় এবং অতএব আধুনিক বহু-কোর মেশিনগুলির সাথে আরও বেশি গুরুত্বপূর্ণ হয়ে উঠছে। তাই সংক্ষিপ্ত, না আপনি তাদের ভুলবেন না করা উচিত।


আপনি Lambda ফাংশন সম্পর্কে কথা বলছেন? মত

lambda x: x**2 + 2*x - 5

যারা জিনিস আসলে বেশ দরকারী। পাইথন কার্যকরী প্রোগ্রামিং নামক প্রোগ্রামিংয়ের একটি স্টাইল সমর্থন করে যেখানে আপনি অন্য কাজগুলিতে ফাংশনগুলি প্রেরণ করতে পারেন। উদাহরণ:

mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])

[3, 6, 9] থেকে [3, 6, 9] , মূল তালিকার সেই উপাদানগুলিকে [3, 6, 9] mult3 সেট করে। এটি ছোট (এবং, কোনটি যুক্তিযুক্ত, সুস্পষ্ট হতে পারে)

def filterfunc(x):
    return x % 3 == 0
mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])

অবশ্যই, এই বিশেষ ক্ষেত্রে, আপনি তালিকা বোঝার মতো একই জিনিস করতে পারেন:

mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]

(অথবা এমনকি range(3,10,3) ), তবে আরও অনেক বেশি পরিশীলিত ব্যবহার ক্ষেত্রে রয়েছে যেখানে আপনি একটি তালিকা বোঝার ব্যবহার করতে পারবেন না এবং ল্যাম্বা ফাংশনটি কিছু লেখার সংক্ষিপ্ত উপায় হতে পারে।

  • অন্য ফাংশন থেকে একটি ফাংশন ফিরে

    >>> def transform(n):
    ...     return lambda x: x + n
    ...
    >>> f = transform(3)
    >>> f(4)
    7

    এটি প্রায়ই প্যাথন এর সজ্জাকারীদের মতো ফাংশন র্যাপার তৈরি করতে ব্যবহৃত হয়।

  • reduce() সঙ্গে একটি পুনরাবৃত্ত ক্রম উপাদান মিশ্রন reduce()

    >>> reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
    '1, 2, 3, 4, 5, 6, 7, 8, 9'
  • একটি বিকল্প কী দ্বারা সাজানো

    >>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
    [5, 4, 6, 3, 7, 2, 8, 1, 9]

আমি নিয়মিত lambda ফাংশন ব্যবহার। এটি ব্যবহার করার জন্য আমাকে কিছু সময় লেগেছিল, কিন্তু অবশেষে আমি বুঝতে পেরেছিলাম যে তারা ভাষাটির একটি মূল্যবান অংশ।


আপনি lambda সঙ্গে অনেক কিছু করতে পারেন আপনি নামযুক্ত ফাংশন বা তালিকা এবং জেনারেটরের এক্সপ্রেশন সঙ্গে ভাল করতে পারেন।

ফলস্বরূপ, অধিকাংশ অংশে আপনি কেবলমাত্র যে কোনও পরিস্থিতিতেই এটির মধ্যে একটি হওয়া উচিত (সম্ভবত ইন্টারেক্টিভ ইন্টারপ্রেটারে লেখা স্ক্র্যাচ কোডের জন্য)।


আমি lambda একই কাজ যে ফাংশন একটি তালিকা জন্য দরকারী, কিন্তু বিভিন্ন পরিস্থিতিতে জন্য। মোজিলা বহুবচন নিয়ম মত

plural_rules = [
    lambda n: 'all',
    lambda n: 'singular' if n == 1 else 'plural',
    lambda n: 'singular' if 0 <= n <= 1 else 'plural',
    ...
]
# Call plural rule #1 with argument 4 to find out which sentence form to use.
plural_rule[1](4) # returns 'plural'

আপনি যদি তাদের সকলের জন্য একটি ফাংশন সংজ্ঞায়িত করতে চান তবে আপনি এটির শেষে পাগল হয়ে যাবেন। এছাড়াও plural_rule_1 , plural_rule_2 , ইত্যাদি ফাংশন নামগুলির সাথে এটি সুন্দর হবে না এবং আপনি যখন পরিবর্তনশীল ফাংশন plural_rule_2 উপর নির্ভর করে তখন এটি eval() হবে।


আমি কয়েক বছর ধরে পাইথন ব্যবহার করছি এবং আমি এমন কোন ক্ষেত্রেই দৌড়াতে যাচ্ছি যেখানে আমি lambda প্রয়োজন । প্রকৃতপক্ষে, tutorial হিসাবে, এটি শুধুমাত্র সিন্ট্যাকটিক চিনির জন্য।


আমি পাইথনের ল্যাম্বার বিশেষ বাস্তবায়ন নিয়ে কথা বলতে পারি না, তবে সাধারণ লম্বা ফাংশনগুলি সত্যিই কার্যকরী। তারা কার্যকরী প্রোগ্রামিং একটি মূল কৌশল (সম্ভবত এমনকি কৌশল), এবং তারা বস্তু ভিত্তিক প্রোগ্রামে খুব ব্যবহার্য। নির্দিষ্ট ধরনের সমস্যার জন্য, তারা সবচেয়ে ভাল সমাধান, তাই অবশ্যই ভুলে যাওয়া উচিত নয়!

আমি আপনাকে Closures এবং ম্যাপ ফাংশন (এটি পাইথন ডক্সের লিঙ্কগুলি, কিন্তু কার্যকরী গঠনগুলিকে সমর্থন করে এমন প্রায় প্রতিটি ভাষাতে বিদ্যমান) এটি পড়ার জন্য আপনাকে পরামর্শ দেয়।


আমি লাম্বা দূরে যেতে সন্দেহ। অবশেষে এটি অপসারণ করার চেষ্টা ছেড়ে দেওয়ার বিষয়ে Guido এর পোস্ট দেখুন। এছাড়াও সংঘাত একটি রূপরেখা দেখুন।

আপনি পাইথনের কার্যকরী বৈশিষ্ট্যগুলির পিছনে চুক্তি সম্পর্কে আরও ইতিহাসের জন্য এই পোস্টটি দেখতে পারেন: http://python-history.blogspot.com/2009/04/origins-of-pythons-functional-features.html

অদ্ভুতভাবে, মানচিত্র, ফিল্টার এবং ল্যাম্বা এবং অন্যান্য কার্যকরী বৈশিষ্ট্যগুলি মূলত উত্সাহিত যে ফাংশনগুলি হ্রাস করে, তা সামগ্রিকভাবে তালিকা বোঝার এবং জেনারেটর এক্সপ্রেশন দ্বারা সরিয়ে দেওয়া হয়েছে। প্রকৃতপক্ষে, পাইথন 3.0 এর অন্তর্নির্মিত ফাংশনগুলির তালিকা থেকে হ্রাস ফাংশনটি সরানো হয়েছে। (তবে, ল্যাম্বা, মানচিত্র বা ফিল্টার অপসারণের বিষয়ে অভিযোগগুলিতে পাঠানোর প্রয়োজন নেই: তারা স্থিত। :-)

আমার নিজের দুটি সেন্ট: স্পষ্টতই যতদূর স্বচ্ছতা যায়, তেমনই লম্বা মূল্যবান। সাধারণত Lambda অন্তর্ভুক্ত করা হয় না যে একটি আরো পরিষ্কার সমাধান আছে।


একটি Lambda একটি অত্যন্ত গুরুত্বপূর্ণ বিমূর্তন প্রক্রিয়া অংশ যা উচ্চ আদেশ ফাংশন সঙ্গে কাজ করে। তার মান সঠিক বোঝার জন্য, অনুগ্রহ করে অ্যাবেলসন এবং সুসমানের উচ্চমানের পাঠগুলি দেখুন এবং SICP বইটি SICP

এই আধুনিক সফটওয়্যার ব্যবসায়ের মধ্যে প্রাসঙ্গিক সমস্যা, এবং কখনও জনপ্রিয় হয়ে উঠছে।


দুই লাইন সারাংশ:

  1. Closures : খুব দরকারী। তাদের শিখুন, তাদের ব্যবহার করুন, তাদের ভালোবাসুন।
  2. পাইথন এর lambda কীওয়ার্ড: অপ্রয়োজনীয়, মাঝে মাঝে দরকারী। যদি আপনি নিজের সাথে কিছু দূরবর্তী জটিল কাজ করেন, এটি সরান এবং একটি বাস্তব ফাংশন সংজ্ঞায়িত করুন।

প্রথম অভিনন্দন যে lambda চিন্তা পরিচালিত। আমার মতে এই সঙ্গে কাজ করার জন্য সত্যিই শক্তিশালী গঠন। কার্যকরী প্রোগ্রামিং ভাষাগুলির দিকে এই দিনগুলির প্রবণতা নিশ্চয়ই একটি নির্দেশক যে এটি এড়াতে হবে না এবং এটি নিকট ভবিষ্যতে পুনরায় সংজ্ঞায়িত করা হবে।

আপনি শুধু একটু ভিন্ন চিন্তা করতে হবে। আমি শীঘ্রই আপনি এটা ভালবাসা নিশ্চিত। কিন্তু আপনি শুধুমাত্র পাইথন সঙ্গে মোকাবিলা যদি সতর্কতা অবলম্বন করা আবশ্যক। কারণ লাম্বা একটি বাস্তব বন্ধন নয়, এটি কোনভাবেই "ভাঙা" হয়: পাইথন লম্বডা ভাঙা হয়


ল্যামদাসগুলি আসলে খুব শক্তিশালী গঠন যা কার্যকরী প্রোগ্রামিংগুলিতে ধারণাগুলি থেকে থাকে এবং এটি এমন কিছু যা পাইথনের নিকট ভবিষ্যতে সহজেই সংশোধিত, পুনর্নির্ধারিত বা সরানো যাবে না। তারা আপনাকে আরও শক্তিশালী কোড লিখতে সহায়তা করে কারণ এটি আপনাকে পরামিতি হিসাবে ফাংশনগুলি পাস করতে দেয়, এভাবে প্রথম শ্রেণীর নাগরিক হিসাবে কাজ করে।

Lambdas বিভ্রান্তিকর করতে ঝোঁক, কিন্তু একবার একটি কঠিন বোঝার প্রাপ্ত হয়, আপনি এই মত পরিষ্কার মার্জিত কোড লিখতে পারেন:

squared = map(lambda x: x*x, [1, 2, 3, 4, 5])

কোডের উপরের লাইনটি তালিকার সংখ্যাগুলির স্কোয়ারগুলির একটি তালিকা প্রদান করে। অবশেষে, আপনি এটি করতে পারেন:

def square(x):
    return x*x

squared = map(square, [1, 2, 3, 4, 5])

এটি পূর্বের কোডটি সংক্ষিপ্ত, এবং এটি বিশেষ করে সত্যই যদি আপনি মানচিত্র ফাংশন (অথবা কোনও অনুরূপ ফাংশন যা একটি পরামিতি হিসাবে একটি ফাংশন নেয়) ব্যবহার করতে চান। এই কোড আরও স্বজ্ঞাত এবং মার্জিত করে তোলে।

এছাড়াও, যেমন ডেভিড জাস্লাভস্কি তার উত্তরের উল্লেখ করেছেন, তালিকা বোঝার সবসময়ই যাওয়ার উপায় নেই, বিশেষত যদি আপনার তালিকার কিছু অস্পষ্ট গাণিতিক উপায়ে মানগুলি পেতে হয়।

আরো বাস্তব দৃষ্টিকোণ থেকে, সম্প্রতি আমার জন্য lambdas বৃহত্তম সুবিধা একটি জিআইআই এবং ইভেন্ট চালিত প্রোগ্রামিং হয়েছে। আপনি যদি Tkinter মধ্যে callbacks একটি চেহারা নিতে, তারা আর্গুমেন্ট হিসাবে গ্রহণ সব ঘটনা যে তাদের triggered। যেমন

def define_bindings(widget):
    widget.bind("<Button-1>", do-something-cool)

def do-something-cool(event):
    #Your code to execute on the event trigger

এখন যদি আপনার কিছু আর্গুমেন্ট পাস পাস? মাউস-ক্লিকের সমন্বয়গুলি সংরক্ষণ করতে 2 টি আর্গুমেন্ট পাস করার মতো সহজ কিছু। আপনি সহজেই এটির মতো এটি করতে পারেন:

def main():
    # define widgets and other imp stuff
    x, y = None, None
    widget.bind("<Button-1>", lambda event: do-something-cool(x, y))

def do-something-cool(event, x, y):
    x = event.x
    y = event.y
    #Do other cool stuff

এখন আপনি যুক্তিযুক্ত হতে পারেন যে এটি গ্লোবাল ভেরিয়েবল ব্যবহার করে করা যেতে পারে, কিন্তু আপনি কি সত্যিই আপনার মাথাটি মেমরি পরিচালনা এবং ফুটো সম্পর্কে উদ্বেগজনকভাবে বানাতে চান বিশেষ করে যদি গ্লোবাল ভেরিয়েবলটি শুধুমাত্র একটি নির্দিষ্ট জায়গায় ব্যবহার করা হয়? যে শুধু দরিদ্র প্রোগ্রামিং শৈলী হবে।

সংক্ষেপে, lambdas দুর্দান্ত এবং কখনও underestimated করা উচিত নয়। পাইথন lambdas যদিও LISP lambdas হিসাবে একই নয় (যা আরো শক্তিশালী), কিন্তু আপনি সত্যিই তাদের সঙ্গে অনেক জাদু উপাদান করতে পারেন।


Lambda ফাংশন এটি একটি নন আমলাতান্ত্রিক উপায় ফাংশন তৈরি।

এটাই. উদাহরণস্বরূপ, আসুন আপনি আপনার প্রধান ফাংশন আছে এবং বর্গমূল মান প্রয়োজন। আসুন ঐতিহ্যগত ভাবে ও লাম্বা পথটি দেখি:

ঐতিহ্যগত উপায়:

def main():
...
...
y = square(some_number)
...
return something

def square(x):
    return x**2

Lambda উপায়:

def main():
...
square = lambda x: x**2
y = square(some_number)
return something

পার্থক্যটা দেখ?

Lambda ফাংশন তালিকা বোঝার বা মানচিত্র মত তালিকা সঙ্গে খুব ভাল যান। আসলে, তালিকা বোঝা এটি lambda ব্যবহার করে নিজেকে প্রকাশ করার একটি "পাইথনিক" উপায়। উদা:

>>>a = [1,2,3,4]
>>>[x**2 for x in a]
[1,4,9,16]

আসুন সিনট্যাক্সের প্রতিটি উপাদানের অর্থ কী দেখায়:

[]: "আমাকে একটি তালিকা দিন"

এক্স ** 2: "এই নতুন জন্মগ্রহণ ফাংশন ব্যবহার করে"

একটি এক্স জন্য: "একটি প্রতিটি উপাদান মধ্যে"

ওটা কি সুবিধাজনক? এই মত ফাংশন তৈরি করা। এর lambda ব্যবহার করে আবার লিখুন:

>>> square = lambda x: x**2
>>> [square(s) for x in a]
[1,4,9,16]

এখন আসুন ম্যাপ ব্যবহার করি, যা একই জিনিস, কিন্তু আরো ভাষা-নিরপেক্ষ। মানচিত্র 2 আর্গুমেন্ট লাগে:

(i) একটি ফাংশন

(ii) একটি পুনরাবৃত্তিযোগ্য

এবং আপনাকে একটি তালিকা দেয় যেখানে প্রতিটি উপাদানটি এটির ফাংশনটি পুনরাবৃত্তির প্রতিটি উপাদানতে প্রয়োগ করা হয়।

সুতরাং, মানচিত্র ব্যবহার করে আমরা হব:

>>> a = [1,2,3,4]
>>> squared_list = map(lambda x: x**2, a)

আপনি lambdas এবং ম্যাপিং মাস্টার, আপনি তথ্য এবং একটি সংক্ষিপ্ত ভাবে manipulate করার জন্য একটি মহান ক্ষমতা থাকবে। Lambda ফাংশন neither obscure nor code স্বচ্ছতা গ্রহণ করা হয়। কিছু নতুন সঙ্গে কঠিন কিছু বিভ্রান্ত না। একবার আপনি তাদের ব্যবহার শুরু করলে, আপনি এটি খুব স্পষ্ট দেখতে পাবেন।


Lambambas ব্যবহার করার জন্য একটি দরকারী ক্ষেত্রে দীর্ঘ তালিকা বোঝার পঠনযোগ্যতা উন্নত করা হয় । এই উদাহরণে loop_dicস্বচ্ছতার জন্য সংক্ষিপ্ত কিন্তু কল্পনা loop_dicকরা খুব দীর্ঘ। আপনি যদি শুধুমাত্র একটি সাধারণ মান ব্যবহার করেন iযা তার মূল্যের Lambda সংস্করণ পরিবর্তে অন্তর্ভুক্ত করে তবে আপনি এটি পাবেন NameError

>>> lis = [{"name": "Peter"}, {"name": "Josef"}]

>>> loop_dic = lambda i: {"name": i["name"] + " Wallace" }
>>> new_lis = [loop_dic(i) for i in lis]

>>> new_lis
[{'name': 'Peter Wallace'}, {'name': 'Josef Wallace'}]

পরিবর্তে

>>> lis = [{"name": "Peter"}, {"name": "Josef"}]

>>> new_lis = [{"name": i["name"] + " Wallace"} for i in lis]

>>> new_lis
[{'name': 'Peter Wallace'}, {'name': 'Josef Wallace'}]

আমি lambdaপ্যারামিটার অন্তর্ভুক্ত যে callbacks তৈরি করতে ব্যবহার করুন । এটি একই কার্যকারিতা সঞ্চালনের জন্য একটি পদ্ধতি লেখার চেয়ে একটি লম্বাতে একটি লাম্বার লেখা।

উদাহরণ স্বরূপ:

import imported.module

def func():
    return lambda: imported.module.method("foo", "bar")

উল্টোদিকে:

import imported.module

def func():
    def cb():
        return imported.module.method("foo", "bar")
    return cb

আমি আপনাকে একটি উদাহরণ দিতে পারি যেখানে আমি আসলে lambda গুরুতর প্রয়োজন। আমি একটি গ্রাফিকাল প্রোগ্রাম তৈরি করছি, যেখানে একটি ফাইলটিতে ডান ক্লিক ক্লিক করে এবং এটি তিনটি বিকল্পের একটি নির্ধারণ করে। এটি দেখা গেছে যে টিকিটারে (যে GUI ইন্টারফেসিং প্রোগ্রাম আমি এটি লিখছি), যখন কেউ একটি বোতাম টিপবে, তখন এটি আর্গুমেন্টগুলিতে কোন কমান্ডটি বরাদ্দ করা যাবে না। তাই যদি আমি বিকল্পগুলির মধ্যে একটি বেছে নিই এবং আমার পছন্দের ফলাফলটি চাইতাম:

print 'hi there'

তারপর কোন বড় চুক্তি। কিন্তু যদি আমার কোনও নির্দিষ্ট বিবরণের জন্য আমার পছন্দ প্রয়োজন। উদাহরণস্বরূপ, যদি আমি পছন্দ A নির্বাচন করি, এটি এমন একটি ফাংশনকে কল করে যা কিছু আর্গুমেন্ট গ্রহণ করে যা পছন্দসই A, B বা C তে নির্ভর করে, TKinter এইটিকে সমর্থন করতে পারে না। আসলেই এই আশেপাশে পেতে লামদা একমাত্র বিকল্প ছিল ...


আমি ডেভিড মার্টেজের বইটি আজ পাইথনের পাঠ্য প্রক্রিয়াকরণটি পড়তে শুরু করেছি। অ্যাপারেন্ডিক এ-তে বর্ণিত ব্যাখ্যা অনুসারে ল্যামডার প্রথম অধ্যায়ের উদাহরণগুলির সাথে তার মোটামুটিভাবে বর্ণিত বর্ণনা রয়েছে, তবে আমার জন্য পৃষ্ঠাটি বন্ধ করে দিয়েছে (অবশেষে) এবং হঠাৎ আমি তাদের মূল্য বুঝতে পেরেছি। তার ব্যাখ্যাটি আপনার জন্য কাজ করবে না এবং আমি এখনও আবিষ্কারের পর্যায়ে আছি তাই আমি নিম্নলিখিতগুলি ব্যতীত এই প্রতিক্রিয়াগুলি যোগ করার চেষ্টা করব না: আমি পাইথনতে নতুন নই, আমি ওপ ল্যামদাসের জন্য নতুন ছিলাম আমার জন্য সংগ্রাম এখন আমি মার্টেজ পড়ি, আমি মনে করি আমি তাদের পেয়েছি এবং আমি তাদেরকে খুব দরকারী হিসাবে দেখছি মনে হচ্ছে তারা প্রোগ্রামিংয়ের জন্য ক্লিনার পদ্ধতির অনুমতি দেয়।

তিনি পাইথনের জিনকে পুনরুত্পাদন করেন, যার একটি লাইন জটিল থেকে জটিল। লাম্বডাসের সাথে একটি অ-ওওপি প্রোগ্রামার পড়ার কোড হিসাবে (এবং গত সপ্তাহে তালিকা বোঝার পর্যন্ত) আমি ভাবলাম - এটা কি সহজ? ।অবশেষে আজ বুঝতে পেরেছি যে এই বৈশিষ্ট্যগুলি কোডটিকে আরও বেশি পাঠযোগ্য করে তুলতে পারে, এবং বিকল্পের চেয়ে বোঝার যোগ্য-যা কোনও ধরণের একটি লুপ। আমি বুঝতে পেরেছিলাম যে আর্থিক বিবৃতিগুলির মতো পাইথন নবীন ব্যবহারকারীর জন্য ডিজাইন করা হয়নি, বরং এটি এমন ব্যবহারকারীর জন্য ডিজাইন করা হয়েছে যা শিক্ষিত হতে চায়। আমি এই ভাষা কিভাবে শক্তিশালী বিশ্বাস করতে পারবেন না। যখন এটি আমার উপর (অবশেষে) Lambbas এর উদ্দেশ্য এবং মূল্য প্রদর্শিত হয়, আমি প্রায় 30 টি প্রোগ্রাম ছিনতাই করতে চাই এবং উপযুক্ত যেখানে lambdas নির্বাণ শুরু।


আমি প্রায়শই এটি ব্যবহার করি, প্রধানত একটি নল বস্তু হিসাবে বা আংশিকভাবে একটি ফাংশন পরামিতি আবদ্ধ।

এখানে উদাহরণ:

নল বস্তু প্যাটার্ন বাস্তবায়ন:

{
    DATA_PACKET: self.handle_data_packets
    NET_PACKET: self.handle_hardware_packets
}.get(packet_type, lambda x : None)(payload)

পরামিতি বাঁধাই জন্য:

বলুন যে আমার নিম্নলিখিত API আছে

def dump_hex(file, var)
    # some code
    pass

class X(object):
    #...
    def packet_received(data):
        # some kind of preprocessing
        self.callback(data)
    #...

তারপর, যখন আমি দ্রুত প্রাপ্ত তথ্যটিকে একটি ফাইলে ডাম্প করতে চাই না তখন আমি তা করি:

dump_file = file('hex_dump.txt','w')
X.callback = lambda (x): dump_hex(dump_file, x)
...
dump_file.close()




closures