coding-style - এমএল - html এর সুবিধা



একটি সূচক পরিবর্তনশীল ছাড়া এন বার কিছু করতে Pythonic উপায়? (6)

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

প্রতিদিন আমি পাইথন আরো বেশি ভালবাসি।

আজ, আমি কিছু কোড লিখছি যেমন:

for i in xrange(N):
    do_something()

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

সুতরাং ... প্রশ্ন হল: আপনি কি আরও সহজ (পাইথনিক) সুন্দর উপায়ে এই সহজ কাজটি করবেন?


_ পরিবর্তনশীল ব্যবহার করুন, যখন আমি এই question জানতে পেরেছি, উদাহরণস্বরূপ:

# A long way to do integer exponentiation
num = 2
power = 3
product = 1
for _ in xrange(power):
    product *= num
print product

আমি বিভিন্ন উত্তর সত্যিই মার্জিত (বিশেষ করে অ্যালেক্স মার্টেলির) খুঁজে পেয়েছি কিন্তু আমি প্রথম হাতের কাজটি পরিমাপ করতে চেয়েছিলাম, তাই আমি নিম্নলিখিত স্ক্রিপ্টটি রান্না করেছি:

from itertools import repeat
N = 10000000

def payload(a):
    pass

def standard(N):
    for x in range(N):
        payload(None)

def underscore(N):
    for _ in range(N):
        payload(None)

def loopiter(N):
    for _ in repeat(None, N):
        payload(None)

def loopiter2(N):
    for _ in map(payload, repeat(None, N)):
        pass

if __name__ == '__main__':
    import timeit
    print("standard: ",timeit.timeit("standard({})".format(N),
        setup="from __main__ import standard", number=1))
    print("underscore: ",timeit.timeit("underscore({})".format(N),
        setup="from __main__ import underscore", number=1))
    print("loopiter: ",timeit.timeit("loopiter({})".format(N),
        setup="from __main__ import loopiter", number=1))
    print("loopiter2: ",timeit.timeit("loopiter2({})".format(N),
        setup="from __main__ import loopiter2", number=1))

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

standard:  0.8398549720004667
underscore:  0.8413165839992871
loopiter:  0.7110594899968419
loopiter2:  0.5891903560004721

তাই মানচিত্র ব্যবহার করে লুপের মানের প্রায় 30% এবং মার্টেলির উপর অতিরিক্ত 19% এরও বেশি উন্নতি সাধিত হয়।


আমি শুধু for _ in range(n) ব্যবহার করি, এটি সরাসরি বিন্দুতে। এটি পাইথন 2 এর বিশাল সংখ্যাগুলির জন্য সমগ্র তালিকা তৈরি করতে যাচ্ছে, তবে যদি আপনি পাইথন 3 ব্যবহার করেন তবে এটি একটি সমস্যা নয়।


লুপ যখন একটি সহজ সম্পর্কে কি?

while times > 0:
    do_something()
    times -= 1

আপনি ইতিমধ্যে পরিবর্তনশীল আছে; কেন এটা ব্যবহার করবেন না?


xrange(N) উপর looping তুলনায় একটি সামান্য দ্রুত পদ্ধতির:

import itertools

for _ in itertools.repeat(None, N):
    do_something()




python