পাইথন `আমদানি x` এবং import এক্স আমদানি y স্টেটমেন্ট থেকে সাজানোর সঠিক উপায় কী?


170

পাইথন শৈলী গাইড এই মত গ্রুপ আমদানির তার পরামর্শ:

আমদানিগুলি নিম্নলিখিত ক্রমে শ্রেণিবদ্ধ করা উচিত:

  1. স্ট্যান্ডার্ড গ্রন্থাগার আমদানি
  2. সম্পর্কিত তৃতীয় পক্ষের আমদানি
  3. স্থানীয় অ্যাপ্লিকেশন / গ্রন্থাগার নির্দিষ্ট আমদানি

তবে আমদানির দুটি ভিন্ন উপায় কীভাবে নির্ধারণ করা উচিত সে সম্পর্কে কিছুই উল্লেখ করা হয়নি:

from foo import bar
import foo

এগুলি বাছাই করার একাধিক উপায় রয়েছে (আসুন ধরে নেওয়া যাক সেই সমস্ত আমদানি একই গ্রুপের অন্তর্ভুক্ত):

  • প্রথমে from..import, তারপরimport

    from g import gg
    from x import xx
    import abc
    import def
    import x
    
  • প্রথমে import, তারপরfrom..import

    import abc
    import def
    import x
    from g import gg
    from x import xx
    
  • আমদানির ধরণের উপেক্ষা করে মডিউল নাম অনুসারে বর্ণানুক্রমিক ক্রম

    import abc
    import def
    from g import gg
    import x
    from xx import xx
    

পিইপি 8 এটির জন্য পছন্দসই অর্ডার উল্লেখ করে না এবং "ক্লিনআপ ইম্পোর্টগুলি" বৈশিষ্ট্যযুক্ত কিছু আইডিই সম্ভবত সেই বৈশিষ্ট্যটির বিকাশকারী যা পছন্দ করেছে তা করেছে।

আমি এটি বা বিডিএফএল সম্পর্কিত প্রাসঙ্গিক মন্তব্য / ইমেল (বা অন্য পাইথন কোর বিকাশকারী) স্পষ্ট করে অন্য একটি পিইপি খুঁজছিআপনার নিজের পছন্দ উল্লেখ করে বিষয়বস্তু উত্তর পোস্ট করবেন না।


20
যে ব্যবহারকারী এটি বন্ধ করতে ভোট দিয়েছেন তাদের কাছে: আমি মতামত চাইছি না ! দয়া করে আমার প্রশ্নের শেষ অনুচ্ছেদটি পড়ুন।
চোরমাস্টার

9
আমি সন্দেহ করি একটি "সঠিক" উপায় আছে। এটিতে আপনার নিজস্ব স্টাইলটি বাছাইতে কী সমস্যা? কেউই এটি না জানলে খুব কমই কোনও সম্মেলন হতে পারে। এবং এটা সত্যিই কোন ব্যাপার? এটি নির্দিষ্ট করে লাভ কী?
স্টিভেন রাম্বালস্কি

6
PEP8 এর মতো +1 শব্দগুলি প্রসারিত করা উচিত।
hochl

7
পিইপিতে দুর্বলতার অর্থ এই নয় যে এর সংশোধন করা দরকার।
Ignacio Vazquez-Abram

2
আমি সাধারণত আমদানিগুলি লজিকাল গ্রুপগুলিতে ভাগ করি এবং তারপরে এই ছোট গ্রুপগুলিকে লাইন দৈর্ঘ্য অনুসারে বাছাই করি ... সহজ কারণে যে তারা আরও সুন্দর দেখায় । আপনি যদি এই যৌক্তিক গোষ্ঠীগুলিকে কোনওরকম যৌক্তিক ক্রমে রাখেন তবে আপনি যে কোনও আমদানি বেশ দ্রুত অনুসন্ধান করতে পারেন (তবুও আপনি Ctrl+Fযেভাবে আমদানিগুলি সংগঠিত করেন তা স্থির সময় ...)
বাকুরিউ

উত্তর:


112

আমদানিগুলি সাধারণত বর্ণমালা অনুসারে বাছাই করা হয় এবং পিইপি 8 এর পাশে বিভিন্ন স্থানে বর্ণনা করা হয়।

বর্ণমালা অনুসারে বাছাই করা মডিউলগুলি দ্রুত পড়তে এবং সন্ধানযোগ্য । সর্বোপরি অজগর সবই পঠনযোগ্যতা। এছাড়াও কিছু আমদানি করা হয়েছে কি না তা যাচাই করা আরও সহজ এবং নকল আমদানি এড়ানো

বাছাই সম্পর্কিত পিইপি 8 তে কিছু পাওয়া যায় না o আপনি যা ব্যবহার করেন তা পছন্দ করে নিন।

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

যেমন উদাহরণস্বরূপ:

import httplib
import logging
import random
import StringIO
import time
import unittest
from nova.api import openstack
from nova.auth import users
from nova.endpoint import cloud

অথবা

import a_standard
import b_standard

import a_third_party
import b_third_party

from a_soc import f
from a_soc import g
from b_soc import d

রেডডিট অফিসিয়াল সংগ্রহস্থল আরও জানিয়েছে যে, সাধারণভাবে পিইপি -8 আমদানি ক্রম ব্যবহার করা উচিত। তবে কয়েকটি সংযোজন যা রয়েছে

for each imported group the order of imports should be:
import <package>.<module> style lines in alphabetical order
from <package>.<module> import <symbol> style in alphabetical order

তথ্যসূত্র:

পিএস: আইসর্ট ইউটিলিটি স্বয়ংক্রিয়ভাবে আপনার আমদানি বাছাই করে।


21
আপনি কোথায় আসল প্রশ্নের উত্তর দিচ্ছেন তা আমি দেখতে পাচ্ছি না ...
লাইওরি

3
@ লিওরি আমি একটি রেফারেন্স / প্রাসঙ্গিক লিঙ্ক জমা দিয়েছি যাতে মডিউলগুলি বাছাই করতে হবে ating পিইপি 8 হিসাবে কিছু উল্লেখ না করে তবে আরও অনেক রেফারেন্স এ জাতীয় আমদানি পদ্ধতি ব্যবহার করার পরামর্শ দেয়।
অভিষেক

7
নোট করুন যে প্রশ্নটি একে অপরের সাথে সম্পর্কিত বাছাই import xএবং from y import zবিবৃতি সম্পর্কে । আপনার উত্তরে আমি এই প্রশ্নের কোনও উত্তর দেখতে পাচ্ছি না। আপনি মূলত এই প্রশ্নের অংশটি আবার বিশ্রাম নিচ্ছেন যা ইতিমধ্যে আমদানির ধরণ দ্বারা গ্রুপিংয়ের পিইপি 8 পদ্ধতি ব্যাখ্যা করে। এই নির্দিষ্ট প্রশ্নের উত্তর যদি কিছু লিঙ্কে থাকে তবে দয়া করে প্রাসঙ্গিক অংশটি উদ্ধৃত করুন।
লাইওরি

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

ব্যক্তিগত বনাম সার্বজনীন আমদানির জন্য কী অর্ডার ব্যবহার করা উচিত? ( import _tkinterবনাম import unittest)
স্টিভোসিয়াক

30

সিআইএর অভ্যন্তরীণ কোডিং কনভেনশন ( উইকিলিক্স ভল্ট le লিকের অংশ ) অনুসারে পাইথন আমদানিকে তিনটি গ্রুপে ভাগ করা উচিত:

  1. স্ট্যান্ডার্ড গ্রন্থাগার আমদানি
  2. তৃতীয় পক্ষের আমদানি
  3. অ্যাপ্লিকেশন-নির্দিষ্ট আমদানি

এই গোষ্ঠীগুলির মধ্যে লেকসোগ্রাফিকভাবে আমদানিগুলি অর্ডার করা উচিত, মামলা উপেক্ষা করে:

import foo
from foo import bar
from foo.bar import baz
from foo.bar import Quux
from Foob import ar

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



1
তবে এটি উদাহরণ থেকে অনুসরণ করে না যদি from x import yতার আগে বা পরে হওয়া উচিত from y import x- এটি মডিউলটির নাম বা আসল আমদানি যা আদেশ নির্ধারণ করে?
নিক্লাস আর।

1
আমি জানি এটি একটি রসিকতা, তবে একটি যথাযথ অহংকার হিসাবে আমি এটি উল্লেখ করতে চাই যে এটি আসলে পিইপি 8 থেকে আসছে
মারাত

8

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

  1. স্ট্যান্ডার্ড গ্রন্থাগার আমদানি
  2. সম্পর্কিত তৃতীয় পক্ষের আমদানি
  3. স্থানীয় অ্যাপ্লিকেশন / গ্রন্থাগার নির্দিষ্ট আমদানি

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



0

সমস্ত import xবিবৃতি বর্ণানুক্রমিক ক্রমের মান অনুসারে বাছাই করা উচিত xএবং from x import yবিবৃতিগুলির xবাছাই করা গোষ্ঠীগুলি from x import yঅবশ্যই বিবৃতিগুলির সাজানো গোষ্ঠী অনুসরণ করতে হবে import x

import abc
import def
import x
from g import gg
from x import xx
from z import a

0

আমি মনে করি গৃহীত উত্তরটি কিছুটা ভার্জোজ। এখানে টিএলডিআর:

প্রতিটি গোষ্ঠীকরণের মধ্যে, প্রতিটি মডিউলের সম্পূর্ণ প্যাকেজ পাথ অনুসারে আমদানিগুলি অভিধানের অনুসারে বাছাই করা উচিত case

গুগল কোড শৈলী গাইড

সুতরাং, তৃতীয় বিকল্পটি সঠিক:

import abc
import def
from g import yy  # changed gg->yy for illustrative purposes
import x
from xx import xx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.