মাল্টি-লাইন আমদানির জন্য কি প্রস্তাবিত বিন্যাস আছে?


113

আমি পড়েছি পাইথনে বহু-লাইন আমদানি কোডিংয়ের জন্য তিনটি উপায় রয়েছে

স্ল্যাশ সহ:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
    LEFT, DISABLED, NORMAL, RIDGE, END

সদৃশ নকলগুলি:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END

প্রথম বন্ধনী সহ:

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
    LEFT, DISABLED, NORMAL, RIDGE, END)

এই বিবৃতিগুলির জন্য কি পুনরায় সংযুক্ত ফর্ম্যাট বা আরও মার্জিত উপায় আছে?


3
এত আমদানি সহ কেন শুধু নয় from Tkinter import *?
ইনবার রোজ

2
এটি একটি উদাহরণ। সত্যিকারের বক্তব্যটি from data.forms import AddressEmbeddedField, PhoneEmbeddedField, MailEmbeddedField, \ WebEmbeddedFieldতবে ডেটা.ফোর্সে থাকা এম্বেড থাকা বাকী সমস্ত ক্ষেত্র আমদানি করতে চায় না
ম্যানুয়েল আলভারেজ

18
অনেক কারণ. উদাহরণস্বরূপ, আপনি সচেতন নন এমন অনেকগুলি ভেরিয়েবল ওভাররাইট করতে পারেন। আপনি কি আমদানি করা সমস্ত নাম জানেন from Tkinter import *? আমি নই. এবং আইডিইগুলি এই নামগুলি (সম্ভবত) কিনা তা জানতে পারে না, সুতরাং আপনি কোনও অবৈধ নাম লিখেছেন কিনা তা তারা জানাতে সক্ষম হয় না।
থারস্টেন ক্র্যাঞ্জ

2
@ ইন্নবররোজ এটি একটি খারাপ অভ্যাস, স্ট্যাকওভারফ্লো দেখুন / প্রশ্নগুলি দেখুন / 1536১১১২৫/২
ইউভাল প্রস

উত্তর:


161

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

from Tkinter import (
    Button,
    Canvas,
    DISABLED,
    END,
    Entry,
    Frame,
    LEFT,
    NORMAL,
    RIDGE,
    Text,
    Tk,
)

প্রতিটি কমিট বা পিআরতে কী কী উপাদান যুক্ত / সরানো হয়েছে তা সহজেই দেখার অতিরিক্ত সুবিধা রয়েছে।

সামগ্রিকভাবে যদিও এটি একটি ব্যক্তিগত পছন্দ এবং আমি আপনাকে যা ভাল লাগে তার সাথে যেতে পরামর্শ দেব।


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

1
isort স্বয়ংক্রিয়ভাবে বিভিন্ন শৈলী বহু-লাইন আমদানির ফরম্যাট করতে ব্যবহার করা যেতে পারে, দেখুন github.com/timothycrosley/isort#multi-line-output-modes
মতিন

15

আপনার উদাহরণগুলি পিইপি 328 থেকে এসেছে বলে মনে হচ্ছে । ঠিক এই সমস্যার জন্য প্রথম বন্ধনী-স্বরলিপি প্রস্তাবিত, তাই সম্ভবত আমি এটি বেছে নিতে পারি।


4

আমি প্রথম বন্ধনীগুলির পূর্বে এবং পরে যুক্ত নতুন লাইনের সাথে পিইপি 328 এর প্রথম বন্ধনী চিহ্নিতকরণের সাথে যাব :

from Tkinter import (
    Tk, Frame, Button, Entry, Canvas, Text, 
    LEFT, DISABLED, NORMAL, RIDGE, END
)

এটি জাঙ্গো ব্যবহার করে এমন ফর্ম্যাট :

from django.test.client import Client, RequestFactory
from django.test.testcases import (
    LiveServerTestCase, SimpleTestCase, TestCase, TransactionTestCase,
    skipIfDBFeature, skipUnlessAnyDBFeature, skipUnlessDBFeature,
)
from django.test.utils import (
    ignore_warnings, modify_settings, override_settings,
    override_system_checks, tag,
)

পিইপি 328-তে প্রথম বন্ধনের পরে বা নতুন যোগসূত্র যুক্ত হয়নি?
গ্যান্ডালফ স্যাক্সে

@ গ্যান্ডালফ্যাক্স পিইপি 328 শব্দার্থবিজ্ঞানের বিষয়ে ছিল (ভাষায় একটি নতুন বৈশিষ্ট্য যুক্ত করা), বিন্যাস সম্পর্কে নয়।
ম্যাক্স ম্যালিশ

আমি তখন বেশ বুঝতে পারি না। আপনি PEP 328 কে বহু-লাইন আমদানির জন্য প্রথম বন্ধনী হিসাবে উদ্ধৃত করেছেন, কিন্তু তাদের কোনও নেই? "আমি প্রথম বন্ধনীগুলির পূর্বে এবং পরে যুক্ত নতুন লাইনের সাথে পিইপি 328 এর প্রথম বন্ধনীর পরিচয় দিয়ে যাব:"
গ্যান্ডালফ স্যাক্সে

পিইপি 328 ভাষাতে প্রথম বন্ধনীর পরিচয় যুক্ত করেছে। প্রথম বন্ধনী স্বরলিপি ভালো একাধিক মডিউল আমদানি করার ক্ষমতা হল: from foo import (bar, baz)। পিইপি 328 বিন্যাস সম্পর্কে কিছুই বলে না।
ম্যাক্স ম্যালিশ

আহ ঠিক আছে, আমি এখন আপনাকে কী বলতে চাইছি :)
গ্যান্ডালফ স্যাক্সে

-4

সাধারণত টিনেটারের সাথে, এটি ব্যবহার from Tkinter import *করা ঠিক আছে কারণ মডিউলটি কেবলমাত্র এমন নামগুলি রফতানি করবে যা স্পষ্টভাবে উইজেট রয়েছে।

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

এই সমস্ত নাম আপনার সুযোগে উপলব্ধ করা হয়েছে বলে আমি ব্যক্তিগতভাবে মনে করি যে আমদানি করা নামগুলি সবচেয়ে ভাল দেখতে পাওয়ায় বিকল্পগুলি 2 সর্বাধিক পরিষ্কার। এরপরে আপনি এটিকে আরও বিভক্ত করতে পারেন এমন নামগুলি একে অপরের সাথে একত্রে গোষ্ঠীভুক্ত করার জন্য। আপনার উদাহরণে আমি করা হতে পারে Tk, Frameএবং Canvasআলাদাভাবে তারা গ্রুপ, একসঙ্গে উইজেটের যখন থাকার Buttonএবং Textআলাদাভাবে তারা একটি দৃশ্য ছোট উপাদান হিসাবে।


10
এক্স আমদানি *
টলো পামার

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

1
রেফারেন্সের জন্য, from X import *এমনকি __all__সঠিকভাবে ব্যবহার করা প্যাকেজগুলির ক্ষেত্রেও সমস্যাটি হ'ল স্থায়ী কোড বিশ্লেষকরা যেমন pyflakesঅপরিজ্ঞাত নামগুলি সনাক্ত করতে পারেন না import *কারণ এটি অনুমান করে যে কোনও অপরিজ্ঞাত নাম সম্ভবত দ্বারা আমদানি করা হয়েছিল *
রুবেনলগুনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.