(নভেম্বর 23 '10 এ 19:48-এ জবাব)
আমি আসলেই বড় পাইথোনার নই - তবে আমি এই বাক্য গঠনটি একবার পেয়েছি, কোথা থেকে ভুলে গিয়েছি, তাই ভেবেছিলাম আমি এটি নথিটি দিয়েছি:
যদি আপনি sys.stdout.write
পরিবর্তে ব্যবহার করেন print
( পার্থক্য সত্ত্বেও, sys.stdout.write
যুক্তিগুলিতে একটি কার্য হিসাবে আর্গুমেন্ট গ্রহণ print
করে - যদিও হয় না ), তবে ওয়ান-লাইনারের জন্য, আপনি কমান্ডের ক্রমটি উল্টিয়ে এবং for
সেমিকোলন সরিয়ে, এবং কমান্ডটি বর্গক্ষেত্র বন্ধনীতে আবদ্ধ করা, অর্থাৎ:
python -c "import sys; [sys.stdout.write('rob\n') for r in range(10)]"
পাইথনে এই সিনট্যাক্সটি কীভাবে ডাকা হবে সে সম্পর্কে কোনও ধারণা নেই :)
আশাকরি এটা সাহায্য করবে,
চিয়ার্স!
(সম্পাদনা মঙ্গলবার এপ্রিল 9 20:57:30 2013) ঠিক আছে, আমি মনে করি অবশেষে আমি এক- লাইনারে এই বর্গাকার বন্ধনীগুলি কী সম্পর্কে পেয়েছি; এগুলি হল "তালিকা বোঝার" (স্পষ্টতই); পাইথন ২.7 এ প্রথম এটি দ্রষ্টব্য:
$ STR=abc
$ echo $STR | python -c "import sys,re; a=(sys.stdout.write(line) for line in sys.stdin); print a"
<generator object <genexpr> at 0xb771461c>
সুতরাং বৃত্তাকার বন্ধনী / প্রথম বন্ধনে কমান্ডটি "জেনারেটর অবজেক্ট" হিসাবে দেখা যায়; যদি আমরা কল করে এটির মাধ্যমে "পুনরাবৃত্তি" করি next()
- তবে প্রথম বন্ধনের অভ্যন্তরের কমান্ডটি কার্যকর করা হবে (আউটপুটে "abc" নোট করুন):
$ echo $STR | python -c "import sys,re; a=(sys.stdout.write(line) for line in sys.stdin); a.next() ; print a"
abc
<generator object <genexpr> at 0xb777b734>
আমরা যদি এখন স্কোয়ার ব্র্যাকেট ব্যবহার করি - নোট করুন যে next()
কমান্ডটি কার্যকর করার জন্য আমাদের কল করার দরকার নেই , এটি অবিলম্বে নিয়োগের পরে কার্যকর করা হয়; তবে পরে পরিদর্শন জানায় যে a
হয় None
:
$ echo $STR | python -c "import sys,re; a=[sys.stdout.write(line) for line in sys.stdin]; print a"
abc
[None]
বর্গাকার বন্ধনী মামলার জন্য এটি অনুসন্ধানের জন্য খুব বেশি তথ্য রাখে না - তবে আমি এই পৃষ্ঠায় হোঁচট খেয়েছি যা আমি মনে করি যা ব্যাখ্যা করে:
পাইথন টিপস এবং কৌশল - প্রথম সংস্করণ - পাইথন টিউটোরিয়াল | ড্রিম.ইন.কোড :
যদি আপনি মনে করেন, একক লাইন জেনারেটরের মানক বিন্যাসটি বন্ধনীগুলির ভিতরে লুপের জন্য 'এক ধরণের এক লাইনের'। এটি একটি 'এক-শট' পুনরাবৃত্তিযোগ্য অবজেক্ট তৈরি করবে যা এমন এক বস্তু যা আপনি কেবল এক দিকেই পুনরাবৃত্তি করতে পারেন এবং যা আপনি একবারে পৌঁছানোর পরে পুনরায় ব্যবহার করতে পারবেন না।
একটি 'তালিকা বোঝার' প্রায় নিয়মিত এক-লাইন জেনারেটর হিসাবে একই দেখাচ্ছে, নিয়মিত বন্ধনীগুলি (-) - বর্গাকার বন্ধনী দ্বারা প্রতিস্থাপন করা হয় - []। আলিস্ট বোধগম্যতার প্রধান অগ্রগতি হ'ল 'তালিকা' তৈরি করে, বরং 'এক-শট' পুনরাবৃত্তিযোগ্য বস্তুর পরিবর্তে, যাতে আপনি এর মধ্য দিয়ে পিছনে যেতে পারেন, উপাদান যুক্ত করতে পারেন, সাজান ইত্যাদি can
এবং প্রকৃতপক্ষে এটি একটি তালিকা - এটি কার্যকর হওয়ার সাথে সাথে এটি কেবলমাত্র তার প্রথম উপাদানটি হয়ে যায়:
$ echo $STR | python -c "import sys,re; print [sys.stdout.write(line) for line in sys.stdin].__class__"
abc
<type 'list'>
$ echo $STR | python -c "import sys,re; print [sys.stdout.write(line) for line in sys.stdin][0]"
abc
None
তালিকা বোধগম্যতা অন্যথায় 5 নথিভুক্ত করা হয় । তথ্য কাঠামো: 5.1.4। তালিকা সমঝোতা - পাইথন v2.7.4 ডকুমেন্টেশন হিসাবে "তালিকা বোধগম্য তালিকা তৈরির একটি সংক্ষিপ্ত উপায় প্রদান করে"; সম্ভবতঃ, সেখানেই তালিকাগুলির সীমিত "এক্সিকিউটেবিলিটি" ওয়ান-লাইনারে কার্যকর হয়।
ঠিক আছে, আশা করি আমি এখানে খুব ভয়াবহভাবে ছাপ ফেলিনি ...
EDIT2: এবং এখানে দুটি এক-লাইন কমান্ড লাইন রয়েছে দু-নেস্টেড ফর লুপ সহ; উভয়ই "তালিকা উপলব্ধি" বর্গাকার বন্ধনী মধ্যে আবদ্ধ:
$ echo $STR | python -c "import sys,re; a=[sys.stdout.write(line) for line in sys.stdin]; b=[sys.stdout.write(str(x)) for x in range(2)] ; print a ; print b"
abc
01[None]
[None, None]
লক্ষ্য করুন যে দ্বিতীয় "তালিকার" b
এখন দুটি উপাদান রয়েছে, যেহেতু এটির লুপের জন্য স্পষ্টভাবে দু'বার দৌড়ানো হয়েছে; তবে sys.stdout.write()
উভয় ক্ষেত্রেই ফলাফল ছিল (স্পষ্টতই) None
।