1-sahifa 2-sahifa
Download 363.98 Kb.
|
Python
- Bu sahifa navigatsiya:
- 242-sahifa 242
- MASLAHAT
- 243-bet 24.7. Mashqlar 243 24.6. Xulosa
- 244-bet 25 kutubxonalar: paketlar va modullar
- 245-sahifa 25.3. Paketlarni import qiling 245
- 25.3. Paketlarni import qiling
- 247-sahifa 25.5. sysatpath 247
- 249-bet 25.7. Mashqlar 249
- 250-bet 26 Toliq misol
- 251-sahifa 26.1. mush.py 251
- 252-sahifa 252
- 253-sahifa 26.2. Ushbu kod nima qiladi 253 26.2. Ushbu kod nima qiladi
- 255-sahifa 26.4. ! 255
24.5. Importni tashkil qilish PEP 8-ga binoan import buyruqlari joylashgan bo'lishi kerak modul hujjatlari qatoridan keyin fayl liniyasi. Har bir satr bo'lishi kerak bitta import buyrug'i mavjud va import buyruqlari bo'lishi kerak birgalikda guruhlangan: ❍ standart kutubxonadan import qilish. Third Uchinchi tomon kodidan import qiling. Local Mahalliy paketlardan import qiling.
242 24-bob. Kutubxonalarni import qilish Masalan, modulning boshlanishi quyidagicha ko'rinishi mumkin: #! / usr / bin / env python3 "" " Modul yozuvlarni JSON-ga o'zgartiradi va ularni ma'lumotlar bazasida saqlaydi "" "
import json # Standart kutubxonalar import psycopg2 # Uchinchi tomon kutubxonalari import recordconverter # Mahalliy kutubxonalar ...
Guruhlangan import buyruqlari alfa tomonidan qulay tartiblangan vitu.
Ba'zida import buyruqlari quyidagini keyinga qoldirishi mumkin sabablar: • davriy importning oldini olish uchun (qaysi holatlarda) to'dalar modullari bir-birini import qiladi). Agar qila olmasangiz (yoki xohlamasangiz) tsiklik importni oldini olish uchun reaktor Bundan tashqari, import buyrug'i kod yoki funktsiyaga yoki usulga joylashtirilishi mumkin ulardan import qilinadigan narsalar deyiladi. Ba'zi modullarda mavjud bo'lmagan modullarni olib kirishni oldini olish tizimlari. • Katta modullarni olib kirishni oldini olish uchun ishlatmang Dasturda Mykh.
24.7. Mashqlar 243 24.6. Xulosa Ushbu bob Python-ga kutubxonalarni import qilishni ko'rib chiqdi. Python katta standart 1 kutubxonasiga ega va sizga kerak bo'ladi kodlardan foydalanish uchun ushbu kutubxonalarni import qiling. Kitob yo'q bir vaqtlar Pythonda ob'ektlardan boshqa narsa yo'qligi ta'kidlangan. va siz ko'pincha ushbu ob'ektlarga ishora qiluvchi o'zgaruvchilar yaratasiz. Da modulni import qilish ob'ektga ishora qiluvchi o'zgaruvchini yaratadi moduli Shundan so'ng siz istalgan elementga murojaat qilishingiz mumkin qidirish operatsiyasidan foydalangan holda modul nomlari bo'sh joylari ( . ). Siz shuningdek nomlar maydonining qismlarini tanlab import qilishingiz mumkin moduli dan amri . Agar siz import qilingan nomni o'zgartirmoqchi bo'lsangiz element sifatida, konstruktsiya sifatida foydalaning . 24.7. Mashqlar 1. standart Python kutubxonasida JSON bilan ishlash uchun paketni toping. Kutubxona modulini import qiling va atributlarni ko'ring. Qo'shimcha ma'lumot olish uchun yordam funktsiyasidan foydalaning . moduldan foydalanish to'g'risida fikr. Serializatsiyalashtirish lug'ati, havolasi- asosiy "nomi" ismingiz va asosiy «yoshi» siz yosh bilan, JSON satriga. Python-da JSON-ni Desializatsiya qiling. 2. Chiqish uchun standart Python kutubxonasida paketni toping o'tkaziladigan kataloglar. Ushbu paketdan foydalaning va yozing Katalog nomini oladigan funktsiya barcha fayllarning ro'yxatini oladi ushbu katalogda joylashtirilgan va har biri uchun fayllar soni ko'rsatilgan hisobot ko'rsatiladi th kengaytirish. 1 https://docs.python.org/3/library/index.html
25 kutubxonalar: paketlar va modullar 24-bo'limda siz kutubxonalarni qanday import qilishni o'rgandingiz. Ushbu bobda biz Keling, kutubxona nima ekanligini tushunaylik. Import paytida Kutubxonaga ikkita talab qo'yiladi: 1. Kutubxona modul yoki paket bo'lishi kerak . 2. Kutubxona o'zgaruvchi tomonidan belgilangan joyda bo'lishi kerak PYTHONPATH muhiti yoki Python sys.path o'zgaruvchisi .
import uchun mos. PEP 8 ga binoan, modulli fayl nomlari Qisqa va kichik harflardan iborat bo'lishi kerak. Belgilar pastki chiziqlarni o'qish uchun foydalanish mumkin. 25.2. Paketlar Python-dagi paket bu nomlangan faylni o'z ichiga olgan katalog __init__.py . __Init__.py faylida har qanday bajarilish bo'lishi mumkin (yoki.) odatda bo'sh bo'ling). Bundan tashqari, katalogda o'zboshimchalik bo'lishi mumkin modullar va pastki paketlar soni.
25.3. Paketlarni import qiling 245 Kodni yozishda nimani qo'llash yaxshiroq - modul yoki paket? Men odatda sodda variant bilan boshlayman va moduldan foydalanaman. Agar Men o'zimning modullarimda alohida qismlarni tanlashim kerak, men oldindan Men modullarni paketga tarqataman. Mashhur SQLAlchemy 1 loyihasidagi katalog tuzilishiga misol (o'rta- ma'lumotlar bazalari uchun ob-havoga oid xaritalash): qallimiya / __init__.py dvigatel / __init__.py tayanch.py schema.py PEP 8-ga ko'ra, paketlar kataloglarining nomlari qisqa bo'lishi kerak kichik harf bilan yozing. Pastki chiziqcha belgilari ruxsat etilgan 25.3. Paketlarni import qiling Paketni import qilish uchun paket nomi bilan import buyrug'idan foydalaning (katalog nomi): >>> import sxolchemy Ushbu buyruq sqlchechemy / __ ташабб__.py faylini hozirgi bo'sh joyga import qiladi . to'plam PYTHONPATH yoki sys.path-da topilgan bo'lsa, nomlar oralig'i . Siz foydalanmoqchi bo'lsangiz Ustun va ForeignKey darslari moduli schema.py , quyidagi parchalarning har biri bajaradi. Birinchisi o'z ichiga oladi sqlalchemy.schema sizning ism maydoningizda, ikkinchisi esa faqat sxema nomlari maydoni : >>> import sqlalchemy.schema >>> col = sqlalchemy.schema.Column () >>> fk = sqlalchemy.schema.ForeignKey () 1 https://www.sqlalchemy.org/
246 25-bob. Kutubxonalar: paketlar va modullar yoki >>> kvlchemyni import qilish sxemasidan >>> col = sxemasi.Qo'l () >>> fk = sxema.ForeignKey () Va agar sizga faqat ustunlar sinfi kerak bo'lsa , ushbu sinfni bitta bilan import qiling ikki yo'l bilan: >>> import sqlalchemy.schema.Column >>> col = sqlalchemy.schema.Column () yoki >>> sqlalchemy.schema import ustunidan >>> col = Ustun () 25.4. PYTHONPATH PYTHONPATH atrof-muhit o'zgaruvchisi nostandart kataloglarning ro'yxatini o'z ichiga oladi. Python modullar yoki paketlarni qidirayotgan gov. Odatda bu o'zgarish Naya bo'sh. PYTHONPATHni o'zgartirish odatda kerak emas, agar bo'lmasa rivojlanish jarayonida siz hanuzgacha bo'lgan kutubxonalardan foydalanishni xohlamaysiz o'rnatilmagan. MASLAHAT Agar sizda biron bir jiddiy sabab bo'lmasa , PYTHONPATH o'zgaruvchini bo'sh qoldiring. uning o'zgarishi uchun unvon. Ushbu bo'limda qachon sodir bo'lishi mumkinligi ko'rsatilgan o'zgartirish. Buning oqibatlari boshqa ishlab chiquvchilar uchun chalkash bo'lishi mumkin - PYTHONPATH o'zgaruvchisi ekanligini unutib qo'ysangiz, kodingizni tuzatmoqchi bo'lganlar o'zgartirildi. Agar kodni /home/test/a/plot.py fayliga kiritgan bo'lsangiz , lekin katalogdan ishlagan bo'lsangiz / home / test / b / , PYTHONPATH- dan foydalanib, ushbu kodga kirishni ta'minlaydi. Aks holda, agar plot.py fayli tizim tomonidan o'rnatilmagan bo'lsa Python vositalari yoki asboblari, uni ishlatib import qilishga harakat qilmoqdalar ImportError xatosiga olib keladi : >>> import uchastkasi Traceback (eng so'nggi qo'ng'iroq oxirgi):
25.5. sysatpath 247 Fayl " ImportError: Plot deb nomlangan modul mavjud emas Agar siz Python-ni o'zgaruvchan qiymat bilan ishlatsangiz PYTHONPATH , Python-ga kutubxonalarni qaerdan qidirish kerakligini aytadi: $ PYTHONPATH = / uy / sinov / python3 Python 3.6.0 (standart, 2016 yil 24-dekabr, 08:01:42) >>> import uchastkasi >>> fit.histogramma () ...
MASLAHAT Python paketlarini o'rnatish uchun paket menejerlaridan foydalanishingiz mumkin, Windows bajariladigan yoki Python-ning ixtisoslashtirilgan vositalari, masalan, 1- quvur . 25.5. sysatpath Sys moduli kataloglarning ro'yxati bo'lgan yo'l atributiga ega Python kutubxonalarni qidirmoqda. Ko'rib chiqib sys.path , siz barcha prosmo- ko'rasiz poezd ma'lumotnomalari: >>> import sys >>> tizim ['', '/usr/lib/python35.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/plat-darwin', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages'] MASLAHAT Agar ko'rish xatosiga duch kelsangiz ImportError: Hujjat deb nomlangan modul mavjud emas, sys.path o'zgaruvchisiga qarang va unda mavjudligini tekshiring Foo.py fayl joylashgan katalog (agar u modul bo'lsa). Agar fitna bo'lsa 1 https://pip.pypa.io/
248 25-bob. Kutubxonalar: paketlar va modullar paket, keyin fitna / katalog kataloglardan birida bo'lishi kerak dan sys.path : >>> import uchastkasi Traceback (eng so'nggi qo'ng'iroq oxirgi): Fayl " ImportError: Plot deb nomlangan modul mavjud emas >>> sys.path.append ('/ home / test / a') >>> import uchastkasi >>> fit.histogramma () Bundan tashqari , buyruq satridan PYTHONPATH-ga ushbu katalogni qo'shishingiz mumkin Python-ni ishlatish uchun ishlatilgan. Biz yana bir bor ta'kidlaymizki, odatda sysypath yoki PYTHONPATH ni o'rnatish qo'lda kerak emas. Oddiy holatda siz kutubxonalarni o'rnatasiz va O'rnatish grammage ularni to'g'ri katalogga joylashtiradi. MASLAHAT Agar fayl tizimida kutubxonaning joylashuvini bilmoqchi bo'lsangiz, __file__ atributini tekshiring : >>> import json >>> json .__ file__ '/usr/lib/python3.6/json/__init__.py' Ushbu usul faqat Python-da amalga oshirilgan kutubxonalar bilan ishlaydi. Sys moduli Python-da amalga oshirilmagan, shuning uchun bu urinish muvaffaqiyatsiz tugadi. muvaffaqiyatsizlik: >>> import sys >>> sys .__ file__ Traceback (eng so'nggi qo'ng'iroq oxirgi): ... AttributeError: 'sys' modulida '__file__' atributi yo'q 25.6. Xulosa Ushbu bob modullar va paketlarni o'z ichiga oladi. Modul vakili Python fayli. Paket - bu ichidagi katalog
25.7. Mashqlar 249 __Init__.py nomli fayl mavjud emas . Paketda boshqa narsalar ham bo'lishi mumkin modullar va paketlar. Qaysi kataloglarni aniqlaydigan yo'llar ro'yxati mavjud Kutubxonalarni import qilish uchun Python. Ushbu ro'yxat saqlanadi yilda sys.path . Ushbu o'zgaruvchining qiymatini tekshirish bilan siz qaysi toifalarni topasiz jurnallarni Python skanerdan o'tkazadi. Siz shuningdek ushbu ro'yxatni qachon yangilashingiz mumkin PYTHONPATH o'zgaruvchisidan foydalanish yoki to'g'ridan-to'g'ri o'zgarishlar qilish. Ammo odatda siz ushbu o'zgaruvchini o'zgartirish o'rniga ixtisoslashgan foydalanasiz Paket kabi o'rnatish moslamalari. 25.7. Mashqlar 1. nomlangan funktsiyani o'z ichiga olgan start.py modulini yarating Bosh . Bosh funktsiyasi bir qator olish va mantiqiy qaytarib kerak bu son asosiy bo'ladimi (ya'ni, u bo'linganmi) u faqat 1 uchun va o'zi uchun). Boshqa katalogga o'zgartiring, ishga tushiring Python-ni ishga tushiring va buyruqni bajaring import boshidan boshlab Urinish muvaffaqiyatsiz bo'lishi kerak. Sys o'zgaruvchisini yangilang . funktsiyani moduldan import qilishingiz mumkin bo'lgan yo'l . Keyin qiymatni PYTHONPATH ga sozlang . 2. Idishlarni to'plamini yarating . Yilda __init__.py fayl, joylashtirish Bosh kodni dan oldingi misol. Terminaldagi boshqa katalogga o'zgartirish, python-ni ishga tushiring va buyruqni bajaring idish-tovoq importidan asosiy mahsulot Urinish muvaffaqiyatsiz bo'lishi kerak. Yangilanish o'zgaruvchisi sys.path, shuning uchun funktsiyani paketdan import qilishingiz mumkin. Keyin qiymatni PYTHONPATH ga sozlang .
26 To'liq misol Ushbu bobda siz skriptda kodni qanday tashkil qilishni bilib olasiz. Unda UNIX mushuk buyrug'ini soddalashtirilgan bajarish uchun manba kodi berilgan . Mushuk buyruq buyruq satriga va displeylar ularni dan fayl nomlari o'qiydi ekranda tarkib. Buning uchun turli xil variantlar mavjud Raqam qo'shish kabi operatsiyalarni yakunlang. Ushbu skript odatda Python faylida kod qanday tashkil qilinganligini ko'rsatadi.
Quyida Python-da UNIX mushuk buyrug'ining bajarilishi . Yoqilgan satr raqamlarini qo'shish uchun chen varianti (- raqam ), ammo boshqalar mushuk parametrlari qo'llab-quvvatlanmaydi. Kodni cat.py deb nomlangan faylda saqlang : #! / usr / bin / env python3 r "" "Uniks" mushuk "buyrug'ini oddiygina bajarish. Faqat '`- raqam' 'parametri qo'llab-quvvatlanadi. Misol fayl tuzilishini namoyish etadi va foydali Python dasturlash usullari. Butun modul uchun uch tirnoqli hujjat qatori (ushbu fayl). Agar siz ushbu modulni import qilsangiz va "yordam (mushuk)" 'buyrug'ini bajaring, mumkin bunga ishonch hosil qiling. Hujjatlar qatorida "` hujjatlashtirish sinovi '',
26.1. mush.py 251 kodni dasturiy ishlatishda namuna bo'lib xizmat qiladi. Ushbu hujjat qatorini doctest moduli bajarishi mumkin. va chiqishiga ko'ra uning to'g'riligini tekshiring. >>> import io >>> fin = io.StringIO (\ ... "salom \ n dunyo miqyosida \ n ') >>> fout = io.StringIO () >>> mushuk = Katter ([fin], ... show_number = To'g'ri) >>> cat.run >>> chop etish (fout.getvalue ()) 1 salom 2 dunyo
"" " import arparse import jurnali import sys __version__ = '0.0.1' logging.basicConfig ( daraja = loging.DEBUG) sinf Catter (ob'ekt): "" " Fayllarni bog'lash uchun sinf standart chiqishda Sinf hujjatlari liniyasi, "help (cat.Catter)" `buyrug'i bilan chiqariladi "" "
def __init __ (o'zi, fayllar, show_number = Noto'g'ri): self.files = fayllar self.show_number = show_number def run (o'zini, fout): # Raqamlar uchun 6 ta bo'sh joydan foydalaning # o'ng hizalanadi fmt = '{0:> 6} {1}'
252 26-bob. To'liq misol self.fayllarda fin uchun: logging.debug ('{0} tortish'. format (fin)) sanash uchun, raqamlar qatori (fin, 1): agar self.show_number: fout.write (fmt.format ( hisoblash, chiziq)) yana: fout.write (chiziq) def main (args): "" "
Argumentlar bilan mushuk mantig'i "" "
tahlil qiluvchi = argparse.ArgumentParser ( description = 'FILE (lar) ni bog'lash yoki' 'standart chiqish, standart chiqish') parser.add_argument ('- versiya', action = 'version', version = __ version__) parser.add_argument ('- n', '- raqam', action = 'store_true', help = 'barcha chiqish qatorlarini raqamlash') parser.add_argument ('fayllar', nargs = '*', type = argparse.FileType ('r'), standart = [sys.stdin], metavar = 'FILE') parser.add_argument ('- ishga tushirish sinovlari', action = 'store_true', help = 'Modul sinovlarini o'tkazish') args = parser.parse_args (args) agar args.run_tests: import doktest doctest.testmod () yana: cat = Catter (args.files, args.number) cat.run (sys.stdout) logging.debug ('tortish tugadi') agar __name__ == '__main__': asosiy (sys.argv [1:]) Agar siz ushbu kodning barchasini qo'lda kiritishni xohlamasangiz, nusxasini yuklab oling Internetdan 1 . 1 https://github.com/mattharrison/IllustratedPy3/
26.2. Ushbu kod nima qiladi? 253 26.2. Ushbu kod nima qiladi? Ushbu kod fayl tarkibiga aks etadi (ehtimol bilan Windows va UNIX tizimlaridagi terminalga yo'nalishlarning o'lchami bo'yicha : $ python3 cat.py -n README.md 1 # IllustratedPy3 2 3 Agar sizda savol yoki xavotirlar bo'lsa, yuqoridagi muammolarni bosing. Agar siz ushbu kodni -h tugmachasi bilan ishlatsangiz , unda barcha yordam ko'rsatiladi buyruq satrining argumentlari bo'yicha hujjatlar: $ python3 cat.py -h foydalanish: cat.py [-h] [- o'zgartirish] [-n] [- -run-testlar] [FILE [FILE ...]] FILE (lar) ni yoki standart kirishni standart chiqish uchun ulang pozitsiyaviy dalillar: FILE ixtiyoriy dalillar: -h, - bu yordam xabari va chiqish oynasini ko'rsating - versiya versiyasi va chiqish versiyasi -n, - barcha chiqish qatorlarining raqami -run-testlar modul sinovlaridan o'tkaziladi Buyruq satrini sintaktik tahlil qilish funktsiyada amalga oshiriladi asosiy va standart kutubxonadan argparse moduli tomonidan ta'minlanadi . Argparse moduli barcha argumentlarni tahlil qiladi . Agar bilish bo'lsangiz argparse moduli qilsa, borib uchun Internetda sharhlar yoki yordam funktsiyasidan foydalaning . Asosiy Gap shundaki, siz ArgumentParser sinfining namunasini yaratasiz va har bir buyruq satri parametrlari uchun .add_argumentga qo'ng'iroq qiling . Siz buyruq satri parametrlarini belgilang, nima harakat emasligini ayting ular bajarishi kerak (odatiy, bu qiymatni tejash, parametrga rioya qilgan holda) va ma'lumotnomani taqdim eting. piyoz. Dalillarni qo'shib so'ng, .parse_args usuli bo'ladi deb nomlangan uchun buyruq satrining argumentlari ( sys.argv- dan olingan ). Natija tat .parse_args biriktirilgan ob'ektni anglatadi
254 26-bob. To'liq misol parametrlari nomlari bilan belgilanadigan atributlar. Bunda agar bu fayllar .fayl va .number xususiyatlari bo'lsa . ESLATMA Bundan tashqari, ma'lumot olish uchun REPL dan foydalanishingiz mumkin. modul haqida va uni etkazib berishga kiritilgan hujjatlarni ko'rish. Eslab qoling yordam funktsiyasi ? Modulni unga o'tkazing va u hujjatlar qatorini chiqaradi modul darajasi. Modulning dastlabki kodini ko'rishni istasangiz, bu ham mumkin. Ob'ektning xususiyatlarini ko'rsatadigan dir funktsiyasini eslaysizmi ? Qarayapti argparse moduli haqida ma'lumot , siz uning __file__ atributiga ega ekanligini ko'rasiz . Bu kompyuterdagi faylning joylashishini ko'rsatadi: >>> import arparse >>> argparse .__ file__ '/usr/local/Cellar/python3/3.6.0/Frameworks/ Python.framwork / Versiyalar / 3.6 / lib / python3.6 / argparse.py ' Kod Python-da yozilganligi sababli (ba'zi modullar C-da yozilgan), mumkin dastlabki faylni ko'rish. Siz allaqachon mumkin modulni o'qing va nima qilish kerakligini tushuning. Dalillarni ajralish so'ng, dastur bir misol hosil catter , belgilab kodni llen-ga kiritadi va buning uchun .run usulini chaqiradi . Misol biroz qo'rqinchli ko'rinadi, ammo hamma sinchkov Kitobda taksilar ko'rib chiqilgan. Ushbu bobning qolgan qismi muhokama qilinadi Ushbu kodning tuzilishi va boshqa jihatlari yaratilgan.
Python modulining asosiy tarkibiy qismlari quyidagi tartibda: ❍ #! / Usr / bin / env python3 (agar modul shuningdek shunday ishlatilsa skript);
❍ modul hujjatlari liniyasi; Orts import ;
26.4. #! 255 Ad metadata va global o'zgaruvchilar; The jurnal bilan operatsiyalar; ❍ amalga oshirish; ❍ agar __name__ == '__main__': (agar modul shuningdek shunday ishlatilgan bo'lsa) ssenariy); ❍ tortishish .
Ushbu ro'yxat tavsiyalardan boshqa narsa emas. Ko'p narsa bo'lishi mumkin tasodifiy ravishda kuzatib boring va hamma elementlar bo'lmasligi kerak - har bir faylda. Masalan, har bir fayl bajarilishi shart emas qobiq skript sifatida. Siz fayllaringizdagi har qanday tuzilishdan foydalanishingiz mumkin, ammo javobgarlik chunki bunday qaror sizga bog'liq. Sizning kodingiz foydalanuvchilari baxtsiz bo'ladi (yoki yamalar chiqaradi). Har qanday o'quvchi umumiy qabul qilingan qoidalarga muvofiq yaratilgan kodni afzal ko'radi, chunki u qila oladi tezda uning mantig'ini aniqlang. 26.4. #! Skript sifatida ishlatiladigan faylning birinchi qatori o'z ichiga oladi belgilar ketma-ketligi #! / usr / bin / env python3 . Operatsion tizimlarda UNIX oilaviy iplari, bu satrni aniqlash uchun qayta ishlanadi skriptni qanday ishlatish kerak. Shunga ko'ra, ushbu chiziq kiritilgan faqat skriptlar sifatida ishlaydigan fayllar. Bu foydalanishi kerak python 3 yildan beri buyrug'ini python amri aksariyat tizimlarda Python 2-versiyasiga tegishli. Download 363.98 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling