পাইলিন্ট থেকে ঘর-থেকে-লুপ সতর্কতা


91

নিম্নলিখিত কোডের জন্য:

for sort_key, order in query_data['sort']:
    results.sort(key=lambda k: get_from_dot_path(k, sort_key),
                 reverse=(order == -1))

পাইলট একটি ত্রুটি রিপোর্ট করেছে:

লুপটিতে সেল ভেরিয়েবল সাজ্ট_কি সংজ্ঞায়িত করা হয়েছে (সেল-ভের-থেকে-লুপ)

এখানে কি ঘটছে কেউ ইঙ্গিত দিতে পারে? পাইলট উত্স কোড থেকে বর্ণনাটি হ'ল:

ক্লোজারে ব্যবহৃত একটি ভেরিয়েবল একটি লুপে সংজ্ঞায়িত করা হয়। এটি ক্লোজড-ওভার ভেরিয়েবলের জন্য একই মান ব্যবহার করে সমস্ত বন্ধ হয়ে যাবে।

তবে এর অর্থ কী, তা আমার কাছে কোনও ক্লু নেই। কেউ কি সমস্যার উদাহরণ দিতে পারে?


কী ধরণের বস্তু results? সাধারণ তালিকা? অন্যকিছু?
কেভিন

4
দেখুন উদাঃ stackoverflow.com/q/12423614/3001761
jonrsharpe

@ কেভিন উদাহরণস্বরূপ ফলাফল = [{কী: মান}, {কী: মান} ...]
xis

ঠিক আছে. সেক্ষেত্রে আমি চেপারের সাথে একমত হয়েছি যে এখানে সতর্কতার বিষয়ে আপনাকে চিন্তা করার দরকার নেই।
কেভিন

উত্তর:


102

ফাংশনটি আসলে যখন ডাকা হয় তখন sort_keyদেহের নামটির সন্ধান করা lambdaহবে, সুতরাং এটি sort_keyসম্প্রতি দেখতে পাবে মানটি । যেহেতু আপনি sortতাত্ক্ষণিকভাবে কল করছেন , sort_keyফলস্বরূপ ফাংশন অবজেক্টটি ব্যবহার করার আগে এর মান পরিবর্তন হবে না, তাই আপনি নিরাপদে সতর্কতাটিকে উপেক্ষা করতে পারেন। এটি নিঃশব্দ করার জন্য, আপনি এখানে sort_keyএকটি প্যারামিটারের ডিফল্ট মান করতে পারেন lambda:

results.sort(key=lambda k, sk=sort_key: get_from_dot_path(k, sk),
             reverse=(order == -1))

4
আমি সতর্কতা উপেক্ষা করার পরিবর্তে সমস্যাটি সমাধানের পক্ষে ভুল করছি। যদি সম্ভব হয় তবে আমি key=partial(get_from_dot_path, foo=sort_key)ল্যাম্বডা এক্সপ্রেশনের পরিবর্তে ব্যবহার করব (ধরে নিলাম এমন কোনও প্যারামিটার নাম রয়েছে যা fooদ্বারা get_from_dot_pathআপনি কীওয়ার্ড আর্গুমেন্টের জন্য ব্যবহার করতে পারেন; partialকেবলমাত্র বাম দিক থেকে অবস্থানগত পরামিতিগুলি পূরণ করার অনুমতি দেয়)।
চিপনার

4
আহ আমি বুঝতে পারি নি এটি ঠিক করে দেবে, আমি ভেবেছিলাম তারা সমতুল্য; সেক্ষেত্রে আমি একমত
টিমডিয়েলস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.