পাইথনের ত্রুটিগুলি কী কী? [বন্ধ]


147

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

সুতরাং, আপনার মতে কী হবে, পাইথনের উদ্দেশ্যগত অসুবিধা।

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


50
আমি মনে করি এটি একটি সহায়ক সাবজেক্টিভ প্রশ্ন এবং এটি বন্ধ করা লজ্জাজনক হবে।
এরিক উইলসন

25
এখানে একটি পাইথন-ফ্যানবয় বলে মনে হচ্ছে যারা কেবলমাত্র অ্যান্টি-পাইথনের সমস্ত উত্তরকে নীচে ফেলে।
zvrba

2
@ টিএমএন: এটি এখনও হোয়াইটস্পেসকে টোকেন হিসাবে বিবেচনা করছে, কেবল তাদের ফিরিয়ে দিচ্ছে না - এবং পাইথনের ব্যাকরণটি ঠিক এটিই করে।

9
@ রোজার: এসও-তে সম্মেলনটি ডাউনটাতে মন্তব্য করা। যেহেতু এটি বিষয়গত মতামতের জন্য একটি সাইট , তাই আমি ডাউনভোটগুলির কোনও কারণ দেখতে পাচ্ছি না, এসএসপি। ডাব্লু / ও মন্তব্য। সুতরাং, আমি আমার "নাম কলিং" পাশে আছি।
zvrba

8
@ জেভিআরবা: ডাউনভোটগুলি এখনও বরাবরের মতোই "দরকারী নয়" অর্থ।

উত্তর:


109

আমি পাইথনকে কিছুটা নিয়মিত ব্যবহার করি এবং সামগ্রিকভাবে আমি এটিকে খুব ভাল ভাষা হিসাবে বিবেচনা করি। তবুও, কোনও ভাষাই নিখুঁত নয়। ব্যক্তিগতভাবে আমার কাছে গুরুত্বের দিক থেকে এখানে রয়েছে ত্রুটিগুলি:

  1. এটা ধীরগতির. আমি বলতে চাইছি সত্যই, ধীর। অনেক সময় এটি কিছু যায় আসে না, তবে এর স্পষ্টতই অর্থ হল those পারফরম্যান্স-সমালোচনামূলক বিটগুলির জন্য আপনার অন্য ভাষা দরকার।

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

  3. এটি কয়েকটি বৈশিষ্ট্য হারিয়েছে যা লাইব্রেরি / জেনেরিক কোডের জন্য কার্যকর হতে পারে এবং আইএমএইচও হ'ল অস্বাস্থ্যকর চূড়ান্তভাবে নেওয়া সরলতা। আমি সবচেয়ে গুরুত্বপূর্ণ যেগুলি সম্পর্কে ভাবতে পারি সেগুলি হ'ল ব্যবহারকারীর দ্বারা সংজ্ঞায়িত মান ধরণের প্রকারগুলি (আমি অনুমান করছি এগুলি মেটাক্লাস যাদু দ্বারা তৈরি করা যেতে পারে তবে আমি কখনও চেষ্টা করি নি), এবং রেফ ফাংশন প্যারামিটার।

  4. এটি ধাতব থেকে অনেক দূরে। থ্রেডিং আদিম বা কার্নেল কোড বা কিছু লিখতে হবে? শুভকামনা।

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

  6. ডকুমেন্টেশনটি পিএইচপি এবং জাভা এর মতো ভাষার মতো ভাল নয় যার দৃ corporate় কর্পোরেট ব্যাকিং রয়েছে।


60
@ ক্যাসি, আমাকে একমত হতে হবে না সূচকটি ভয়াবহ - এটির withবিবৃতি বা পদ্ধতিগুলি সন্ধান করার চেষ্টা করুন list। টিউটোরিয়ালে আচ্ছাদিত যেকোনো কিছুই মূলত অন্বেষণযোগ্য। সি ++ এর জন্য মাইক্রোসফ্টের ডকুমেন্টেশনগুলির সাথে আমার আরও ভাল ভাগ্য রয়েছে।
মার্ক রান্সম

17
প্রায় 5 - কেবল পাইফ্লেক্স ব্যবহার করুন। ঠিক এই ত্রুটিগুলি ধরার জন্য এটি লেখা হয়েছে।
আলেকজান্ডার সলোভ্যভ

4
গতি সম্পর্কিত: পাইপাইয়ের উত্থানের সাথে, পাইথন ব্যবহারকারী এখন কেবল জেআইটি-সংকলক (একটি আপাতত পাইথন 3 ব্যবহারকারী এবং সি এক্সটেনশন মডিউল ব্যবহারকারী সিপাইেক্সট দ্বারা পরিচালিত নয়) দ্বারা নির্মিত একটি দোভাষী ব্যবহার করে গতি সমস্যাটি পরিচালনা করতে সক্ষম হবেন এই বিকল্পটি নেই)।
ncoghlan

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

5
ধাতু থেকে দূরত্ব কীভাবে যুক্তি হতে পারে? পাইথন কি কখনও নিজেকে সিস্টেমের ভাষা হিসাবে গড়ে তুলেছিল?
ক্যানলাস

66

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

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

যাইহোক, আমি এই সত্যটি দলিল করতে পারি না। পাইথনের কোনও কিছুই আমাকে ওভাররাইটিং বা ভেরিয়েবলগুলি পুনরায় ব্যবহার করতে বাধা দেয় না।

সংক্ষেপে, আমি ভাষাতে দুটি কীওয়ার্ড রাখতে চাই: varএবং let। যদি আমি সেই কোনওটির দ্বারা ঘোষণা না করে একটি ভেরিয়েবল লিখি তবে পাইথনের একটি ত্রুটি বাড়াতে হবে। তদতিরিক্ত, letভেরিয়েবলগুলি কেবল পঠনযোগ্য হিসাবে ঘোষণা করে, যখন varভেরিয়েবলগুলি "সাধারণ" হয়।

এই উদাহরণ বিবেচনা করুন:

x = 42    # Error: Variable `x` undeclared

var x = 1 # OK: Declares `x` and assigns a value.
x = 42    # OK: `x` is declared and mutable.

var x = 2 # Error: Redeclaration of existing variable `x`

let y     # Error: Declaration of read-only variable `y` without value
let y = 5 # OK: Declares `y` as read-only and assigns a value.

y = 23    # Error: Variable `y` is read-only

লক্ষ্য করুন যে প্রকারগুলি এখনও অন্তর্নিহিত (তবে letভেরিয়েবলগুলি সমস্ত উদ্দীপনা এবং উদ্দেশ্যগুলির জন্য স্থিরভাবে টাইপ করা হয় যেহেতু এগুলি নতুন মানের কাছে প্রত্যাবর্তন করা যায় না, তবে varভেরিয়েবলগুলি তখনও গতিশীলভাবে টাইপ করা যেতে পারে)।

শেষ অবধি, সমস্ত পদ্ধতির যুক্তিগুলি স্বয়ংক্রিয়ভাবে হওয়া উচিত let, অর্থাত কেবল সেগুলি পঠনযোগ্য। নীচের আইডিয়ামটি ব্যতীত প্যারামিটারটি সংশোধন করার কোনও ভাল কারণ নেই:

def foo(bar = None):
    if bar == None: bar = [1, 2, 3]

এটি কিছুটা আলাদা আইডিয়াম দ্বারা প্রতিস্থাপন করা যেতে পারে:

def foo(bar = None):
    let mybar = bar or [1, 2, 3]

6
আমি তাই আশা করি পাইথনের একটি "ভার" বিবৃতি থাকুক। আপনার বক্তব্যটি (খুব ভাল) কারণ ছাড়াও কোডটি পড়া খুব সহজ করে তোলে কারণ তখন আপনি সমস্ত পরিবর্তনীয় ঘোষণার জন্য পৃষ্ঠাটি স্ক্যান করতে পারবেন।
ঠাট্টা করছেন

25
যেন অজগর বিকাশকারীরা অতীতের পাঠকে উপেক্ষা করে। ভেরিয়েবল ঘোষণা না করা, ফাংশন ঘোষণা না করা 1950 এর দশকে প্রথমত করা একটি ভুল। টাইপগুলি খুঁজে পাওয়া শক্ত হওয়ার ফলস্বরূপ যেগুলি বাগ খুঁজে পাওয়া যায় সেগুলি 1950 এর দশকে আশ্চর্যজনকভাবে যথেষ্ট পরিমাণে তৈরি হয়েছিল। এই ভাষার ভুল সময় এবং সময় আবার করা হয়েছে (এবং পরে সংশোধন করা হয়েছে)। ভেরিয়েবল ঘোষণা করা কোনও বিশাল বোঝা নয়। এটি আমার বাট একাধিকবার সংরক্ষণ করেছে। আমি অনিবার্যভাবে use strict;এবং যে use warnings;কোনও আকারের স্ক্রিপ্টে পার্ল। পাইথন অনেকগুলি ডিবাগিং এইডগুলির বিকাশকারীকে ছিনিয়ে নিয়েছে।
ডেভিড হামেন

19
@ ডেভিড, অজগর থেকে ন্যায়সঙ্গত হওয়ার জন্য, আপনি যদি এমন কোনও ভেরিয়েবল অ্যাক্সেস করার চেষ্টা না করেন তবে এটি একটি ব্যতিক্রম বাড়াবে। যে ভাষাগুলির ঘোষণার অভাব রয়েছে তাদের অনেকগুলিই একরকম ডিফল্ট মান ফিরে আসবে। ফলস্বরূপ, পাইথনের সংস্করণগুলি তখন খুব কম সমস্যাযুক্ত ones
উইনস্টন এওয়ার্ট

1
@ yi_H প্রস্তাবটি পিছনের দিকে সামঞ্জস্যপূর্ণ নয় - বা এমনকি একটি বাস্তব প্রস্তাব নয়। প্রশ্নটি ছিল, "পাইথনের ত্রুটিগুলি কী কী" ... ভাল, না থাকা varএবং let(বা অনুরূপ প্রক্রিয়া) একটি অসুবিধা। অন্যভাবে বলুন: আমি যদি পাইথনের ডিজাইনার হতাম তবে আমি এই জাতীয় কিছু করতাম। এটি বলেছিল , যখন আপনি একটি বিশেষ প্যাকেজ লোড করবেন তখন ( ভবিষ্যতের সংস্করণগুলিতে এটি অন্তর্ভুক্ত থাকতে পারে __future__)। বলুন import strict,। যদিও এটি ঘটবে না, কারণ এটি সিনট্যাক্টিকাল হ্যাকগুলির প্রয়োজন ...
কনরাড রুডলফ

3
+1 আরও 'কার্যকরী-জাতীয়' প্রোগ্রামিংয়ের ক্ষমতা যুক্ত করার জন্য।
ইভান প্লেইস

44

আমার মূল অভিযোগটি থ্রেডিং যা বিশ্ব পরিস্থিতিতে অনুবাদক লকের কারণে " জাভা, সি এবং অন্যান্যদের তুলনায়) অনেক পরিস্থিতিতে পারফর্মেন্ট নয় ( " পাইথন জিআইএল এর ভিতরে "(পিডিএফ লিঙ্ক) আলাপ দেখুন)

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

আমি ডকুমেন্টেশনের সমালোচনার সাথে সত্যই দ্বিমত পোষণ করছি, আমি মনে করি যে এটি সমস্ত বড় ভাষাগুলির বাইরে না থাকলে এটি বেশিরভাগের চেয়ে দুর্দান্ত এবং ভাল।

এছাড়াও আপনি রানটাইম বাগের অনেকগুলি পাইলট চালাতে পারেন


2
পাইলট জন্য +1। আমি এটি সম্পর্কে অজ্ঞ ছিল। পরের বার পাইথনে একটি প্রকল্প করব, আমি এটি ব্যবহার করে চেষ্টা করব। এছাড়াও, আপনি যদি রেফারেন্স সিপিথন প্রয়োগের পরিবর্তে জাইথন ​​ব্যবহার করেন তবে মাল্টিথ্রেডিং ভাল কাজ করবে বলে মনে হচ্ছে। ওটিও জাইথন ​​সিপিথনের চেয়ে কিছুটা ধীর গতির, সুতরাং এটি উদ্দেশ্যটিকে আংশিকভাবে পরাস্ত করতে পারে।
dsimcha

3
থ্রেডিং ভাল সমর্থন করে না? থ্রেডিং গ্রন্থাগারগুলি ২.১ এর আগে থেকেই রয়েছে।
rox0r

2
আমি জানি থ্রেডিং সমর্থন রয়েছে তবে জাভা বা সি এর তুলনায় জিআইএল আপনার কার্য সম্পাদনকে কমিয়ে দেবে। একারণে থ্রেডিংয়ের তুলনায় মাল্টিপ্রসেসিং মডিউল পছন্দ করা হয়।
সে.এম.সি.গিন্টি

2
ডকুমেন্টেশনটি এটি সন্ধান করার জন্য পরিচালনা করতে পারলে ভাল। জিগলিং জাভা ক্লাস পাইথনের চেয়ে অনেক সহজ।
ব্রেন্ডন লং

@ ক্যাসি আমি উত্তরে শব্দটি স্পষ্ট করে দিয়েছি, যেহেতু থ্রেডিং সমর্থনযোগ্য, কেবল কিছু অদ্ভুত অভিনয় প্রদর্শন করেছে (
ডক্সে

28

তর্কসাপেক্ষভাবে , স্ট্যাটিক টাইপিংয়ের অভাব, যা রানটাইম ত্রুটির নির্দিষ্ট শ্রেণির পরিচয় দিতে পারে, হাঁসের টাইপিংয়ের যোগ করা নমনীয়তার পক্ষে মূল্য নেই।


5
এটি সঠিক, যদিও পাইচেকারের মতো সরঞ্জাম রয়েছে যা সি / জাভা এর মতো ভাষায় কোনও সংকলক ত্রুটিগুলি পরীক্ষা করতে পারে।
অলিভার ওয়েইলার

24
গতিশীল টাইপিং একটি সচেতন ডিজাইনের সিদ্ধান্ত, কোনও অপূর্ণতা নয়।
অনুপস্থিতি

14
এটি জাভাটির দুর্বলতা বলার মতোই হ'ল গতিশীল টাইপিংয়ের অভাব।
এমএকে

12
@ মিসিংফাক্টর, @ এমকে, স্পষ্টতই হাঁসের টাইপিংয়ের উদ্দেশ্য ছিল intended তবে বেশিরভাগ ডিজাইনের সিদ্ধান্তগুলি উদ্দেশ্যমূলক সুবিধাগুলি এবং ত্রুটিগুলি প্রবর্তন করে। যুক্ত কোড নমনীয়তা গতিশীল টাইপিংয়ের একটি সুবিধা, এবং সম্ভাব্য রানটাইম ত্রুটিগুলির অতিরিক্ত ক্লাসগুলি একটি অপূর্ণতা। বিষয়গত অংশটি বৈশিষ্ট্যটির পক্ষে মূল্যবান কিনা তা।
জ্যাকব

6
স্ট্যাটিক টাইপিংয়ের অভাবে প্রোগ্রামারদের কোডটি লেখার পক্ষে সহজ করে তোলে যা রানটাইম ত্রুটি রয়েছে। সি # তে, int foo = 4; Console.Write(foo.Length);সংকলন করে না, সুতরাং ত্রুটিযুক্তভাবে "ইন্ট 32 এর সম্পত্তি দৈর্ঘ্য নেই" ভুলভাবে প্রকাশিত সফ্টওয়্যারটিতে প্রবেশ করতে পারে না। অজগরটিতে, যদি না আপনি এর মতো ত্রুটিগুলি অনুসন্ধান করার জন্য alচ্ছিক মাধ্যমিক সরঞ্জামগুলি চালনা করেন না, যে কোডটি অবজেক্টের অ-বিদ্যমান সদস্যদের অ্যাক্সেস করে সেগুলি রানটাইম ত্রুটির কারণে শেষ না হওয়া অবধি সনাক্ত করা যেতে পারে।
জ্যাকব 16

27

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

সম্পাদনা:

যখন আমি বলি পাইথনের অবজেক্ট-ভিত্তিক অংশগুলি "বোল্ট অন" বোধ করে, তখন আমি বলতে চাইছি যে, কখনও কখনও ওওপি পক্ষটি বরং অসঙ্গত বোধ করে। রুবিকে ধরুন, উদাহরণস্বরূপ: রুবিতে, সমস্ত কিছু একটি বস্তু এবং আপনি পরিচিত obj.methodসিনট্যাক্স ব্যবহার করে একটি পদ্ধতি কল করেন (অবশ্যই ওভারলোডেড অপারেটরগুলি বাদ দিয়ে); পাইথনে, সমস্ত কিছুও একটি বস্তু, তবে কিছু পদ্ধতি যা আপনি ফাংশন হিসাবে কল করেন; অর্থাত্, আপনি __len__কোনও দৈর্ঘ্য ফেরত দেওয়ার জন্য ওভারলোড করে থাকেন, তবে অন্যান্য ভাষায় প্রচলিত len(obj)বেশি পরিচিত (এবং ধারাবাহিক) পরিবর্তে এটি ব্যবহার করে কল করুন obj.length। আমি জানি এই নকশার সিদ্ধান্তের পিছনে কারণ রয়েছে তবে আমি সেগুলি পছন্দ করি না।

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


17
স্ব প্যারামিটারটি কেবল অন্য ভাষাগুলিকে অন্তর্নিহিত বলে স্পষ্ট করে দিচ্ছে। এই ভাষাগুলিতে স্পষ্টভাবে একটি "স্ব" পরামিতি রয়েছে।

13
@ রজার পেট: হ্যাঁ, তবে "স্ব" এর সুস্পষ্ট প্রয়োজন এক প্রকার বিরক্তিকর (এবং আমি যুক্তি দিয়ে বলব, একটি ফাঁসী বিমূর্ততা)। এটি ইচ্ছাকৃতভাবে ডিজাইনের সিদ্ধান্ত হিসাবে আসে নি, তবে পাইথনের "অদ্ভুত" স্কোপিংয়ের নিয়মের কারণে। আমি নিবন্ধটি দ্রুত খুঁজে পাচ্ছি না, তবে গুডো ভ্যান রসুমের একটি ইমেল পোস্ট রয়েছে যা "স্ব" পরামিতি কেন প্রয়োজন তা খুব সুন্দরভাবে ব্যাখ্যা করেছে।
মিপাদি

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

3
@ মিপাডি: আপডেটটির আরও ভাল যুক্তি রয়েছে (সুতরাং আমি ডাউনভোটটি সরিয়ে ফেলব), তবে আপনি যদি অপারেটর হিসাবে লেনটি দেখেন যা আপনি ওভারলোড করেন, এটি পাইথনের ওও বেশি। পাইথন কীভাবে বার্তা প্রেরণে ভুল হয়ে যায় তার একটি উদাহরণ বা যুক্তি দেখতে পছন্দ করবেন।

8
সুস্পষ্ট স্ব হ'ল পদ্ধতিগুলি কেবল ফাংশন (এবং, উইনস্টন যেমন উল্লেখ করেছেন, অন্তর্নিহিত স্থানীয় পরিবর্তনশীল ঘোষণাপত্র) এর একটি প্রবৃদ্ধি। আপনি এই নকশার সিদ্ধান্তটি পছন্দ না করতে পারেন তবে OOP কে এমন ভাষায় "বোল্টড" বলে কল করা যেখানে রানটাইমের সময় অবজেক্ট হিসাবে সবকিছু অ্যাক্সেসযোগ্য নির্বোধ is
ncoghlan

19

পাইথন সম্পর্কে যে জিনিসগুলি আমি পছন্দ করি না:

  1. থ্রেডিং (আমি জানি এটি ইতিমধ্যে উল্লেখ করা হয়েছে, তবে প্রতিটি পোস্টে উল্লেখ করার মতো)
  2. মাল্টি-লাইন বেনামি ফাংশনগুলির জন্য কোনও সমর্থন নেই ( lambdaকেবলমাত্র একটি এক্সপ্রেশন থাকতে পারে)।
  3. একটি সাধারণ তবে শক্তিশালী ইনপুট রিডিং ফাংশন / শ্রেণির অভাব (যেমন cinবা scanfসি ++ এবং সি বা Scannerজাভাতে)।
  4. সমস্ত স্ট্রিং ডিফল্টরূপে ইউনিকোড নয় (তবে পাইথন 3 এ সংশোধন করা হয়েছে)।

5
(2) সম্পর্কিত, আমি মনে করি এটি নেস্টেড ক্রিয়াকলাপ হওয়ার সম্ভাবনা দ্বারা অফসেট।
কনরাড রুডল্ফ

3
@ কনরাড রুডল্ফ মাল্টি-লাইন ল্যাম্বডাসের পরিবর্তে নেস্টেড ফাংশনগুলির সাথে আমার প্রধান কোয়ামটি হল পড়ার ক্রমটি অদলবদল হয়ে যায়।
কুকিফোর্তুন

2
@Wkschwartz: raw_inputএবং 'sys.stdin' হ'ল সুন্দর উদাসীন। তারা বিন্যাসিত ইনপুট (যেমন "% d:% d:% d"% (সময়, মিনিট, সেকেন্ড) সময় মতো পড়ার জন্য) সমর্থন করে না। এখনও পর্যন্ত পাইথনের স্ক্যানফ (সি তে) বা স্ক্যানার (জাভা) এর কার্যকারিতাটির কাছে যাওয়ার কিছু নেই anything
মাক

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

1
@ লিমস্কোডার: আপনি যদি সহজে ইউনিকোড দেখতে চান তবে টিসিএল চেষ্টা করুন। কয়েক বছর আগে আমাকে টিসিএল থেকে পাইথনে স্যুইচ করতে হয়েছিল এবং ছেলেটি আমি আশ্চর্য হয়েছিল যে পাইথনের অজগরটির ইউনিকোড সমর্থন তুলনার ক্ষেত্রে কীভাবে রয়েছে। এটি টিসিএলে সত্যই অদৃশ্য এবং অজগরটিতে একটি বড় ব্যথা।
ব্রায়ান ওকলি

18

পরিবর্তনীয় ডেটা ধরণের সাথে ডিফল্ট যুক্তি।

def foo(a, L = []):
    L.append(a)
    print L

>>> foo(1)
[1]
>>> foo(2)
[1, 2]

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

সম্পাদনা: এটি কোনও বিশাল সমস্যা নয়, তবে যখন কোনও কিছু ডক্সে উল্লেখ করার দরকার পড়ে, তখন এর সাধারণ অর্থ এটি একটি সমস্যা। এটি প্রয়োজন হবে না।

def foo(a, L = None):
    if L is None:
        L = []
    ...

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


আমি এ সম্পর্কে প্রচুর অভিযোগ দেখতে পাচ্ছি, তবে কেন লোকেরা ডিফল্ট যুক্তি হিসাবে খালি তালিকা (ফাংশনটি সংশোধন করে) রাখার জোর দেয়? আসলেই কি এত বড় সমস্যা? অর্থাৎ, এটি কি আসল সমস্যা?
মার্টিন ভিলকান্স

8
এটি অন্তত বিস্ময়ের নীতি লঙ্ঘন করে। কেউ কল করতে পারে না যে কোনও ফাংশনের পরামিতি টিকে থাকবে।
aib

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

@ জোরানপাভলভিক কৌতূহল থেকে দূরে, কেন এটি স্ক্রিপ্টিং ভাষা হওয়ার ফলাফল? ডেটা যখন আবদ্ধ থাকে এবং কারণ তালিকাটি পারস্পরিক পরিবর্তনযোগ্য (তবে এটি দুটি জিনিস যা সাধারণত ভাল হয় তবে একসাথে একত্রিত হওয়ার সময় খারাপ হওয়া শেষ হয়) এর সাথে সমস্যা বলে মনে হচ্ছে। ফাংশন তৈরির সময় আপনি যখন ডাটাটি প্রতিটি সময় ফাংশনটির জন্য ডাকা হয় তার চেয়ে নতুন তালিকা তৈরি করার পরিবর্তে ডেটা বেঁধে রাখলে একই সমস্যাটি অ-স্ক্রিপ্টিং ভাষায় ঘটতে পারে।
jsternberg

@ আয়ব: আমার মনে হয় না - প্যারামিটার যেমন প্রতিটি পাইথন বস্তুর মতো - কোনও বস্তুর পয়েন্টার। এই ক্ষেত্রে, অবজেক্টটি একটি পরিবর্তনীয় এবং ফাংশন ঘোষণার সময় ভেরিয়েবলটি আবদ্ধ হয়। প্যারামিটারটি "কলগুলি জুড়ে বেঁচে থাকে", তবে যা বেঁচে থাকে তা হ'ল পরিবর্তিত বস্তুর উল্লেখ।
প্যাট্রিক কলিন্স

14

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

  • স্থানীয় ভেরিয়েবলের অন্তর্ভুক্ত ঘোষণা

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

  • "বানরের প্যাচিং" সমর্থিত

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

  • ধাতু থেকে দূরে

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


12
  1. কোড ব্লকের জন্য ইন্ডেন্টেশন ব্যবহার করে {} / প্রারম্ভ-শেষের পরিবর্তে, যাই হোক না কেন।
  2. প্রতিটি আধুনিক আধুনিক ভাষায় যথাযথ লিক্সিকাল স্কোপিং রয়েছে তবে পাইথন নয় (নীচে দেখুন)।
  3. বিশৃঙ্খল ডক্স (পার্ল 5 ডকুমেন্টেশনের সাথে তুলনা করুন, যা দুর্দান্ত)
  4. স্ট্রেইট-জ্যাকেট (এটি করার একমাত্র উপায় আছে)।

ভাঙা স্কোপিংয়ের উদাহরণ; দোভাষীর অধিবেশন থেকে অনুলিপি:

>>> x=0
>>> def f():
...     x+=3
...     print x
... 
>>> f()
Traceback (most recent call last):
  File "", line 1, in ?
  File "", line 2, in f
UnboundLocalError: local variable 'x' referenced before assignment

globalএবং nonlocalকীওয়ার্ডগুলি এই নকশার মূ .়তাকে প্যাচ করার জন্য চালু করা হয়েছে।


2
স্কোপিং সম্পর্কিত, কৌতূহলীদের কাছে বর্তমান পদ্ধতির যুক্তিটি বোঝার জন্য পাইথন.আর / দেবদেব / পেপস / পেপ ৩৩০৪দেখার পক্ষে এটি উপযুক্ত হবে।
উইনস্টন ইওয়ার্ট

+1 এর সাথে সম্মত হন। সুতরাং, +1।
জেস

34
এটি করার একটি উপায় থাকার একটি সুবিধা। আপনি যখন কারও কোড পড়েন তখন আপনার কাছে কোনও একক বিবৃতি থাকে না। আপনার মস্তিষ্কে প্রতিমাগুলি শক্ত হয়ে গেলে আপনার তাত্ক্ষণিক স্বীকৃতি পাওয়া উচিত।
rox0r

9
@ Rox0r এর সাথে সম্পূর্ণ সম্মত হন। "স্ট্রেট-জ্যাকেট" সমস্ত প্রকারের সিনট্যাক্স যুদ্ধকে বাধা দেয়।
কিথজগ্রান্ট

8
সত্যি কথা বলতে, পাইথনে আমার খুব কমই কিওয়ার্ড globalবা nonlocalকীওয়ার্ডের প্রয়োজন । এত কমই যে আমি ভুলে গিয়েছি যে এই সমস্যাটি রয়েছে এবং আমি প্রতিদিন কয়েকবার পাইথন কোডটি লেখার পরেও এটি পুনরায় গুগল করতে হয়েছিল it's আমার কাছে, কোড যা গ্লোবাল ভেরিয়েবলগুলি পরিবর্তন করতে হবে (বা আরও খারাপ, বহিরাগত অ-গ্লোবাল ভেরিয়েবলগুলি) এটি একটি কোড গন্ধ। সাধারণত (সর্বদা নয়) আরও ভাল উপায় আছে।
বেন

11

আমি পাইথনের অবজেক্ট-ওরিয়েন্টড this.method()এবং প্রসেসরিয়াল / ফাংশনাল method(this)সিনট্যাক্সের সংমিশ্রণটি খুব আনসেটলিংয়ের মতো পাই :

x = [0, 1, 2, 3, 4]
x.count(1)
len(x)
any(x)
x.reverse()
reversed(x)
x.sort()
sorted(x)

এটি বিশেষত খারাপ কারণ কারণ বিপুল সংখ্যক ফাংশন (পদ্ধতিগুলির পরিবর্তে) কেবলমাত্র বিশ্বব্যাপী নেমস্পেসে ফেলে দেওয়া হয় : তালিকাগুলি, স্ট্রিং, সংখ্যা, নির্মাতা, রূপক সংক্রান্ত সমস্ত পদ্ধতি একটি বড় বর্ণমালা অনুসারে বাছাই করা তালিকায় মিশ্রিত।

খুব কমপক্ষে, এফ # এর মতো কার্যকরী ভাষাগুলির সমস্ত ফাংশন সঠিকভাবে মডিউলগুলিতে নাম-গতিতে থাকে:

List.map(x)
List.reversed(x)
List.any(x)

সুতরাং তারা সবাই একসাথে নয়। তদ্ব্যতীত, এটি লাইব্রেরি জুড়ে অনুসরণ করা একটি মান, সুতরাং কমপক্ষে এটি সামঞ্জস্যপূর্ণ।

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

x.count(1)
x.len()
x.any()
x.reverse()
x.reversed()
x.sort()
x.sorted()

পদ্ধতিগুলি রূপান্তরিত হয় বা না, বস্তুটিতে পদ্ধতি হিসাবে সেগুলি থাকার বিভিন্ন সুবিধা রয়েছে:

  • ডেটা-টাইপের "সাধারণ" ক্রিয়াকলাপ অনুসন্ধান করার একক জায়গা: অন্যান্য লাইব্রেরি / ইত্যাদি। তারা ডেটাটাইপগুলি করতে পারে এমন অন্যান্য অভিনব জিনিস থাকতে পারে তবে "ডিফল্ট" ক্রিয়াকলাপগুলি সমস্ত বস্তুর পদ্ধতিতে রয়েছে।
  • Moduleকল করার সময় পুনরাবৃত্তি করার দরকার নেই Module.method(x)। উপরের ক্রিয়ামূলক তালিকার উদাহরণটি গ্রহণ করে, কেন আমাকে বার বার বলে রাখা উচিত List? এটি জানা উচিত যে এটি একটি Listএবং আমি এতে Navigation.map()ফাংশনটি কল করতে চাই না! ব্যবহার x.map()সিনট্যাক্স শুকিয়ে এবং এখনও দ্ব্যর্থহীন রাখে।

এবং অবশ্যই এটি করার সমস্ত কিছু ইন-গ্লোবাল-নেমস্পেসের উপায়ে রয়েছে। এটি এমন নয় যে বর্তমান উপায় জিনিসগুলি সম্পন্ন করতে অক্ষম । এটি এমনকি বেশ পরিশ্রুত ( len(lst)), যেহেতু কিছুই গতিযুক্ত নয়! পদ্ধতিগুলির মাধ্যমে ফাংশন (ডিফল্ট আচরণ ইত্যাদি) ব্যবহার করার সুবিধাগুলি আমি বুঝতে পারি তবে আমি এখনও এটি পছন্দ করি না।

এটা শুধু অগোছালো। এবং বড় প্রকল্পগুলিতে, গণ্ডগোল আপনার সবচেয়ে খারাপ শত্রু।


1
হ্যাঁ ... আমি সত্যিই লিনকিউ স্টাইলটি মিস করি (আমি নিশ্চিত যে লিনকুই এটি প্রয়োগের প্রথম নয়, তবে আমি এটির সাথে সর্বাধিক পরিচিত) তালিকা হ্যান্ডলিং।
কুকিফোর্তুন

1
লেন (এক্স) কে একটি পদ্ধতি হিসাবে ভাববেন না। "লেন" একটি ফাংশন। পাইথনের ফাংশন এবং পদ্ধতি রয়েছে এবং আমি এই পদ্ধতির সাথে কোনও ভুল দেখি না। যথাযথ ফাংশনের অভাব হ'ল সাধারণত অযথা টাইপিংয়ের উত্স।
rbanffy

আমি জানি len()একটি ফাংশন, এবং সুবিধাগুলি কী। আমি এও বলেছি যে কেন আমি এটি একটি খারাপ ধারণা বলে মনে করি, কেন আমি মনে করি যে বিশ্বব্যাপী ফাংশনগুলি একটি বিশেষত খারাপ ধারণা, এবং কেন আমি মনে করি যে পদ্ধতিগুলি আপনার কার্যকারিতাটি সংগঠিত এবং
স্কোপ

আমি মনে করি না যে 42 (বা এটি 43?) কীওয়ার্ডগুলি একটি 'বড়' সংখ্যা। যে ভালো জিনিস অন্তর্ভুক্ত def, classএবং অন্যান্য অ ফাংশন কল। অন্যান্য জনপ্রিয় ভাষাগুলিতে এটি 100+ এর সাথে তুলনা করুন। এছাড়াও, থেকে লাইন বিবেচনা import this: Namespaces are one honking great idea -- let's do more of those!। আমি মনে করি আপনি পাইথনের নেমস্পেসগুলি ভুল বুঝতে পারেন;)
ওয়েইন ওয়ার্নার

8

সমজাতীয়তার অভাব ।

পাইথনকে "উইথ" কীওয়ার্ড যুক্ত করতে 3.x অপেক্ষা করতে হয়েছিল। যে কোনও হোমিকোনিক ভাষায় এটি তুচ্ছভাবে একটি লাইব্রেরিতে যুক্ত করা যেত।

আমি উত্তরগুলিতে দেখেছি বেশিরভাগ অন্যান্য সমস্যাগুলি 3 টির মধ্যে একটি:

1) টুলিংয়ের সাথে যে জিনিসগুলি স্থির করা যায় (উদাহরণস্বরূপ পাইফ্লেক্স) 2) বাস্তবায়ন বিশদ (জিআইএল, কর্মক্ষমতা) 3) কোডিং মানগুলির সাথে স্থির করা যায় এমন জিনিসগুলি (যেমন বৈশিষ্ট্যগুলি লোকেদের ইচ্ছা না থাকত)

# 2 ভাষা নিয়ে সমস্যা নয়, আইএমও # 1 এবং # 3 গুরুতর সমস্যা নয়।


1
withপাইথন 2.5 এর সাথে পাওয়া গেল from __future__ import with_statement, তবে আমি একমত, আমি মাঝে মাঝে দুর্ভাগ্যজনকভাবে দেখেছি যে if/ for/ print/ ইত্যাদি মত বিবৃতিগুলি নিয়মিত ফাংশনের পরিবর্তে "বিশেষ"
dbr

7

পাইথন হ'ল আমার প্রিয় ভাষা এটি খুব ভাবপূর্ণ, তবে এখনও আপনাকে অনেক বেশি ভুল থেকে বিরত রাখে। আমার কাছে এখনও কিছু জিনিস রয়েছে যা আমাকে বিরক্ত করে:

  • কোন আসল বেনাম ফাংশন। লাম্বদা একক বিবৃতি ফাংশনের জন্য ব্যবহার করা যেতে পারে, এবং withবিবৃতিটি এমন অনেক কিছুর জন্য ব্যবহার করা যেতে পারে যেখানে আপনি রুবিতে কোনও কোড ব্লক ব্যবহার করেন। তবে কিছু পরিস্থিতিতে এটি জিনিসগুলি হওয়ার চেয়ে কিছুটা বেশি আনাড়ি করে তোলে। (জাভাতে যতটা আনাড়ি হবে ততটা দূরে, তবে এখনও ...)

  • মডিউল এবং ফাইলগুলির মধ্যে সম্পর্কের ক্ষেত্রে কিছু বিভ্রান্তি। কমান্ড লাইন থেকে "পাইথন foo.py" চালানো "ইম্পোর্ট foo" থেকে পৃথক। পাইথন ২.x এর আপেক্ষিক আমদানিও সমস্যার কারণ হতে পারে। তবুও পাইথনের মডিউলগুলি সি, সি ++ এবং রুবির সম্পর্কিত বৈশিষ্ট্যগুলির তুলনায় অনেক ভাল।

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

  • কিছু গ্লোবাল ফাংশন, যেমন len, আপনি যে কোনও পদ্ধতি (এটি বাস্তবে পর্দার অন্তরালে রয়েছে) হওয়ার আশা করতেন।

  • গুরুত্বপূর্ণ ইন্ডেন্টেশন। ধারণাটি নিজেই নয়, যা আমি দুর্দান্ত বলে মনে করি, তবে যেহেতু এটিই একক জিনিস যা বহু লোককে পাইথন চেষ্টা থেকে বিরত রাখে, সম্ভবত পাইথন কিছু (alচ্ছিক) শুরু / শেষ চিহ্নগুলি দিয়ে আরও ভাল। এই লোকগুলিকে উপেক্ষা করে, আমিও পুরোপুরি इंडেন্টেশনের জন্য প্রয়োগ করা আকারের সাথে বেঁচে থাকতে পারি।

  • এটি জাভাস্ক্রিপ্টের পরিবর্তে ওয়েব ব্রাউজারগুলির অন্তর্নির্মিত ভাষা নয়।

এই অভিযোগগুলির মধ্যে এটি কেবলমাত্র প্রথম যেটি আমি যথেষ্ট যত্ন করি সে সম্পর্কে আমি মনে করি এটি ভাষায় যুক্ত করা উচিত। অন্যগুলি বরং নাবালক, শেষটি বাদে যা ঘটে যদি দুর্দান্ত হয়!


+1 এটি আমাকে বিস্মিত করে তোলে যে datetime.datetime.now()যখন কোনও প্রকল্প লিখতে পারে datetime.nowএবং তারপরে দুটি প্রকল্পের একত্রে লেখার একটি পদ্ধতিতে এটি মিশ্রিত করে তা অন্যটিকে বাতিল করে দেয় এবং অবশ্যই এটি জাভাতে ঘটেনি যা কোনও মডিউলের ফাইল হিসাবে একই নাম রাখে না would (?) আপনি যদি দেখেন যে সাধারণ উপায়টি মডিউলটিকে ফাইলের সাথে আমাদের বিভ্রান্ত করে তোলে যখন উভয় ব্যবহার অনুশীলন করা হয় এবং সুস্পষ্ট হয় selfতখনও আমি বুঝতে চেষ্টা করি যেহেতু কলগুলির কার্যকারণের মতো একই সংখ্যার তর্ক নেই। এবং আপনি ভাবতে পারেন যে ভিএম অজগরটি ধীর?
নিক্লাস রোসক্র্যান্টজ

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

5

পাইথন পুরোপুরি পরিপক্ক নয়: সময়ের সাথে এই মুহুর্তে পাইথন ৩.২ টি ভাষার বর্তমানে বিতরণ করা বেশিরভাগ প্যাকেজগুলির সাথে সামঞ্জস্যতা সমস্যা রয়েছে (সাধারণত তারা পাইথন 2.5 এর সাথে সামঞ্জস্যপূর্ণ)। এটি একটি বড় অসুবিধা যার জন্য বর্তমানে আরও বিকাশের প্রচেষ্টা প্রয়োজন (প্যাকেজটির সন্ধান করুন; সামঞ্জস্যতা যাচাই করুন; একটি ভাল নয় এমন উত্তম প্যাকেজ যা আরও বেশি উপযুক্ত হতে পারে তা বেছে নেবেন; সেরা সংস্করণটি নিন, এটি আপডেট করুন 3.2 যা দিন লাগতে পারে; দরকারী কিছু করা শুরু)।

২০১২ সালের মাঝামাঝি সময়ে সম্ভবত এটির কমতি হবে।

মনে রাখবেন যে আমি অনুমান করি যে আমি কোনও ভক্ত-ছেলের দ্বারা বঞ্চিত হয়েছি। বিকাশকারী আলোচনার সময় আমাদের উচ্চ স্তরের বিকাশকারী দল যদিও একই সিদ্ধান্তে পৌঁছেছে।

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

জুন ২০১৩ এর জন্য আপডেট: পাইথন 3 এ এখনও পরিপক্কতার সমস্যা রয়েছে। প্রত্যেক বার প্রায়শই একটি দলের সদস্য প্রয়োজনীয় প্যাকেজ উল্লেখ করে তারপরে "কেবল এটি কেবল ২.6 এর জন্য নয়" বলুন (এর মধ্যে কয়েকটি ক্ষেত্রে আমি ২.6-এর সাথে কেবল ২. package প্যাকেজটি ব্যবহার করার জন্য লোকালহোস্ট সকেটের মাধ্যমে একটি কার্যকর প্রয়োগ করেছি, এবং বাকী অংশগুলি আমাদের সরঞ্জামগুলি 3.2 এর সাথে থাকে)। এমনকি মইনমইনও নয়, খাঁটি-পাইথন উইকিটি পাইথন 3-তে লেখা আছে।


2
আমি কেবল তখনই আপনার সাথে একমত হই যদি আপনার পরিপক্কতার সংজ্ঞাটি এমন কোনও সংস্করণের সাথে সামঞ্জস্য না করে যা ডিজাইনের দ্বারা বেমানান হয়
tspang

3
আমি একমত যে পাইথনের দুটি অসামঞ্জস্য প্রবাহ একটি সমস্যা (যদিও এটি কেন করা হয়েছিল তা বোধগম্য), তবে আমি এটি "পরিপক্কতার" ইস্যু হিসাবে দেখছি না।
উইনস্টন ইওয়ার্ট

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

2
তারপরে পাইথন ২.x ব্যবহার করুন আপনি জানেন ... যে সংস্করণটি সবাই ব্যবহার করছে অথবা এটি কী সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ তা নির্ধারণ করার জন্য প্যাকেজ ডকুমেন্টেশনটি 2 সেকেন্ডের জন্য পড়ুন।
jsternberg

2
"পাইথন ৩.০ কিছু সময়ের জন্য প্রকাশিত হওয়ায় এটি আপনার ব্যবহার করা সংস্করণটি বোঝায় না Py অজগর 3.0.০, তবে আপাতত ২.x ব্যবহার করা ভাল সমাধান "-> এটি ৫০০ চরিত্রের বলার উপায়: এটি এখনও পরিণত হয়নি।
জোনাথন ক্লাইন আইইইইই

4

পাইথনের স্কোপিং খারাপভাবে ভেঙে গেছে, যা পাইথনের অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংকে খুব বিশ্রী করে তুলেছে।


8
আপনি কি একটি উদাহরণ দিতে পারেন? (আমি নিশ্চিত যে আপনি ঠিক বলেছেন, তবে আমি একটি উদাহরণ চাই)
উইনস্টন ইওয়ার্ট

24
আমি পাইথন পছন্দ করি তবে উদাহরণস্বরূপ সম্পত্তি এবং পদ্ধতির প্রতিটি রেফারেন্সের সামনে রাখার বিষয়টি আমি একেবারেই উপেক্ষা করি self.। ডিএসএল তৈরির জন্য পাইথন ব্যবহার করা অসম্ভব করে তোলে যেমন এটি রুবিতে করা সহজ।
অ্যাডাম ক্রসল্যান্ড

35
আমি নিজেকে অদ্ভুত বলে মনে করি না, আমি প্রকাশককে পছন্দ করি।
উইনস্টন ইওয়ার্ট

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

7
আপনি তাদের ঘোষণার থেকে পৃথক পদ্ধতিগুলিতে স্ব ব্যবহার করেন: ডিফ foo (স্ব) কিন্তু স্ব.ফু ()। আমি সুস্পষ্ট সংজ্ঞাটির এই মিশ্রণটি দেখতে পেয়েছি তবে পর্দার অন্তর্ভুক্ত উপাদানগুলি খুব সুন্দর নয়।
লেনি প্রোগ্রামার্স

4

পাইথন সম্পর্কে আমার গ্রিপস:

  • বোল্ট-অন ওওপি (এটির বিশদকরণের জন্য @ মিপাদির উত্তর দেখুন)
  • ল্যাম্বডাসের ভাঙা বাস্তবায়ন
  • ব্যাপ্তি সমস্যা
  • স্ট্যান্ডার্ড লাইব্রেরিতে স্থির সংগ্রহ নেই
  • এম্বেড থাকা ডিএসএলগুলিতে দুর্বল সুযোগ্যতা

ডাউনভোট কেন?
মিসিংফ্যাক্টর

আমি ডাউনভোটার নই, তবে আপনি কেন ওও বোল্টেড বলে মনে করছেন তা ব্যাখ্যা করতে পারবেন? পাইথনের সর্বদা ওও থাকে, এটি ভাষার মূল অংশ।
দেনিথ

@ মিপাডির উত্তর দেখুন।
অনুপস্থিতি


4

পাইথনে অ্যাক্সেস মডিফায়ারগুলি প্রয়োগযোগ্য নয় - ভাল কাঠামোগত, মডুলারাইজড কোড লিখতে অসুবিধা সৃষ্টি করে।

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

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


সুতরাং অ্যাক্সেস নিয়ন্ত্রণের অভাবটি খারাপ ... তবে কোনও অ-স্থানীয় নেমস্পেসে ভেরিয়েবলের স্পষ্ট লেখার স্কোপিংও খারাপ?
ncoghlan

@ কনগোঘলান: ১ - আপনি কীভাবে আপনার প্রকল্পটি কনফিগার করেন তার উপর নির্ভর করে এই বৈশিষ্ট্যটি অনেক আধুনিক ভাষায় মানক। এটি প্রোগ্রামারের নিয়ন্ত্রণাধীন। 3 - এটি সম্পর্কে এত দুর্দান্ত কী তা নিশ্চিত নন - আপনি বেশিরভাগ সংকলিত ভাষা / আইডিইতে কয়েকটি প্রকল্প সেটিংস দিয়ে সহজেই আপনার সুযোগ নিয়ন্ত্রণ করতে পারেন। যদি 'আমরা সকলেই প্রাপ্তবয়স্কদের সম্মতি দিই', তবে আমাদের নিজস্ব আরামের স্তর অনুযায়ী আমাদের নিজের সিদ্ধান্ত নিতে এবং সুযোগকে সামঞ্জস্য করতে সক্ষম হওয়া উচিত।
ভেক্টর

2
জিনিসটি হ'ল "বলপ্রয়োগের অ্যাক্সেস নিয়ন্ত্রণ" চেয়ে মানুষেরা আমাদের কাছে পাইথনকে এমন দুর্দান্ত আঠালো ভাষায় পরিণত করে এমন একটি জিনিস বের করতে বলছে: বিকাশকারীদের তাদের কোড কীভাবে পরে ব্যবহার করা হয় তা নিয়ন্ত্রণ করা ইচ্ছাকৃতভাবে কঠিন । C ++ এবং জাভা প্যাটার্নগুলিতে কতটা বয়লারপ্লেট রয়েছে কেবলমাত্র প্রয়োগ করা অ্যাক্সেস নিয়ন্ত্রণের চারপাশে কাজ করার জন্য? আমি অবশ্যই সেই কারণগুলিতে পাইথন ব্যবহার না করা লোককে বেছে নিতে বুঝতে পারি তবে স্থির প্রয়োগ কখনও কঠোর পরীক্ষার বিকল্প হতে পারে না।
ncoghlan

1
@ কনগোঘলান - আমার কাছে পাইথন সম্পর্কে দুর্দান্ত জিনিসগুলি সিনট্যাক্স এবং সাফল্য - অভিব্যক্তি প্রকাশের কমনীয়তা। এবং যেমনটি আমি বলেছি, প্রোগ্রামারদের কোড কাঠামো এবং সংস্থার সাথে করা উচিত নয় এমন বিষয়গুলির সাথে ঝাঁকুনির সাথে স্কোপিংয়ের কম সম্পর্ক রয়েছে - সুতরাং 'প্রাপ্তবয়স্কদের সম্মতি জানানো' ধারণাটি মূল বিষয়। আমি জটিল প্রকল্পগুলিতে কাজ করি, সাধারণ ইউটিলিটিস এবং স্ক্রিপ্টগুলি নয় - কোডটি অবশ্যই সাবধানে মডিউলাইজড এবং কাঠামোগত করা উচিত - অ্যাক্সেস মডিফায়ারগুলি এটি নিশ্চিত করার অন্যতম গুরুত্বপূর্ণ উপায়।
ভেক্টর

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

3
  1. পারফরম্যান্স ভাল নয়, তবে পাইপির সাহায্যে উন্নতি হচ্ছে,
  2. জিআইএল কোড গতিতে থ্রেডিংয়ের ব্যবহারকে বাধা দেয় (যদিও এটি সাধারণত অকালীন অপটিমাইজেশন),
  3. এটি শুধুমাত্র অ্যাপ্লিকেশন প্রোগ্রামিংয়ের জন্য দরকারী,

তবে এর কিছু দুর্দান্ত রিডিমিং বৈশিষ্ট্য রয়েছে:

  1. এটি র‌্যাডের জন্য উপযুক্ত,
  2. সি এর সাথে ইন্টারফেস করা সহজ (এবং সিটির জন্য অজগর দোভাষীকে এম্বেড করতে),
  3. এটি খুব পঠনযোগ্য,
  4. এটি শিখতে সহজ,
  5. এটি ভাল নথিভুক্ত,
  6. ব্যাটারিগুলি আসলে অন্তর্ভুক্ত করা হয়, এটি স্ট্যান্ডার্ড লাইব্রেরি বিশাল এবং পাইপিতে ব্যবহারিকভাবে সমস্ত কিছুর জন্য মডিউল থাকে,
  7. এটির একটি স্বাস্থ্যকর সম্প্রদায় রয়েছে।

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

5
আমি সুবিধাগুলি তালিকাভুক্ত করেছি কারণ আমার মতে তারা দু'পক্ষের চেয়ে বেশি। আপনি কি কখনও পাইথনে একটি লিনাক্স কার্নেল মডিউল প্রয়োগ করার চেষ্টা করেছেন?
ড্যান_ওয়াটারওয়ার্থ

3

আমি অজগরকে সমর্থন করি এবং প্রথম যে অসুবিধাটি আমার মনে আসে তা হ'ল এমন বিবৃতি দেওয়ার if myTest():সময় আপনাকে অবশ্যই পুরো সম্পাদিত ব্লকের ইন্ডেন্টেশনটি পরিবর্তন করতে হবে যা আপনাকে সি বা জাভার সাথে করতে হবে না। প্রকৃতপক্ষে অজগরটিতে একটি আইফ-ক্লজটি মন্তব্য করার পরিবর্তে আমি এটির জন্য এইভাবে মন্তব্য করতে শুরু করেছি: `যদি সত্য: # মাই টেস্ট () তাই আমাকেও নিম্নলিখিত কোড ব্লকটি পরিবর্তন করতে হবে না। যেহেতু জাভা এবং সি ইনডেন্টেশনের উপর নির্ভর করে না এটি সি এবং জাভার সাথে বিবৃতি দেওয়া সহজ করে তোলে।


1
আপনি কোনও সিডের ইন্ডেন্টেশন পরিবর্তন না করেই ব্লকের স্তর পরিবর্তন করতে সি বা জাভা কোডটি গুরুত্বের সাথে সম্পাদনা করবেন?
বেন

4
@ অস্থায়ীভাবে, হ্যাঁ ...
বিকল্প

1
@ এখানে একই।
ক্রিস্টোফার মাহান

2
আমি পরিবর্তন if something()করার কৌশল ব্যবহার করি if False and something()। আর একটি কৌশলটি হল একটি বহু-লাইন স্ট্রিং ব্যবহার করে "মন্তব্য করা" out
মার্টিন ভিলকান্স

1
@ মার্টিন অফ কোর্স! যদি মিথ্যা ...
ক্রিস্টোফার মহান

3

একাধিক প্রেরণ প্রতিষ্ঠিত একক-প্রেরণ টাইপ সিস্টেমের সাথে ভালভাবে সংহত করে না এবং খুব পারফর্ম্যান্ট নয়।

ডায়নামিক লোডিং সমান্তরাল ফাইল সিস্টেমে একটি বিশাল সমস্যা যেখানে পসিক্স-এর মতো শব্দার্থকগুলি মেটাডেটা-নিবিড় ক্রিয়াকলাপগুলির জন্য বিপর্যয়কর ধীর-ডাউনগুলিকে নিয়ে যায়। আমার এমন সহকর্মী রয়েছে যারা 65k কোরে লোড হওয়া মাত্র পাইথন (নিম্পি, এমপিআইপিপি, পেটসক 4 পি, এবং অন্যান্য এক্সটেনশন মডিউল সহ) পেয়ে চতুর্থাংশ মিলিয়ন কোর-ঘন্টা পুড়িয়ে ফেলেছেন। (সিমুলেশনটি একটি নতুন নতুন বিজ্ঞানের ফলাফল দিয়েছে, সুতরাং এটির মূল্য ছিল তবে এটি তখন সমস্যা যখন যখন একবার ব্যারেলেরও বেশি তেল পাইথন লোড করার জন্য পোড়ানো হয় stat) স্ট্যাটিক্যালি লিঙ্কে অক্ষমতা আমাদের দুর্দান্ত সংকোচনে যেতে বাধ্য করেছে dlopenযৌথ ফাইল সিস্টেম অ্যাক্সেস সম্পাদন করতে libc-rtld প্যাচিং সহ স্কেল এ যুক্তিসঙ্গত লোড টাইম ।


বাহ, অত্যন্ত প্রযুক্তিগত বলে মনে হচ্ছে, আপনার কি কোনও রেফারেন্স উপাদান, উদাহরণ, ব্লগ পোস্ট বা বিষয় সম্পর্কিত নিবন্ধ আছে? আমি ভাবছি যদি অদূর ভবিষ্যতে আমার কাছে এ জাতীয় কেসগুলির মুখোমুখি হতে পারে।
ভিনসেন্ট

অ্যারন সায়পাই ২০১২-তে একটি বক্তব্য দিয়েছেন । dlopenকাপড় আমাদের রয়েছে collfs গ্রন্থাগার। সেই সংগ্রহশালায় আশের ল্যাংটনের পাথ ক্যাশে অনুপ্রাণিত অতিরিক্ত জিপিমপোর্ট ট্রিকসও রয়েছে। আমরা আরও ভাল বিতরণ এবং একটি কাগজ নিয়ে কাজ করছি।
জেড

3
  • বেশ মূলধারার তৃতীয় পক্ষের লাইব্রেরি এবং সফটওয়্যারগুলির একটি গুচ্ছ যা ব্যাপকভাবে ব্যবহৃত হয়, এটি পাইথোনিক নয়। কয়েকটি উদাহরণ: সোপলিব, ওপেনারপ, রিপোর্টল্যাব। সমালোচনা বাহিরের বাইরে, এটি রয়েছে, এটি ব্যাপকভাবে ব্যবহৃত হয়েছে, তবে এটি অজগর সংস্কৃতিটিকে বিভ্রান্ত করে তোলে (এটি এমন নীতিবাক্যকে আঘাত করে যে বলে যে "সেখানে একটি হওয়া উচিত - এবং সম্ভবত এটি করার একমাত্র প্রকাশ্য উপায়")। জ্ঞাত পাইথোনিক সাফল্যগুলি (যেমন জ্যাঙ্গো বা ট্র্যাক) এর ব্যতিক্রম বলে মনে হয়।
  • উদাহরণস্বরূপ, বর্গ, মেটাক্লাসের বিমূর্ততার সম্ভাব্য সীমাহীন গভীরতা ধারণাগতভাবে সুন্দর এবং অনন্য। তবে এটিকে আয়ত্ত করার জন্য আপনাকে দোভাষীকে গভীরভাবে জানতে হবে (যে ক্রমে পাইথন কোডটি ব্যাখ্যা করা হয় ইত্যাদি)। এটি ব্যাপকভাবে পরিচিত এবং ব্যবহৃত (বা সঠিকভাবে ব্যবহৃত) নয়, অন্যদিকে একই জাতীয় কালো যাদু যেমন সি # জেনেরিকগুলি, যা ধারণামূলকভাবে আরও সংশ্লেষিত (আইএমএইচও) আনুপাতিকভাবে আরও বেশি পরিচিত এবং ব্যবহৃত বলে মনে হয়।
  • মেমরি এবং থ্রেডিং মডেলের ভাল উপলব্ধি পেতে আপনাকে অজগর নিয়ে বেশ অভিজ্ঞ হতে হবে, কারণ এখানে কোনও বিস্তৃত অনুমান নেই। আপনি কেবল কী কাজ করে তা জানেন, কারণ আপনি দোভাষীর উত্স বা অভিজ্ঞ quirks পড়েছেন এবং আবিষ্কার করেছেন কীভাবে এটি ঠিক করা যায়। উদাহরণস্বরূপ, কেবল শক্তিশালী বা দুর্বল রেফারেন্স রয়েছে, জাভাটির নরম এবং ভুত রেফ নেই। জাভার আবর্জনা সংগ্রহের জন্য একটি থ্রেড রয়েছে যখন অজগরটিতে আবর্জনা সংগ্রহ কখন হয় সে সম্পর্কে কোনও আনুষ্ঠানিক উত্তর নেই; আপনি কেবল পর্যবেক্ষণ করতে পারেন যে অজগর কোডটি কার্যকর না করা হলে আবর্জনা সংগ্রহের ঘটনা ঘটে না এবং এই সিদ্ধান্তে পৌঁছে যে মেমরি বরাদ্দ করার চেষ্টা করার সময় এটি সম্ভবত কখনও কখনও ঘটছে। যখন আপনি কেন জানেন না কেন কোনও লক করা সংস্থানটি প্রকাশ করা হয়নি (তখন এ সম্পর্কে আমার অভিজ্ঞতা ফ্রিউইচ-এ Mod_python ছিল) তখন জটিল হতে পারে।

যাইহোক, পাইথন এখন 4 বছরের জন্য আমার মূল ভাষা। ফ্যানবয়, এলিটালিস্ট বা মনোমোনাক হয়ে যাওয়া অজগর সংস্কৃতির অঙ্গ নয়।


+1 টি। মেমরি এবং থ্রেডিং মডেলের জন্য স্পেস ঠিক আছে। তবে এফডব্লিউআইডাব্লু, জাভা আবর্জনা সংগ্রাহক থ্রেডে রয়েছেন (এবং জিসি সম্পর্কিত আরও বেশিরভাগ অংশ) জাভা ভাষা বা প্রতি সেভির ভিএম স্পেসিফিকেশনের দিক নয়, তবে এটি কোনও জেভিএমের বাস্তবায়নের বিষয়। যাইহোক, মূল সান / ওরাকল জেভিএম জেভিএম টিউনিংয়ের উপর প্রকাশিত পুরো বই রয়েছে এমন পরিমাণে আর্ট জিসি আচরণ এবং কনফিগারেশনে ব্যাপকভাবে নথিভুক্ত। তত্ত্ব অনুসারে কেউ সিপিথনকে একইভাবে নথিভুক্ত করতে পারে ভাষা নির্বিশেষে।
অ্যান্ড্রু জ্যাঙ্ক

2
  • অদ্ভুত ওওপি:
    • len(s)মাধ্যমে __len__(self)এবং অন্যান্য "বিশেষ পদ্ধতি"
    • অতিরিক্ত বিশেষ পদ্ধতি যা অন্যান্য বিশেষ পদ্ধতি থেকে উদ্ভূত হতে পারে ( __add__এবং এর __iadd__জন্য +এবং +=)
    • self প্রথম পদ্ধতি পরামিতি হিসাবে
    • আপনি বেস ক্লাস কনস্ট্রাক্টর কল করতে ভুলে যেতে পারেন
    • অ্যাক্সেস মডিফায়ার নেই (ব্যক্তিগত, সুরক্ষিত ...)
  • কোন ধ্রুবক সংজ্ঞা নেই
  • কাস্টম ধরণের জন্য কোন অপরিবর্তনীয়তা
  • Gil
  • দুর্বল পারফরম্যান্স যা পাইথন এবং সি এর মিশ্রণ তৈরি করে এবং বিল্ডগুলির সাথে ঝামেলা করে (সি লিবস, প্ল্যাটফর্ম নির্ভরতা ...)
  • খারাপ ডকুমেন্টেশন, বিশেষত তৃতীয় পক্ষের libs
  • পাইথন 2.x এবং 3.x এর মধ্যে অসঙ্গতি
  • দুর্বল কোড বিশ্লেষণ সরঞ্জামসমূহ (জাভা বা সি # এর মতো স্ট্যাটিকালি টাইপ করা ভাষার জন্য কী দেওয়া হয় তার তুলনায়)

5
ব্যক্তিগতভাবে আমি মনে করি যে পাইথনের সবচেয়ে বড় সুবিধাগুলির মধ্যে 2.x এবং 3.x এর মধ্যে অসঙ্গতি হ'ল। হ্যা, এখানে আরো একটি অসুবিধা হয়। তবে বিকাশকারীদের পিছনে সামঞ্জস্যতা ভেঙে যাওয়ার অস্পষ্টতার অর্থ হ'ল তাদের নিবিড়ভাবে ক্রাফ্ট বহন করতে হবে না। আরও ভাষাগুলির এ জাতীয় ওভারহোল দরকার।
কনরাড রুডলফ

0

"অপরিচ্ছন্নতা" ঠিক এটি দৃ strong় বিন্দু নয়। আফাইক নম্বর, টিপলস এবং স্ট্রিং অপরিবর্তনীয়, অন্য সমস্ত কিছু (অর্থাত্ বস্তু) পরিবর্তনযোগ্য mut এরলং বা হাস্কেলের মতো ক্রিয়ামূলক ভাষার সাথে এর তুলনা করুন যেখানে সবকিছু অপরিবর্তনীয় (ডিফল্টরূপে, কমপক্ষে)।

যাইহোক, অপ্রচলতা সত্যই সম্মতিযুক্ত * দিয়ে জ্বলজ্বল করে, যা পাইথনের দৃ point় বিষয়ও নয়, তাই এটি অন্ততপক্ষে ফলস্বরূপ।

(* = নীটপিকারদের জন্য: আমি বোঝাচ্ছি সম্মতি যা কমপক্ষে আংশিক সমান্তরাল I আমার ধারণা পাইথন "একক থ্রেডযুক্ত" সম্মতিতে ঠিক আছে, যার মধ্যে অপরিবর্তনশীলতা ততটা গুরুত্বপূর্ণ নয় ((হ্যাঁ, এফপি-প্রেমীরা, আমি জানি যে অপরিবর্তনীয়তা এমনকি সম্মতি ছাড়াই দুর্দান্ত)))


0

আমি সুস্পষ্টভাবে সমান্তরাল নির্মাণ করতে চাই। প্রায়শই না যখন আমি একটি তালিকা বোধগম্য লিখুন

[ f(x) for x in lots_of_sx ]

উপাদানগুলি যাতে ক্রিয়াকলাপ করা হবে সেটিকে আমি যত্ন করি না। কখনও কখনও, তারা কোন অর্থে ফিরে আসে তাও আমি চিন্তা করি না।

এমনকি যদি আমার চ খাঁটি পাইথন হয় সিপিথন এটি ভালভাবে না করতে পারে তবে অন্যান্য ব্যবহারের জন্য এটির মতো আচরণটি সংজ্ঞায়িত করা যেতে পারে।


// স্পেন গুচ্ছ থ্রেড // সমস্ত থ্রেডে কুই ক্যো পাস করুন que.extend ([x_ for_of_sx] এর জন্য x) কুইওয়েট () # থ্রেড দ্বারা প্রক্রিয়া করা সমস্ত লট_ফ_সেক্সের জন্য অপেক্ষা করুন।
জোড়ান পাভলভিক

0

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

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