Всичко за Python - от начинаещи до напреднали

Всичко, което трябва да знаете в една статия

Тази статия има за цел да очертае всички ключови точки на езика за програмиране на Python. Целта ми е информацията да бъде кратка, уместна и да се съсредоточа върху най-важните теми, които са абсолютно необходими за разбиране.

След като прочетете този блог, вие ще можете да използвате всяка библиотека Python или да внедрите свои собствени пакети Python.

Не се очаква да имате каквито и да било познания по програмиране и ще бъде много бързо да разберете всички необходими концепции.

Ще подчертая и най-важните въпроси за дискусия, които хората обикновено питат относно езика за програмиране на Python.

Нека изграждаме знанията постепенно и до края на статията ще имате задълбочено разбиране на Python.

Ето 5 интересни упражнения Python, които да ви помогнат в обучението:

Горещо препоръчвам тази статия, тъй като показва как можете да използвате знанията си в Python, които сега ще обяснявам, за да изградите стабилно приложение:

Тази статия съдържа 25 ключови теми. Да започваме.
Снимка на Къртис МакНютон на Unsplash

1. Представяне на Python

Какво е Python?

  • Тълкуван обектно-ориентиран динамично написан скриптов език на високо ниво.
  • Преводачът Python чете един ред код в даден момент, интерпретира го на машинен език с ниско ниво (байтов код) и след това го изпълнява.
  • В резултат на това обикновено се срещат грешки във времето за изпълнение.

Защо Python?

  • Python е най-популярният език поради факта, че е по-лесно да го кодирате и разбирате.
  • Python е обектно ориентиран език за програмиране и може да се използва и за писане на функционален код.
  • Това е подходящ език, който преодолява пропуските между бизнеса и разработчиците.
  • Впоследствие отнема по-малко време за пускане на пазара на програма Python в сравнение с други езици като C # / Java.
  • Освен това има голям брой пакети за машинно обучение и аналитични програми на питон.
  • Наличен е голям брой общности и книги, които поддържат разработчиците на Python.
  • В Python могат да бъдат внедрени почти всички видове приложения, вариращи от аналитични за прогнозиране до потребителски интерфейс.
  • Не е необходимо да декларирате променливи типове. По този начин е по-бързо да се приложи приложението Python.

Защо не Python?

  • Python е по-бавен от C ++, C #, Java. Това се дължи на липсата на оптимизатори Just In Time в Python.
  • Синтактичното ограничение на бялото пространство на Python затруднява внедряването на нови кодери.
  • Python не предлага разширени статистически характеристики, както R.
  • Python не е подходящ за ниско ниво на системно и хардуерно взаимодействие.

Как работи Python?

Това изображение илюстрира как python работи на нашите машини:

Ключът тук е преводачът, който е отговорен за превода на високо ниво на Python на машинен език на ниско ниво.

2. Променливи - типове обекти и обхват

  • Променливите съхраняват информация, която може да се използва във вашата програма, като например за задържане на потребителски входове, местни състояния на вашата програма и т.н.
  • Променливите имат име, така че да могат да бъдат позовавани в кода.

Python поддържа числа, низове, набори, списъци, кортежи и речници. Това са стандартните типове данни.

Декларирайте и присвойте стойност на променлива

Присвояване задава стойност на променлива:

myFirstVariable = 1
mySecondVariable = 2
myFirstVariable = "Здравейте"
  • Присвояването на стойност е известно като свързване в Python.

Обърнете внимание как съм присвоил цяло число на стойност 1 и след това стойност на низ "Здравейте" на променливата myFirstVariable. Това е възможно поради факта, че типовете данни се въвеждат динамично в python.

Цифрова

  • Поддържат се цели числа, десетични знаци, поплавъци.
стойност = 1 # цяло число
стойност = 1.2 #плава с плаваща точка
  • Поддържат се и дългите. Те имат наставка L, напр. 9999999999999L

Strings

  • Текстова информация. Струните са последователност от букви.
  • Стойността на стойката е включена в кавички:
name = 'farhad'
  • Струните са неизменни. След като са създадени, те не могат да бъдат променени, напр.
a = 'аз'
на [1] = 'у'
Ще хвърли грешка тип
  • Когато променливите на низа са назначени нова стойност, а след това вътрешно, Python създава нов обект, който да съхранява стойността.

Променливите могат да имат локален или глобален обхват.

Местен обхват

  • Променливите, декларирани във функция, например, могат да съществуват само в блока.
  • След като блокът съществува, променливите също стават недостъпни.
def some_funcion ():
  TestMode = Грешно
print (TestMode) <- Прекъсва се, тъй като променливата не съществува отвън

В Python, ако друго и за / докато цикълният блок не създава локален обхват.

за i в обхват (1, 11):
    test_scope = "променлива вътре за контур"
печат (test_scope)

изход:

променлива вътре за контур

С блок if-else

is_python_awesome = Вярно
ако е_python_awesome:
    test_scope = "Python е страхотен"
печат (test_scope)

изход:

Python е страхотно

Глобален обхват

  • Променливите, които могат да бъдат достъпни от която и да е функция, имат глобален обхват. Те съществуват в рамките на __main__.
  • Можете да декларирате глобална променлива извън функциите. Важно е да се отбележи, че за да присвоите глобална променлива нова стойност, ще трябва да използвате ключовата дума „глобален“:
TestMode = Вярно
дефинира_ някои функции ():
  глобален TestMode
  TestMode = Грешно
some_function ()
print (TestMode) <- Връща невярно

Премахването на реда „global TestMode“ само ще променя променливата на False в рамките на функцията some_function ().

Забележка: Въпреки че по-късно ще напиша повече за концепцията на модулите, но ако искате да споделите глобална променлива в няколко модула, тогава можете да създадете споделен модулен файл, напр. config.py и намерете променливата си там. И накрая, импортирайте споделения модул във вашите потребителски модули.

Намиране на тип променлива

  • Ако искате да намерите тип на променлива, можете да внедрите:
тип ( "Фархад)
-> Връща 

Запетайки в целочислени променливи

  • Запетаите се третират като последователност от променливи, напр.
9,8,7 са три числови променливи

3. Операции

  • Позволява ни да извършим изчисления на променливи

Числови операции

  • Python поддържа basic *, /, +, -
  • Python също поддържа подово разделение
1 // 3 #returns 0
1/3 #returns 0,333
  • Освен това, python поддържа експоненция чрез ** оператор:
2 ** 3 = 2 * 2 * 2 = 8
  • Python също поддържа оператор Modulus (остатък):
7% 2 = 1

Струнни операции

Конкатни струни:

'A' + 'B' = 'AB'

Повторете низ:

„A“ * 3 ще повтори A три пъти: AAA

Нарязването:

y = 'Abc'
y [: 2] = ab
y [1:] = bc
y [: - 2] = a
y [-2:] = bc

Обръщането:

x = 'abc'
x = x [:: - 1]

Отрицателен индекс:

Ако искате да започнете от последния символ, използвайте отрицателен индекс.

y = 'abc'
print (y [: - 1]) # ще върне c

Използва се и за премахване на всякакви нови линейни колички / пространства.

Намиране на индекс

name = 'farhad'
index = name.find ('r')
#returns 2
name = 'farhad'
index = name.find ('a', 2) # намира индекс на секунда a
#returns 4

За Regex използвайте:

  • split (): разделя низ на списък чрез regex
  • sub (): замества съвпадения низ чрез regex
  • subn (): замества съвпадения низ чрез регекс и връща броя на заместванията

изливане

  • str (x): Към низ
  • int (x): За цяло число
  • float (x): За плаване

Задайте операции

  • Set е нередовно събиране на данни. Можем да определим зададена променлива като:
a = {1,2,3}

Пресичане набори

  • За да получите това, което е общо в две групи
a = {1,2,3}
b = {3,4,5}
c = a.интерсекция (b)

Разлика в комплектите

  • За да извлечете разликата между два набора:
a = {1,2,3}
b = {3,4,5}
c = a.различие (b)

Съюз на колекциите

  • За да получите отчетлив комбиниран набор от два комплекта
a = {1,2,3}
b = {3,4,5}
c = a.union (b)

Терминален оператор

  • Използва се за писане на условни изявления в един ред.

Синтаксис:

[Ако е вярно], ако [Израз]] Иначе [Ако е невярно]

Например:

Получено = Вярно, ако x == 'Да', друго е невярно

4. Коментари

Коментари в една линия

# това е коментар от един ред

Множество редови коментари

Човек може да използва:

`` това е мулти
линия
comment```

5. Изражения

Изразът може да извършва булеви операции като:

  • Равенство: ==
  • Не е равно:! =
  • По-голям:>
  • По-малко: <
  • По-голям или равен> =
  • По-малко или равно <=

6. Мариноване

Преобразуването на обект в низ и изхвърлянето на низа във файл е известно като турширане. Реверсът е известен като изтриване.

7. Функции

  • Функциите са последователност от оператори, които можете да изпълните във вашия код. Ако видите повторение в кода си, тогава създайте функция за многократна употреба и я използвайте в програмата си.
  • Функциите могат да се позовават и на други функции.
  • Функциите премахват повторението във вашия код. Те улесняват отстраняването на грешки и намирането на проблеми.
  • И накрая, функциите позволяват кода да бъде разбираем и по-лесен за управление.
  • Накратко, функциите ни позволяват да разделим голямо приложение на по-малки парчета.

Определете нова функция

дефинира my_new_function ():
  print („това е новата ми функция“)

Функция за повикване

my_new_function ()

Намиране на дължина на низа

Обадете се на функцията len (x)

дъл ( "здравей")
отпечатъци 5

Аргументи

  • Аргументите могат да се добавят към функция, за да направят функциите общи.
  • Това упражнение е известно като обобщение.
  • Можете да предадете променливи на метод:
дефинирайте my_new_function (my_value):
  print („това е новата ми функция с„ + my_value)
  • Незадължителни аргументи:

Можем да предадем незадължителни аргументи, като предоставим стойност по подразбиране на аргумент:

дефинирайте my_new_function (my_value = 'здравей'):
  печат (MY_VALUE)
#Calling
my_new_function () => принтира здравей
my_new_function ('test') => тест за отпечатване
  • * аргументи:

Ако вашата функция може да вземе произволен брой аргументи, тогава добавете * пред името на параметъра:

def myfunc (* аргументи):
  върнете a
myfunc (а)
myfunc (а, Ь)
myfunc (а, б, в)
  • ** аргументи:

Тя ви позволява да предавате различен брой аргументи на ключови думи към функция.

Можете също да предавате в речника стойности като аргументи на ключови думи.

връщане

  • Функциите могат да върнат стойности като:
дефинирайте my_function (вход):
  връщане на входа + 2
  • Ако е необходима функция за връщане на няколко стойности, тогава е подходящо да се върне кортеж (стойности, разделени със запетая). По-късно ще обясня кортежите:
resultA, resultB = get_result ()
get_result () може да се върне ('a', 1), което е кортеж

Lambda

  • Анонимна функция с един израз
  • Това е вградена функция.
my_lambda = lambda x, y, z: x - 100 + y - z
my_lambda (100, 100, 100) # връща 0

Синтаксис:

променлива = ламбда аргументи: израз

Функциите на лямбда могат да бъдат предадени като аргументи на други функции.

реж. () и помощ ()

  • dir () -показва дефинирани символи
  • help () - показва документация
Снимка на Noah Silliman на Unsplash

8. Модули

Какво е модул?

  • Python се доставя с над 200 стандартни модула.
  • Модулът е компонент, който групира подобна функционалност на вашето решение python.
  • Всеки файл с код на python може да бъде опакован като модул и след това може да бъде импортиран.
  • Модулите насърчават компонентния дизайн във вашето решение.
  • Те предоставят концепцията за пространствата от имена, помагат ви да споделяте данни и услуги.
  • Модулите насърчават повторната употреба на кода и намаляват сблъсъците с променливи имена.

PYTHONPATH

  • Тази променлива на средата показва къде трябва да се ориентира преводачът Python, за да намери модулите. PYTHONHOME е алтернативен път за търсене на модул.

Как да импортирате модули?

  • Ако имате файл: MyFirstPythonFile.py и той съдържа множество функции, променливи и обекти, тогава можете да импортирате функционалността в друг клас, като просто направите:
импортира MyFirstPythonFile
  • Вътрешно време на изпълнение на python ще компилира файла на модула в байтове и след това ще стартира кода на модула.
  • Ако искате да импортирате всичко в модул, можете да направите:
импортирам my_module
  • Ако вашият модул съдържа функция или обект с име my_object, тогава ще трябва да направите:
печат (my_module.my_object)

Забележка: Ако не искате интерпретаторът да изпълни модула, когато е зареден, можете да проверите дали __name__ == '__main__'

2. От

  • Ако искате да получите достъп само до обект или части от модул от модул, можете да реализирате:
от my_module import my_object
  • Това ще ви позволи да получите достъп до вашия обект без препратка към вашия модул:
печат (my_object)
  • Можем също да правим от * да импортираме всички обекти
от импортирането на my_module *

Забележка: Модулите се импортират само при първия импорт.

Ако искате да използвате C модул, тогава можете да използвате PyImport_ImportModule

Използвайте импортиране от, ако искаме да използваме същото име, определено в два различни модула.

9. Пакети

  • Пакетът е директория от модули.
  • Ако вашето решение Python предлага голям набор от функционалности, групирани в модулни файлове, тогава можете да създадете пакет от вашите модули, за да разпределите и управлявате по-добре модулите си.
  • Пакетите ни позволяват да организираме по-добре модулите си, което ни помага да разрешаваме проблеми и да намираме модули по-лесно.
  • Пакетите на трети страни могат да бъдат импортирани във вашия код, като например панди / sci-kit learn и тензорни потоци, за да посочите няколко.
  • Един пакет може да съдържа голям брой модули.
  • Ако нашето решение предлага подобна функционалност, тогава можем да групираме модулите в пакет:
от packageroot.packagefolder.mod import my_object
  • В горния пример, packageroot е основната папка. packagefolder е подпапката под packageroot. my_module е файл с модул python в папката с папка.
  • Освен това името на папката може да служи като пространство на имена, напр.
от data_service.database_data_service.microsoft_sql.mod

Забележка: Уверете се, че всяка директория в пакета импортиране съдържа файл __init__.py.

Чувствайте се свободни да оставите файловете празни. Тъй като файловете __init__.py се импортират преди импортирането на модулите, можете да добавите персонализирана логика, като например стартиране на проверка на състоянието на услугата или за отваряне на връзки към база данни и т.н.

PIP

  • PIP е мениджър на пакети Python.
  • Използвайте PIP за изтегляне на пакети:
pip инсталиране на име на пакет

10. Условия

  • За да напишете, ако тогава:
ако a == b:
  отпечатай 'a is b'
elif a  b:
  печат „a е по-голям от b“
друго:
  печат „a е различен“

Забележете как се използват колони и вдлъбнатини за изразяване на условната логика.

Проверка на видовете

ако не е вещество (input, int):
  печат „Очакван Int“
  връщане Няма

Можете също да добавите условна логика в другата част. Това е известно като вложен режим.

# нека напишем условия в рамките на друго
друго:
 ако a == 2:
    отпечатайте „в рамките на друго“
 друго:
     отпечатайте „в рамките на друго“

11. Цикли

Докато

  • Въведете условие и стартирайте цикъла, докато условието не бъде изпълнено:
докато (вход <0):
 do_something (вход)
 вход = вход-1

За

  • Цикъл за няколко пъти
за i в обхват (0,10)
  • Превърнете се върху елементи или знаци от низ
за писмо в 'здравей'
  печатно писмо

Еднолинейни за

Синтаксис:

[Variable] AggregateFunction ([Стойност] за [елемент] в [колекция])

Добива

  • Да допуснем, че списъкът ви съдържа трилион записи и от вас се изисква да броите броя четни числа от него. Няма да е оптимално да се зареди целият списък в паметта. Вместо това можете да получавате всеки елемент от списъка.
  • xrange вместо диапазон може да се използва за повторение на елементите.

Комбинирайте за с If

  • Нека направим едно просто упражнение, за да разберем дали героят е с две думи
name = 'едно име'
anothername = 'onenameonename'
за символ в името:
  ако символ в друго име
     печат символ

почивка

  • Ако искате да прекратите цикъла
за i в обхват (0,10):
 ако (i == 5):
   почивка
докато вярно:
  x = get_value ()
  ако (x == 1):
     почивка
  • Да напишем Фибоначи за цикъл:
def fib (вход):
 ако (вход <= 1):
   възвръщаемост (ул (вход))
 друго:
   първо = 0
   секунда = 1
   брой = 0
   за броене в обхват (вход):
     резултат = първа + секунда
     печат (първа)
     първо = второ
     втори = резултат
     count = брой + 1
#print оператор ще изведе правилната стойност на fib
ПИБ (7)

12. Рекурсия

  • Самата функция, която се обажда, е известна като рекурсия.

Нека приложим рекурсивна функция на фактор:

Правила:

  • 0! = 1 # Фактор на 0 е 1
  • н! = n (n-1)! # Фактор на n е n * фактория на n-1

стъпки:

  • Създайте функция, наречена факториал с вход n
  • Ако n = 0 върнете 1, направете n x факторите на n-1
дефакториално (n):
  ако n == 0:
    връщане 1
  друго:
    връщане n * фактор (n-1)

Друг пример: Нека напишем рекурсивна функция на Фибоначи:

Правила:

  • Първите две цифри са 0 и 1
  • Останалите добавете последните две цифри

0, 1, 1, 2, 3, 5, 8…

стъпки:

  • Създайте функция, наречена уравнение, която приема вход n
  • Създайте две променливи първа и втора и ги присвойте със стойности 0 и 1
  • ако n = 0 връщане 0, ако n = 1 връщане 1 друг връщане (n-1) + (n-2)
дефиниция (n):
 ако (n <= 1):
   връщане n
 друго:
   възвратно ниво (n-1) + фигура (n-2)
печат (Фибоначи (6))

Важно е да имате проверка на изход, в противен случай функцията ще се окаже в безкраен цикъл.

13. Рамки и стек за обаждания

  • Python код се зарежда в рамки, които са разположени в стек.
  • Функциите се зареждат в рамка заедно с параметрите и променливите.
  • Впоследствие кадрите се зареждат в стек в правилния ред на изпълнение.
  • Stack очертава изпълнението на функциите. Променливите, декларирани извън функциите, се съхраняват в __main__
  • Stacks изпълнява първо последния кадър.

Можете да използвате проследяване, за да намерите списъка с функции, ако възникне грешка.

14. Колекции

списъци

  • Списъците са структури от данни, които могат да съдържат последователност от стойности от всякакъв тип данни. Те са сменяеми (могат да се актуализират).
  • Списъците са индексирани по цели числа.
  • За да създадете списък, използвайте квадратни скоби:
my_list = ['A', 'B']
  • За да добавите / актуализирате / изтриете елемент, използвайте индекс:
my_list.append ('C') #adds в края
my_list [1] = 'D' # актуализация
my_list.pop (1) # премахва
или
del my_list [1: 2] # премахва
my_list.extend (another_list) # добавя втори списък в края
  • Добавяне, повторение и срезове могат да се прилагат към списъци (точно като низовете).
  • Списъкът също така поддържа сортиране:
my_list.sort ()

кортежи

  • Кортежите са като списъци в смисъл, че могат да съхраняват поредица от обекти. Обектите отново могат да бъдат от всякакъв тип.
  • Капаците са по-бързи от списъците.
  • Тези колекции са индексирани с цели числа.
  • Кортежите са неизменни (не могат да се актуализират)
my_tuple = tuple ()
или
my_tuple = 'f', 'm'
или
my_tuple = ('f', 'm')

Забележка: Ако един кортеж съдържа списък с елементи, тогава можем да модифицираме списъка. Също така, ако зададете стойност на обект и съхраните обекта в списък и след това промените обекта, тогава обектът в списъка ще се актуализира.

речници

  • Речникът е една от най-важните структури на данни в света на програмирането. Той съхранява ключови / стойностни двойки обекти.
  • Той има много предимства, напр. оптимизирана функционалност за извличане на данни.
my_dictionary = dict ()
my_dictionary ['my_key'] = 1
my_dictionary ['another_key'] = 2
  • Можете също да създадете речник като:
my_dictionary = {'my_key': 1, 'other_key': 2}
  • Печат на съдържанието на речника
за ключ в речника:
  ключ за печат, речник [ключ]
  • Стойностите на речника могат да бъдат от всякакъв вид, включително низове, числови, логически, списъци или дори речници.
dictionary.items () # връща елементи
# проверка дали ключ съществува в речник
if ('някакъв ключ' в речника):
  #направи нещо

Забележка: Ако искате да извършвате векторизирани / матрични операции в списък, използвайте NumPy Python пакет

15. Компилация и свързване

  • Тези функции могат да бъдат използвани за използване на файл, който е написан на друг език, напр. С или С ++ и т.н.
  • След като кодът се запише във файл, тогава файлът може да бъде поставен в директорията Модули.
  • Важно е да добавите ред във файла Setup.local, за да гарантирате, че новосъздаденият файл може да бъде зареден.

Компилация:

  • Позволява компилация на нови разширения без никаква грешка

Свързване:

  • След като разширенията са компилирани, те могат да бъдат свързани.

16. Итератори

Итераторите

  • Разрешаване на преминаване през колекция
  • Всички итератори съдържат __iter __ () и __next __ () функции
  • Просто изпълнете iter (x) в списъци, речници, низове или набори.
  • Следователно можем да изпълним next (iter), където iter = iter (списък) като екземпляр.
  • Итераторите са полезни, ако имаме голям брой елементи в колекция и нямаме намерение да зареждаме всички файлове в паметта наведнъж.
  • Има общи итератори, които позволяват на разработчиците да прилагат функционална парадигма на езика за програмиране:

филтър

  • Филтрирайте стойностите въз основа на условие

карта

  • Прилага изчисление на всяка стойност на колекция. Той преобразува една стойност в друга стойност, напр. Преобразуване на текст в цели числа

Намалете

  • Намалява колекция от стойности до една единствена стойност (или по-малка колекция), напр. сума от колекция. Тя може да има итеративен характер.

цип

  • Взема няколко колекции и връща нова колекция.
  • Новата колекция съдържа елементи, при които всеки елемент съдържа по един елемент от всяка входна колекция.
  • Тя ни позволява да пресичаме няколко колекции едновременно
name = 'farhad'
наставка = [1,2,3,4,5,6]
цип (име, наставка)
-> връща (f, 1), (a, 2), (r, 3), (h, 4), (a, 5), (d, 6)

17. Обектно-ориентиран дизайн - класове

  • Python ни позволява да създаваме нашите персонализирани типове. Тези дефинирани от потребителя типове са известни като класове. Класовете могат да имат персонализирани свойства / атрибути и функции.
  • Обектно ориентираният дизайн позволява на програмистите да определят своя бизнес модел като обекти с необходимите им свойства и функции.
  • Свойството може да се позовава и на друг обект.
  • Класовете Python могат да се позовават на други класове.
  • Python поддържа капсулация - функции и променливи.
  • Python поддържа наследяване.
клас MyClass:
  def MyClassFunction (self): #self = препратка към обекта
    връщане 5
# Създайте нов екземпляр на MyClass и след това извикайте функцията
m = MyClass ()
return_value = m.MyClassFunction ()
  • Екземпляр от клас е известен като обект. Обектите са сменяеми и техните свойства могат да бъдат актуализирани, след като обектите са създадени.

Забележка: Ако един кортеж (неизменна колекция) съдържа списък (сменяема колекция) от елементи, тогава можем да променим списъка. Също така, ако зададете стойност на обект и съхраните обекта в списък и след това промените обекта, тогава обектът в списъка ще се актуализира.

__в него__

  • Функцията __init__ присъства във всички класове. Изпълнява се, когато се изисква да инстанцираме обект от клас. Функцията __init__ може да вземе всички свойства, които искаме да зададем:
клас MyClass:
   def __init __ (самостоятелно, first_property):
       self.first_property = first_property
   def MyClassFunction (самостоятелно):
      върнете собствеността. първо
# Създайте екземпляр
m = MyClass (123)
r = m.MyClassFunction ()
r ще е 123

Забележка: Self параметърът ще съдържа референцията на обекта, наричана също "това" в други езици на програмиране като C #

__str__

  • Връща версифицирана версия на обект, когато наричаме „печат“:
m = MyClass (123)
print m #Calls __str__
  • Следователно __str__ се изпълнява, когато изпълняваме печат.

__cmp__

  • Използвайте функцията екземпляр __cmp__, ако искаме да предоставим персонализирана логика за сравняване на два обекта от един и същ инстанция.
  • Връща 1 (по-голямо), -1 (по-ниско) и 0 (равно), за да покаже равенството на два обекта.
  • Помислете за __cmp__ като метод Equals () на друг език за програмиране.

Претоварването

  • Методите на даден обект могат да бъдат претоварени, като предоставят повече аргументи като екземпляр.
  • Можем също да претоварим оператор като +, като реализираме собствената си реализация за __add__

Плитка срещу дълбоко копие на обекти

  • Еквивалентни обекти - Съдържа едни и същи стойности
  • Идентични обекти - Позоваване на един и същ обект - един и същ адрес в паметта
  • Ако искате да копирате цял обект, тогава можете да използвате модула за копиране
импортиране на копие
m = MyClass (123)
mm = copy.copy (m)
  • Това ще доведе до плитко копие, тъй като референтните указатели на свойствата ще бъдат копирани.
  • Следователно, ако едно от свойствата на обекта е референтен обект, то той просто ще посочи същия референтен адрес като оригиналния обект.
  • В резултат актуализирането на свойството в изходния обект ще доведе до актуализиране на свойството в целевия обект.
  • Следователно плитки копия копират референтни указатели.
  • За щастие, можем да използваме дълбоко копие:
импортиране на копие
m = MyClass (123)
mm = copy.deepcopy (m)
  • Ако MyClass съдържа свойство, което препраща MyOtherClass обект, тогава съдържанието на свойството ще се копира в новосъздадения обект чрез deepcopy.
  • Следователно дълбокото копие прави нова справка за обекта.

18. Обектно ориентиран дизайн - наследяване

  • Python поддържа наследяване на обекти. В резултат на това един обект може да наследи функции и свойства на своя родител.
  • Наследеният клас може да съдържа различна логика в своите функции.
  • Ако имате клас: ParentClass и два подкласа: SubClass1, SubClass2, тогава можете да използвате Python за създаване на класовете като:
клас ParentClass:
 дефинирайте my_function (самостоятелно):
   печат „Аз съм тук“
клас SubClass1 (ParentClass):
клас SubClass2 (ParentClass):
  • Следователно и двата подкласа ще съдържат функцията my_function ().
  • Наследяването може да насърчи повторната използваемост и поддръжка на кода.

Забележка: Python поддържа множество наследяване за разлика от C #

  • Използвайте abc модула на Python, за да гарантирате, че всички подкласове съдържат необходимите характеристики на абстрактния основен клас.

Multi-Наследяването:

клас A (B, C): # A имплементи В и С
  • Ако искате да се обадите на функцията на родителския клас, можете да направите:
супер (A, самостоятелно) .function_name ()

19. Събиране на боклук - Управление на паметта

  • Всички обекти в Python се съхраняват в огромно пространство. Това пространство е достъпно за интерпретатора на Python.
  • Python има вграден механизъм за събиране на боклука.
  • Това означава, че Python може да разпределя и разпределя автоматично паметта за вашата програма, като например в C ++ или C #.
  • Нейната отговорност е да изчисти пространството в паметта на тези обекти, които не са посочени / използвани в програмата.

Тъй като множество обекти могат да споделят препратки към паметта, python използва два механизма:

  1. Референтно броене: Пребройте броя на елементите, към които е рефериран обектът, разделете обект, ако броят му е 0.
  2. Вторият механизъм се грижи за кръговите препратки, известни също като циклични препратки, като само деблокира обектите, при които номерът на разпределение - сделка е по-голям от прага.
  • Нови обекти се създават в Поколение 0 в python. Те могат да бъдат инспектирани от:
внос gc
collection_objects = gc.collect ()
  • Ръчното събиране на боклука може да се извърши по механизъм, базиран на навременни или събития.

20. I / O

От клавиатурата

  • Използвайте функцията raw_input ()
user_says = raw_input ()
печат (user_says)

файлове

  • Използвайте оператор с / като за отваряне и четене на файл. Това е еквивалентно на използването на оператор в C #.
  • с изявление може да се грижи за затваряне на връзки и други дейности по почистване.

Отваряне на файлове

с отворен (път към файла, 'r') като my_file:
  за линия в my_file
# Файлът е затворен поради с / като

Забележка: readline () може да се изпълни и за четене на ред от файл.

За да отворите два файла

с отворен (път към файла) като мой_файл, отворен (друг път) като втори_файл:
  for (номер на ред, (line1, line2)) в изброяване (zip (my_file, second_file):

Писане на файлове

с отворен (файлов път, 'w') като my_file:
  my_file.write ( "тест")

Забележка: Използвайте os и shutil модули за файлове.

Забележка: rw - режим на четене и запис и режим на добавяне.

SQL

Отворете връзка

импортира MySQLdb
database = MySQLdb.connect ("хост" = "сървър", "база данни-потребител" = "моето потребителско име", "парола" = "моята парола", "име на база данни" = "моята база данни")
cursor = database.cursor ()

Изпълнете SQL оператор

cursor.fetch ("Изберете * от MyTable")
database.close ()

Уеб услуги

За да поискате услуга за почивка

заявки за импортиране
url = 'http://myblog.com'
response = questions.get (url) .text

За сериализиране и десериализация на JSON

Deserialise:

импортиране на json
my_json = {"A": "1", "B": "2"}
json_object = json.loads (my_json)
value_of_B = json_object ["B"]

десериализирате:

импортиране на json
a = "1"
json_a = json.dumps (a)

21. Работа с грешки

Повишаване на изключенията

  • Ако искате да увеличите изключения, използвайте ключовата дума за повишаване:
опитвам:
  повишаване на TypError
с изключение:
  печат ( "изключение")

Изключения при улов

  • За да хванете изключения, можете да направите:
опитвам:
   направи нещо()
с изключение:
   печат ( "изключение")
  • Ако искате да уловите конкретни изключения, можете да направите:
опитвам:
   направи нещо()
с изключение на TypeError:
   печат ( "изключение")
  • Ако искате да използвате try / catch / накрая, тогава можете да направите:
опитвам:
   направи нещо()
с изключение на TypeError:
   печат ( "изключение")
най-накрая:
   close_connections ()
  • най-накрая част от кода се задейства независимо, можете да използвате накрая, за да затворите връзките към базата данни / файлове и т.н.

Опитайте / С изключение / Else

опитвам:
  направи нещо
с изключение на IfTryRaisedException1:
  направи нещо друго
освен (IfTryRaisedException2, IfTryRaisedException3)
  ако е издигнато изключение 2 или 3, тогава направете нещо
друго:
  не бяха повдигнати изключения
  • Можем също да зададем изключение на променлива, като правим:
опитвам:
  направи нещо
с изключение на Exception1 като my_exception:
  направете нещо за my_exception
  • Ако искате да дефинирате ограничения, зададени от потребителя, използвайте assert:
assert , 'грешка при хвърляне'

Забележка: Python поддържа наследяване по изключение

Можете да създадете свой собствен клас на изключения чрез:

клас MyException (изключение): пас

22. Multi-Threading И GIL

  • GIL е заключване за глобален преводач.
  • Той гарантира, че нишките могат да се изпълняват по всяко време и позволява на CPU цикли да избират необходимата нишка за изпълнение.
  • GIL се предава върху нишките, които в момента се изпълняват.
  • Python поддържа мулти-резба.

Забележка: GIL добавя режийни разходи към изпълнението. Следователно, бъдете сигурни, че искате да стартирате няколко нишки.

23. Декоратори

  • Декораторите могат да добавят функционалност към кода. Те са по същество функции, които извикват други обекти / функции. Те са функции за извикване - следователно те връщат обекта, който да бъде извикан по-късно, когато се извика украсената функция.
  • Помислете за декорации, които дават възможност за програмиране, ориентирано към аспектите
  • Ние можем да увием клас / функция и тогава определен код ще бъде изпълнен всеки път, когато се извика функцията.
  • Можем да внедрим обща логика за влизане, проверка за проверки за сигурност и т.н. и след това да приписваме метода с маркера @property.

24. Тестване на модули в Python

  • В Python са налични редица библиотечни модули за тестване и подигравки.
  • Пример е да използвате unittest:

1. Да приемем, че функцията ви просто намалява вход с 1

дефинирайте my_function (вход):
  връщане вход - 1

2. Можете да я тествате чрез:

импортиране unittest
клас TestClass (unittest.TestCase):
 дефинирай my_test (себе):
    self.assertEqual (my_function (1), 0)) # проверка 1 става 0

Можем също да използваме doctest за тестване на код, написан в docstrings.

25. Водещи въпроси за дискусия на Python

Защо трябва да използвам Python?

  • Лесен за кодиране и научаване
  • Обектно ориентиран език за програмиране
  • Страхотни анализи и ML пакети
  • По-бързо да се развие и да внеса моето решение на пазара
  • Предлага вградени съоръжения за управление на паметта
  • Налична е огромна поддръжка и приложения на общността
  • Няма нужда да компилирате, тъй като е интерпретиран език
  • Динамично въведен - няма нужда от деклариране на променливи

Как да направите Python Run бързо?

  • Python е език на високо ниво и не е подходящ за достъп до програми или хардуер на системно ниво.
  • Освен това той не е подходящ за кросплатформени приложения.
  • Фактът, че Python е динамично типизиран интерпретиран език, го прави по-бавен за оптимизиране и изпълнение в сравнение с езиците на ниско ниво.
  • Реализирайте разширения, базирани на език C.
  • Създавайте мултипроцеси, като използвате Spark или Hadoop
  • Използвайте Cython, Numba и PyPy, за да ускорите вашия Python код или го напишете в C и го изложите в Python като NumPy

Кои IDE използват хората?

  • Spyder, PyCharm. Освен това се използват различни тетрадки, напр. Jupyter

Какви са най-добрите Python рамки и пакети?

  • Има голям брой задължителни пакети:

PyUnit (единично тестване), PyDoc (документация), SciPy (алгебера и цифрова), Pandas (управление на данни), Sci-Kit Lear (ML и наука за данни), Tensorflow (AI), Numpy (масив и цифрова), BeautifulSoap (уеб бракуване на страници), колба (микрокадра), пирамида (корпоративни приложения), Django (потребителски интерфейс MVVM), urllib (уеб страници), Tkinter (GUI), макет (подигравателна библиотека), PyChecker (бъг детектор), Pylint (анализ на кода на модула) )

Как да хостваме пакети Python?

  1. За Unix: Направете режим на скрипт файл Изпълним и първият ред трябва да бъде:
# (#! / моят акаунт / local / bin / python)

2. Можете да използвате инструмента за команден ред и да го изпълните

3. Използвайте PyPRI или PyPI сървър

Могат ли да се комбинират Python и R?

  • В R са написани голям брой богати статистически библиотеки
  • Човек може да изпълни R код в Python, като използва Rpy2 python пакета или като използва бележник с бекер или IR ядро ​​в рамките на Juputer.

Има ли начин да уловите грешки преди да стартирате Python?

  • Можем да използваме PyChecker и PyLink, за да улавяме грешки, преди да стартираме кода.
Снимка на Къртис МакНютон на Unsplash

резюме

Тази статия очертава най-важните 25 концепции на Python в кратък, уместен и фокусиран начин. Искрено се надявам, че това е помогнало на някой да разбере по-добре Python.

Вярвам, че съм се съсредоточил върху теми, които трябва да знаят, които са абсолютно необходими, за да бъдат разбрани.

Почивайте, просто практикувайте колкото е възможно повече и можете да внедрите собствената си библиотека в Python, защото тази статия съдържа всички знания, от които се нуждаете.

Ето 5 интересни упражнения на Python, за да проверите знанията си:

Горещо препоръчвам тази статия, тъй като показва как можете да използвате знанията си в Python за изграждане на стабилно приложение:

Надявам се, че помага.