পিইপি 8, কীওয়ার্ড আর্গুমেন্টে বা ডিফল্ট প্যারামিটার মানটির কেন '=' এর আশেপাশে কোনও স্থান নেই?


103

পিইপি 8 =কীওয়ার্ড আর্গুমেন্ট বা একটি ডিফল্ট প্যারামিটার মানের আশেপাশে ফাঁক না রাখার পরামর্শ দেয় ?

=পাইথন কোডের প্রতিটি অন্যান্য ঘটনাস্থলের আশেপাশের ফাঁকের সুপারিশের সাথে কি এই অসঙ্গতি রয়েছে ?

কিভাবে:

func(1, 2, very_long_variable_name=another_very_long_variable_name)

থেকে উত্তম:

func(1, 2, very_long_variable_name = another_very_long_variable_name)

পাইথনের বিডিএফএল দ্বারা আলোচনার / ব্যাখ্যার যে কোনও লিঙ্ক প্রশংসিত হবে।

মনে রাখবেন, এই প্রশ্নটি ডিফল্ট মানগুলির চেয়ে কাওয়ার্গসের বিষয়ে আরও বেশি, আমি কেবল পিইপি 8 থেকে ফ্রেসসিং ব্যবহার করেছি।

আমি মতামত চাইছি না। আমি এই সিদ্ধান্তের পিছনে কারণ জিজ্ঞাসা করছি। এটি আরও জিজ্ঞাসার মতো যে আমি কেন একটি সি প্রোগ্রামে বিবৃতি {হিসাবে একই লাইনে ব্যবহার করব if, আমার এটি ব্যবহার করা উচিত কিনা তা নয়।

উত্তর:


72

আমি অনুমান করি যে এটি একটি মূলশব্দ যুক্তিটি ভেরিয়েবল অ্যাসাইনমেন্টের চেয়ে মূলত আলাদা।

উদাহরণস্বরূপ, এখানে প্রচুর কোড রয়েছে:

kw1 = some_value
kw2 = some_value
kw3 = some_value
some_func(
    1,
    2,
    kw1=kw1,
    kw2=kw2,
    kw3=kw3)

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

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


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

3
আমি যেমন বলেছি, এগুলি আলাদা জিনিস। এগুলি আলাদাভাবে লিখলে তা বোধগম্য হয়।
ফোরট্রান

6
আমি বলব যে এটি সত্যিকারের চেয়ে বেশি পঠনযোগ্য নয় kw1 = kw1, kw2 = kw2;) তবে গাইডো এবং ব্যারি ভেবেছিলেন এটিই ছিল।
আত্মাচেক

1
আমি এই আনোয়ারটিকে বেশ দৃinc়প্রত্যয়ী বলে গ্রহণ করব। যদিও এটির কোনও লিঙ্ক নিশ্চিত করে কোনও আপত্তি হবে না
সানচেক করুন

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

13

আমি ডিফল্ট আর্গুমেন্ট হিসাবে খুব_ লম্বা_ পরিবর্তনযোগ্য_নামটি ব্যবহার করব না। সুতরাং এটি বিবেচনা করুন:

func(1, 2, axis='x', angle=90, size=450, name='foo bar')

এটার উপরে:

func(1, 2, axis = 'x', angle = 90, size = 450, name = 'foo bar')

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


1
এগুলি কীওয়ার্ড আর্গুমেন্ট, এর অনুরূপ উদাহরণ
পিইপিতে

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

1
@ পেট্রিকটি এই যুক্তিটি "এটি কোনও কাজ নয়, তাই তারা বিভিন্ন জিনিস" এটি কেন (দার্শনিক ধারণা) তা ব্যাখ্যা করার জন্য কিছুই করে না ; এটি কেবল কেন এটি হতে পারে তা ব্যাখ্যা করে (সিনট্যাক্টিক ধারণা)।
মতিন উলহাক

11

ভাল এবং কনস আছে।

PEP8 অনুবর্তী কোড কীভাবে পড়ে তা আমি খুব পছন্দ করি না। আমি যে যুক্তির very_long_variable_name=another_very_long_variable_nameচেয়ে বেশি কখনও মানব পাঠযোগ্য হতে পারি তা কিনছি না very_long_variable_name = another_very_long_variable_name। মানুষ এইভাবে পড়েন না। এটি একটি অতিরিক্ত জ্ঞানীয় বোঝা, বিশেষত সিনট্যাক্স হাইলাইটের অভাবে।

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


ঠিক আছে, আপনি চারপাশে ফাঁকা স্থানগুলি মেনে চললে, সরঞ্জাম ব্যবহার করে অনুসন্ধান করা আলাদা হবে না different
নামকরণ

10

আইএমও আরোগুলির জন্য ফাঁকা স্থান ছেড়ে দিলে আর্গ / মান জোড়ার ক্লিনার ভিজ্যুয়াল গ্রুপিং সরবরাহ করে; এটি কম বিশৃঙ্খলা দেখাচ্ছে।


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

3

আমি মনে করি এর বেশ কয়েকটি কারণ রয়েছে যদিও আমি কেবল যুক্তিযুক্ত হতে পারি:

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

3

আমার জন্য এটি কোডটিকে আরও পঠনযোগ্য করে তোলে এবং এটি একটি ভাল সম্মেলন।

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

যদি অন্য কোন বিবেচ্য বিষয় হত, তাহলে আমরা পছন্দ করেন foo = 42করার foo=42কারণ আধুনিক কিভাবে সমান চিহ্ন সাধারণত ফরম্যাট করা হয়, এবং কারণ সাবেক চমত্কারভাবে চাক্ষুষরূপে পরিবর্তনশীল এবং সাদা ব্যবধান দিয়ে মান আলাদা নয়।

তবে যখন এক লাইনে একাধিক অ্যাসাইনমেন্ট থাকে, তখন আমরা পছন্দ f(foo=42, bar=43, baz=44)করি f(foo = 42, bar = 43, baz = 44), কারণ প্রাক্তন দৃষ্টিভঙ্গিটি সাদা জায়গার সাথে বেশ কয়েকটি কার্যভারকে পৃথক করে দেয়, যদিও পরবর্তীটি এটি করে না, কীওয়ার্ড / মান জোড়গুলি কোথায় তা দেখতে কিছুটা শক্ত করে তোলে।

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

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