সর্বাধিক পাইথোনিক কলযোগ্য উত্পাদন ঘটায়?


11

ক্লাসটি collections.defaultdictএকটি ডিফল্ট কারখানা নেয়, একটি ডিফল্ট মান উত্পন্ন করতে ব্যবহৃত হয়।

পছন্দ dictমতো অবজেক্টের মধ্যে থাকা মানগুলি যদি ডিফল্ট হয় Falseতবে উদাহরণটি তৈরি করা যেতে পারে:

d_false = defaultdict(bool)

একটি ডিফল্ট মান জন্য একই অর্জন সবচেয়ে অজগর উপায় কি True?

অন্য পদগুলিতে, কোনও স্ট্যান্ডার্ড কলযোগ্য বস্তুটি কী প্রত্যাবর্তন হয় Trueযা সম্পর্কিত হিসাবে স্বতন্ত্রভাবে ব্যবহৃত হয় bool?

অবশ্যই, কারখানাটি ল্যাম্বডা এক্সপ্রেশন হিসাবে নির্মিত হতে পারে:

d_true = defaultdict(lambda: True)

তবে এটি হুইলটিকে নতুন করে আনতে পারে।


6
lambda: Trueযতক্ষণ আপনার সেই ডিফল্টডিক্টিকে আচারের দরকার নেই ততক্ষণ ঠিক।
অরণ-ফে

হুম, আমি মনে করি সব builtin টাইপ কনস্ট্রাকটর একটি falsy মান: int() == 0, list() == [], str() == '', ইত্যাদি তাই আমি এই কাজ করতে একটি প্রমিত উপায় মনে করি না।
wjandrea

2
lambda: valueকনস্ট্রাক্ট কথ্য Pythonic উপায় একটি স্ট্যাটিক ডিফল্ট মান সঙ্গে একটি অভি গঠন করা হয়; কোনও ফাংশন ফিরে আসার সহজ উপায় আমি জানি না True
মার্ক রিড


আমার আগের মন্তব্যে অনুসরণ করে object()সত্যবাদী - এটি কার্যকর কিনা তা নিশ্চিত নন
wjandrea

উত্তর:


9

ভাল, আপনি করতে পারেন

d = defaultdict(True.__bool__)

তবে আমি ব্যক্তিগতভাবে এই সাথে যেতে হবে lambda: True


4
@ অরণ-ফ্রে যেমন উপরে বলেছে, আপনি pickleল্যাম্বডায় কোনও ডিফল্টডিক্ট্ট করতে পারবেন না ; সুতরাং যদি এটি বিবেচনা করা হয়, True.__bool__তবে যাওয়ার উপায়। তবে এটি অবশ্যই একটি কুরুচিপূর্ণ সমাধান। (এছাড়াও, পাইথন ২.x এ উপলব্ধ নয়, যা ইওএল না হওয়া পর্যন্ত সম্ভবত এক মাসের সাথে সম্ভবত খুব বেশি কিছু আসে না ...)
মার্ক রিড

4

আমরা এর partialবিকল্প হিসাবে ব্যবহার করতে পারি lambda:

from functools import partial
from collections import defaultdict

d_true = defaultdict(partial(bool, True))

print(d_true['bona fide'])

(যা পাইথন 2 বন্ধুত্বপূর্ণও))


3

আপনি যদি কেবল "সত্যবাদী" মান চান তবে আপনি এটি ব্যবহার করতে পারেন object; কনস্ট্রাক্টর এমন একটি বস্তু ফেরত দেয় যা বুলিয়ান প্রসঙ্গে সত্য হিসাবে মূল্যায়ন করে। তবে আপনি যদি আসল বুলিয়ান মানটি চান তবে Trueআমি lambda: Trueকনস্ট্রাক্টের চেয়ে ভালতর কোনও উপায় জানি না ।

অরণ-ফ্রে যেমন উপরে বলেছেন, যদিও আপনি pickleকোনও ডিফল্টডিক্ট করতে পারবেন না যার কারখানাটি একটি lambda; যদি এটি বিবেচনা করা হয় তবে আমি আন্দ্রেজ ক্যাসিলির সমাধানটি নিয়ে যেতে চাই True.__bool__

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