Введение в основы Python (1)

искусственный интеллект Python рептилия анализ данных

Предисловие (знание Python)

Теперь, когда вы изучаете Python, вы должны как минимум понимать язык и понимать процесс выполнения кода Python. История Python доступна в энциклопедии Baidu, о которой особо нечего сказать.

1. Давайте сначала разберемся, что такое интерпретируемый язык и компилируемый язык?

Компьютеры не могут распознавать языки высокого уровня, поэтому, когда мы запускаем программу на языке высокого уровня, нам нужен «переводчик» для преобразования языка высокого уровня в машинный язык, понятный компьютеру. Этот процесс делится на две категории, первая — это компиляция, а вторая — интерпретация.

Прежде чем программа будет выполнена, скомпилированный язык сначала выполнит процесс компиляции программы через компилятор, чтобы преобразовать программу в машинный язык. Нет необходимости в переводе во время выполнения, и прямое выполнение в порядке. Наиболее типичным примером является язык Си.

В интерпретируемых языках нет этого процесса компиляции, но при запуске программа интерпретируется построчно через интерпретатор, а затем запускается напрямую.Наиболее типичный пример — Ruby.

С помощью приведенных выше примеров мы можем обобщить преимущества и недостатки интерпретируемых языков и скомпилированных языков, поскольку скомпилированные языки уже «перевели» программу до запуска программы, поэтому во время выполнения «перевода» меньше». процесс, поэтому эффективность относительно высока. Но мы не можем обобщать, некоторые интерпретируемые языки также могут оптимизировать всю программу при переводе программы через оптимизацию интерпретатора, так что это более эффективно, чем компилируемые языки.

Кроме того, с появлением языков на основе виртуальных машин, таких как Java, мы не можем разделить языки чисто на интерпретируемые и компилируемые языки. Взяв в качестве примера Java, Java сначала компилируется в файл байт-кода компилятором, а затем интерпретируется в машинный файл интерпретатором во время выполнения. Поэтому мы говорим, что Java — это язык, который компилируется, а затем интерпретируется. Затем замените его на C#.C# сначала компилирует файл C# в файл IL с помощью компилятора, а затем компилирует файл IL в машинный файл с помощью среды CLR. Поэтому мы говорим, что C# — чисто компилируемый язык, но C# — это язык, требующий вторичной компиляции. То же самое можно применить и к другим языкам на платформе .NET.

2. Так что же такое Python?

На самом деле, Python, как и Java и C#, также является языком, основанным на виртуальных машинах.Давайте сначала кратко разберемся с процессом выполнения программ Python на поверхности.

Когда мы вводим в командной строкеpython hello.pyКогда он активирует «интерпретатор» Python, он сообщает «интерпретатору», что вы собираетесь начать работу. Но перед «интерпретацией» первая фактически выполняемая работа, как и в Java, — это компиляция.

Читатели, знакомые с Java, могут подумать о том, как мы выполняем Java-программу в командной строке:

javac hello.java
java hello

Просто когда мы используем такие IDE, как Eclipse, они объединяются в одну. На самом деле то же самое верно и для Python, когда мы выполняемpython hello.py, он также выполняет такой процесс, поэтому мы должны описать Python так, Python — это язык, который компилируется, а затем интерпретируется.

3. Кратко опишите запущенный процесс Python

Прежде чем говорить об этой проблеме, давайте поговорим о двух концепциях: PyCodeObject и файле pyc.

Излишне говорить, что pyc, который мы видим на жестком диске, на самом деле является результатом фактической компиляции компилятора Python. Мы можем просто сначала узнать это и продолжать смотреть вниз.

Когда программа Python запускается, скомпилированный результат сохраняется в PyCodeObject в памяти, а когда программа Python завершается, интерпретатор Python записывает PyCodeObject обратно в файл pyc.

Когда программа Python запускается во второй раз, она сначала будет искать файл pyc на жестком диске, если он будет найден, он будет загружен напрямую, в противном случае описанный выше процесс будет повторен.

Таким образом, мы должны найти файлы PyCodeObject и pyc Мы говорим, что файлы pyc на самом деле являются постоянным способом сохранения PyCodeObject.

Для получения более подробной информации см.:Расскажите о процессе выполнения программы на Python.

Наконец:

  • «Жизнь слишком коротка, я использую Python»

  • Философия дизайна Python — «элегантность», «ясность», «простота».

1. Переменные и строки

Во-первых: Python не нужно ставить точку с запятой в конце каждого оператора.;, какprint('hello')Распечататьhello

1.1 Переменные

Если у вас есть основы программирования, нет необходимости говорить больше о переменных.

Переменная номенклатура:

  • CamelCase
  • Номенклатура Паскаля

1.2 Струны

1. Основное введение

апостроф' 'или двойные кавычки" "либо, либо''' '''Три кавычки, из которых три кавычки используются для слишком длинных абзацев текста или описаний, пока есть более трех кавычек, вы можете написать текст в новой строке по желанию.

① Строки можно добавлять напрямую, например:

str1 = 'hi'
str2 = 'hello'
print(str1 + str2)

результат операции:

hi jaybo

② Умножение строк, например:

string = 'bang!'
total = string * 3 

Распечатайте общий результат:

bang!bang!bang!

2. Разделение и индексация строк

Строки могут быть переданыstring[x]способ индексации и сегментации.

Фрагментацию строки на самом деле можно рассматривать как выяснение того, что вы хотите перехватить из строки, копирование небольшого фрагмента нужной вам длины и сохранение его в другом месте без изменения исходного файла строки. Каждая строка, полученная путем сегментирования, может рассматриваться как копия исходной строки.

Взгляните на следующий код:

name = 'My name is Mike'
print(name[0])
'M'
print(name[-4])
'M'
print(name[11:14]) # from 11th to 14th, 14th one is excluded
'Mik'
print(name[11:15]) # from 11th to 15th, 15th one is excluded
'Mike'
print(name[5:])
'me is Mike'
print(name[:5])
'My na'

Если вы запутались, вы можете понять и проанализировать это по следующей таблице:

:Две стороны представляют, где начинается и заканчивается разделение строки.

отname[11:14]Например, перехваченное число начинается с 11-го символа и заканчивается на 14-й позиции, но не включает 14-й символ. И нравитсяname[5:]Этот способ записи представляет собой фрагмент строки от символа номер 5 до конца. Напротив,name[:5]Это означает, что нужно начинать с символа номер 0 до номера 5, но включая 5-й фрагмент символа. Можно легко запутаться.Можно представить,что первая от 5 до конца.Программисту лень считать сколько,поэтому он ее опускает.Вторая от первой до 5,и он слишком лень писать 0, поэтому пишет как[:5].

3. Метод строки

  • метод replace: первый параметр указывает замененную часть, а второй параметр указывает, какую строку заменить.

  • Заполните пропуски, например:

    city = input("write the name of city:"")
    url = "http://apistore.baidu.com/mri.../weather?citypiny={}.format(city)
    

4. Проблемы

Вопрос 1:

num = 1
string = '1'
print(num + string)

Не сработает ли приведенный выше код?

Объяснение: Целые числа нельзя добавлять непосредственно к строкам. Вы можете сначала преобразовать строку в целое число, а затем добавить ее, то естьint(string)

num = 1
string = '1'
print(num + int(string))

2. Функция

Вот несколько примеров функций, которые вы могли использовать:

判断数据类型:type(str) 
字符串类型数据转为整数型:int(str)
...

Это не сложно найти, соблюдая правила, так называемая функция использования в Python заключается в том, чтобы поместить объект, с которым вы хотите иметь дело, в круглые скобки после имени. Проще говоря, функция используется так, в нее можно запихивать вещи, чтобы получить результат обработки. Такие функции также есть в Python:

Взяв в качестве примера Python 3.5, у вас есть 68 таких функций, которые называютсявстроенная функция. Встроенные здесь означают, что эти функции доступны для использования с установленным Python.

2.1 Формат функции

Формат определения функции:

в,defиreturnзаключевые слова.

Уведомление:Оператор после отступа функции называется блоком операторов, а отступ предназначен для логики и принадлежности оператора имени таблицы. Проблему отступов нельзя игнорировать, иначе код не будет работать успешно, и здесь нужно уделить особое внимание.

2.2 Функциональные параметры

①Параметры местоположения, например, см. код:

def trapezoid_area(base_up, base_down, height):
    return 1/2 * (base_up + base_down) * height

Далее начинаем вызывать функцию:

trapezoid_area(1,2,3)

Нетрудно заметить, что заполненные параметры 1, 2 и 3 соответствуют параметрам base_up, base_down и height соответственно. Такой способ передачи параметров называется позиционными параметрами.

②Параметры ключевого слова: при вызове функции назначьте значение, которое мы хотим передать после имени каждого параметра, например, при вызове функции fun1:fun1(a=1, b=2, c=3).

Посмотрите на картинку ниже:

  • Параметры функции в первой строке передаются в обратном порядке, так как они являются ключевыми параметрами, это не влияет на нормальную работу функции;
  • Параметры функции во второй строке передаются в обратном порядке, а третья становится позиционной функцией, к сожалению, этот метод имеет неправильный синтаксис, потому что если он передается по позиции, то последней должна быть позиция параметра высота . Но предыдущая высота перешла в значение 3 по названию, так что это конфликт.
  • Параметры функции в третьей строке передаются в положительном порядке, первые два передаются как ключевые слова, а последний передается как позиционные параметры, но за позиционными параметрами не могут следовать ключевые параметры, поэтому это неправильно.
  • Параметры функции в четвертой строке передаются в положительном порядке. Первые два передаются позиционно, а последний передается как параметры ключевого слова. Эта функция может работать нормально.

③Неопределенный параметр длины

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

Python предоставляет способ кортежа принимать аргументы, которые не определены напрямую. Таким образом, добавьте звездочку перед параметром*. Если при вызове функции аргументы не указаны, это пустой кортеж. Мы также не можем передавать в функцию безымянные переменные. Например:

def print_user_info( name ,  age  , sex = '男' , * hobby):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex) ,end = ' ' )
    print('爱好:{}'.format(hobby))
    return;

# 调用 print_user_info 函数
print_user_info( '小明' , 25, '男', '打篮球','打羽毛球','跑步')

Результат вывода:

昵称:小明 年龄:25 性别:男 爱好:('打篮球', '打羽毛球', '跑步')

Из результатов вывода можно узнать, что,* hobbyявляется переменным параметром, а хобби на самом деле является кортежем (кортежем).

Параметры переменной длины также поддерживают ключевые параметры, а ключевые параметры, которые не определены, будут помещены в словарь. Этот метод заключается в добавлении перед параметром**, измените приведенный выше пример следующим образом:

def print_user_info( name ,  age  , sex = '男' , ** hobby ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex) ,end = ' ' )
    print('爱好:{}'.format(hobby))
    return;

# 调用 print_user_info 函数
print_user_info( name = '小明' , age = 25 , sex = '男', hobby = ('打篮球','打羽毛球','跑步'))

Результат вывода:

昵称:小明 年龄:24 性别:男 爱好:{'hobby': ('打篮球', '打羽毛球', '跑步')}

Сравнивая приведенный выше пример с этим примером, мы можем знать, что* hobbyявляется переменным параметром, а хобби на самом деле является кортежем (кортежем),** hobby— это аргумент ключевого слова, а хобби — это дикт (словарь).

④ Принимает только аргументы ключевого слова

Параметры ключевых слов просты в использовании, и ошибиться в параметрах нелегко. Поэтому иногда функции, которые мы определяем, хотят, чтобы некоторые параметры передавались с использованием параметров ключевых слов. Что нам делать в это время? Поместите обязательные аргументы ключевого слова в*параметр или единичный*Это может быть достигнуто позже, например:

def print_user_info( name , *, age, sex = '男' ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex))
    return;

# 调用 print_user_info 函数
print_user_info( name = '小明' ,age = 25 , sex = '男' )

# 这种写法会报错,因为 age ,sex 这两个参数强制使用关键字参数
#print_user_info( '小明' , 25 , '男' )
print_user_info('小明',age='22',sex='男')

Как видно на примере, еслиage , sexЕсли аргументы ключевого слова не используются, будет сообщено об ошибке.

2.3 Анонимные функции

Вы думали об определении очень короткой функции обратного вызова, но не хотите использоватьdefЧтобы написать такую ​​длинную функцию в виде , есть ли какой-нибудь ярлык?

- Ответ - да.

Python использует лямбда-выражения для создания анонимных функций, т.е.defОператор определяет функцию в стандартной форме.

Анонимные функции в основном имеют следующие характеристики:

  • лямбда — это просто выражение, тело функции болееdefГораздо проще.
  • Тело лямбды — это выражение, а не блок кода. В лямбда-выражения можно инкапсулировать только ограниченную логику.
  • Лямбда-функция имеет собственное пространство имен и не может получить доступ к параметрам за пределами собственного списка параметров или в глобальном пространстве имен.

Основной синтаксис:lambda [arg1 [,arg2,.....argn]]:expression

Пример:

sum = lambda num1 , num2 : num1 + num2;
print( sum( 1 , 2 ) )

Выходной результат: 3

Уведомление:Хотя лямбда-выражения позволяют определять простые функции, их использование ограничено. Вы можете указать только одно выражение, и его значение является окончательным возвращаемым значением. Это означает, что нельзя включить другие функции языка, в том числе множественные операторы, условные выражения, итерацию и обработку исключений.

В анонимных функциях есть особая проблема, требующая внимания, например, измените приведенный выше пример:

num2 = 100
sum1 = lambda num1 : num1 + num2 ;

num2 = 10000
sum2 = lambda num1 : num1 + num2 ;

print( sum1( 1 ) )
print( sum2( 1 ) )

Как вы думаете, что будет на выходе? Первый вывод 101, второй 10001, результата нет, вывод такой:

10001
10001

В основном это связано с тем, что num2 в лямбда-выражении является свободной переменной, и значение привязывается во время выполнения, а не во время определения, что отличается от определения параметра значения по умолчанию для функции. Поэтому в данном случае рекомендуется использовать первое решение.

3. Цикл и суждение

3.1 Булевы выражения и суждения

Логические значения в Python:TrueиFlaseСреди них обратите внимание, что оба написаны с большой буквы.

Любое выражение, которое производит логическое значение,логическое выражение:

1 > 2 # False
1 < 2 <3 # True
42 != '42' # True
'Name' == 'name' # False
'M' in 'Magic' # True
number = 12
number is 12 # True

Примечание 1: Нельзя использовать объекты разных типов.<,>,<=,=>для сравнения, но вы можете использовать==и!=.

Примечание 2. Хотя тип с плавающей запятой и целочисленный тип являются разными типами, они не влияют на операцию сравнения. Также не равно!=могу написать<>.

Кстати, булевы типы можно сравнивать? как:True > Flase, ответ да,TureиFlaseЭто как 1 и 0 для компьютера, поэтому результат верен, т.е.True.

3.2 Условное управление

Формат определения:

Эта структура работает в одном предложении: если... условия верны, делай..., иначе делай...

Устанавливается так называемое условие, означающее, чтоВозвращаемое значениеTrueлогическое выражение.

3.3 Тираж

①для цикла

Суммируя, что делает цикл for в одном предложении:Для каждого элемента сделайте что-нибудь.

Распечатайте таблицу умножения девять-девять:

for i in range(1, 10):
    for j in range(1, i+1):
        print('{}x{}={}\t'.format(i, j, i*j), end='')
    print()

результат операции:

1x1=1
2x1=2   2x2=4
3x1=3   3x2=6   3x3=9
4x1=4   4x2=8   4x3=12  4x4=16
5x1=5   5x2=10  5x3=15  5x4=20  5x5=25
6x1=6   6x2=12  6x3=18  6x4=24  6x5=30  6x6=36
7x1=7   7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49
8x1=8   8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64
9x1=9   9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81

② цикл while

Резюме: Пока... условия соблюдены, продолжайте делать...

Во время цикла вы можете использоватьbreakЧтобы пропустить цикл, используйтеcontinueПропустите этот цикл.

В цикле while в Python вы можете использовать оператор else, тогда как … else выполняет блок else, когда условие цикла ложно. как:

count = 0
while count < 3:
   print (count)
   count = count + 1
else:
   print (count)

результат операции:

0
1
2
3

Существуют операторы while...else и, конечно же, операторы for...else. Операторы for ничем не отличаются от обычных. Операторы else будут выполняться при нормальном выполнении цикла (т. for не прерывается выпрыгиванием из break), в то время как … то же самое касается else. как:

for num in range(10,20):  # 迭代 10 到 20 之间的数字
   for i in range(2,num): # 根据因子迭代
      if num%i == 0:      # 确定第一个因子
         j=num/i          # 计算第二个因子
         print ('%d 是一个合数' % num)
         break            # 跳出当前循环
   else:                  # 循环的 else 部分
      print ('%d 是一个质数' % num)

результат операции:

10 是一个合数
11 是一个质数
12 是一个合数
13 是一个质数
14 是一个合数
15 是一个合数
16 是一个合数
17 是一个质数
18 是一个合数
19 是一个质数

В-четвертых, структура данных

Python имеет четыре структуры данных: списки, словари, кортежи и наборы. Давайте сначала разберемся с этими четырьмя структурами данных в целом:

list = [val1,val2,val3,val4] #列表
dict = {key1:val1,key2:val2} #字典
tuple = (val1,val2,val3,val4) #元组
set = {val1,val2,val3,val4}	#集合

4.1 Список (Список)

  1. каждый элемент в списке является изменяемым;

  2. Элементы в списке упорядочены, то есть у каждого элемента есть позиция;

  3. Список может содержать любой объект в Python. следующее:

    all_in_list = [
        1, #整数
        1.0, #浮点数
        'a word', #字符串
        print(1), #函数
        True, #布尔值
        [1,2], #列表中套列表
        (1,2), #元祖
        {'key':'value'} #字典
    ]
    

Кроме того, для работы с данными наиболее распространены добавление, удаление, изменение и запрос. Здесь она опущена, и вы можете найти соответствующую функцию в Интернете, чтобы попрактиковаться.

4.2 Словарь (Dict)

  1. Данные в словаре должны быть в виде пар ключ-значение;

  2. Логически ключи не могут повторяться;

  3. Ключ (key) в словаре неизменяем, то есть не может быть изменен, а значение (value) изменяемо, модифицируемо и может быть любым объектом.

    Вот пример:

    NASDAQ_code = {
        'BIDU':'Baidu',
        'SINA':'Sina',
        'YOKU':'Youku'
    }
    

Ключи и значения в словаре не могут существовать друг без друга, если написать{'BIDU':}вызовет синтаксическую ошибку:invalid syntax.

Если вы попытаетесь создать словарь с изменяемым элементом в качестве ключа, например списком:key_test = {[]:'a Test'}, будет выдано сообщение об ошибке:unhashable type:'list'.

При этом значение ключа в словаре повторяться не будет, даже если вы это сделаете, одно и то же значение ключа может появиться только один раз:a = {'key':123,'key':123}.

Операции добавления, удаления, модификации и поиска здесь опущены.

Примечание:

  • Метод, используемый для добавления нескольких элементов в список,extend, способ добавления нескольких элементов в словарьupdate()
  • Словари нельзя нарезать, то есть неправильно писать:chart[1:4]

4.3 Кортежи

Кортежи можно понимать как стабильную версию списка, потому что кортежи нельзя модифицировать, поэтому существующие в списке методы нельзя использовать для кортежей, но кортежи можно просматривать индексированными, методы и списки одинаковы.

letters = ('a, 'b', 'c', 'd')
letters[0]

Соответствующие операции можно найти в практике кода.

4.4 Сет (Сет)

Множества ближе к понятию множеств в математике. Элементы в каждом наборе - это произвольные объекты, неупорядоченные и не повторяющиеся.Мы можем судить о принадлежности данных через набор, а иногда также можем использовать набор для сокращения повторяющихся элементов в структуре данных.

Коллекции нельзя нарезать или индексировать.Помимо выполнения операций над множествами, можно добавлять и удалять элементы множества:

a_set = {1,2,3,4}
a_set.add(5)
a_set.discard(5)

4.5 Несколько советов по структурам данных

4.5.1 Несколько циклов

следующее:

Демонстрация кода:

for a, b in zip(num, str):
    print(b, 'is', a)

4.5.2 Вывод

Использование спискового понимания хорошо понятно и может быть просто рассмотрено в двух частях. Как показано ниже:

За красной пунктирной линией находится выражение знакомого цикла for, а перед пунктирной линией можно думать как об элементе, который мы хотим поместить в список.

Демонстрация кода:

a = []
for i in range(1, 11):
    a.append(i)

Его можно записать в виде понимания списка:

b = [i for i in range(1, 11)]

Списковые включения не только удобны, но и намного превосходят первые с точки зрения эффективности выполнения.

В-пятых, понимание класса

5.1 Введение в классы

определение класса:

class CocaCola:
    formula = ['caffeine','sugar','water','soda']

использоватьclassчтобы определить класс, как вы использовали бы при создании функцииdefОпределить функцию так же просто. Выше вы можете видеть, что определен класс с именем CocaCola, а затем с отступом есть переменная, которая содержит списокformula, переменная, определенная в классе, является переменной класса, а переменная класса имеет специальный термин, который мы называем атрибутом класса.

Свойства класса:

  • переменная класса
  • метод

① экземпляр класса:

coke_for_me = CocaCola()
coke_for_you = CocaCola()

②Ссылка атрибута переменной класса:CocaCola.formula,coke_for_me.formula

Использование методов класса:

class CocaCola:
    formula = ['caffeine','sugar','water','soda']
    def drink(self):
        print('Energy!')
coke = CocaCola()
coke.drink()

результат:

Energy!

5.2 self

Я думаю, что многие обратят внимание на это странное место - похоже, оно бесполезно.selfпараметр. Объясним принцип, на самом деле он очень простой, изменим приведенный выше код:

class CocaCola:
    formula = ['caffeine','sugar','water','soda']
    def drink(coke):	# 把self改为coke
        print('Energy!')
coke = CocaCola()
coke.drink()

результат:

Energy!

Как, некоторые идеи теперь! Этот параметр фактически является самим создаваемым экземпляром. То есть помещая объекты в качестве параметров в круглые скобки функций, и, кроме того, после создания экземпляра класса мы можем фактически использовать его аналогично тому, как мы используем функции:

coke = CocaCola
coke.drink() == CocaCola.drink(coke) #左右两边的写法完全一致

Созданный экземпляр объекта молча передается компилятором в круглые скобки следующего метода в качестве первого параметра. Вышеуказанные два метода одинаковы, но мы напишем больше в предыдущей форме. фактическиselfИмя этого параметра можно изменить по желанию (компилятор при этом не сообщит об ошибке).

Подобно функциям, методы класса также могут иметь свои собственные параметры, например:

class CocaCola:
    formula = ['caffeine','sugar','water','soda']
    def drink(self,how_much):
    
    if how_much == 'a sip':
        print('Cool~')
    elif how_much == 'whole bottle’:
        print('Headache!')
ice_coke = CocaCola()
ice_coke.drink('a sip')

результат:

Cool~

5.3 Магические методы

В классах Python есть несколько методов, называемых «магическими методами»._init_()является одним из них.

class CocaCola():
    formula = ['caffeine','sugar','water','soda']
    def __init__(self):
        self.local_logo = '可口可乐'
    def drink(self): 
        print('Energy!')
coke = CocaCola()
print(coke.local_logo)

Что он делает: перед созданием экземпляра он делает много вещей. Грубо говоря, это означает, что даже если вы не ссылаетесь на экземпляр при его созданииinit_()метод, операторы в нем также будут автоматически выполняться в первую очередь. Это обеспечивает большую гибкость в использовании классов.

class CocaCola:
    formula = ['caffeine','sugar','water','soda']
    def __init__(self,logo_name):
        self.local_logo = logo_name
    def drink(self):
        print('Energy!')
coke = CocaCola('ݢݗݢԔ')
coke.local_logo
>>> 可口可乐

Имея опыт объектно-ориентированного программирования, легко понять, то есть «конструктор» во многих объектно-ориентированных языках.

5.4 Наследование классов

Следующий код:

class CaffeineFree(CocaCola):
    caffeine = 0
    ingredients = [
        'High Fructose Corn Syrup',
        'Carbonated Water',
        'Phosphoric Acid',
        'Natural Flavors',
        'Caramel Color',
    ]
coke_a = CaffeineFree('Cocacola-FREE')
coke_a.drink()

Указывает, что CaffeineFree наследует класс CocaCola.

Переменные и методы в классе могут наследоваться подклассами, но также могут быть внесены специальные изменения.обложка.

Q1:атрибут классаЕсли его переназначить, повлияет ли это на ссылку на атрибут класса?

class TestA():
    attr = 1
obj_a = TestA()

TestA.attr = 24
print(obj_a.attr)

>>> 结果:24

A1: Это повлияет.

Q2:свойства экземпляраЕсли его переназначить, повлияет ли это на ссылку на атрибут класса?

class TestA:
    attr = 1
obj_a = TestA()
obj_b = TestA()

obj_a.attr = 42
print(obj_b.attr)

>>> 结果:1

A2: это не повлияет.

Q3: Атрибут экземпляра атрибута класса имеет такое же имя, тогда.Какой будет последняя ссылка?

class TestA():
    attr =1
    def __init__(self):
        self.attr = 24

obj_a = TestA()

print(obj_a.attr)

>>> 结果:24

A3: Значение атрибута класса после присвоения.

Резюме: Как показано на рисунке, механизм ссылки на атрибуты в Python идет снаружи внутрь. Когда вы создаете экземпляр, вы готовы начать ссылаться на атрибуты. В это время компилятор сначала будет искать, имеет ли экземпляр атрибут. Если да, если нет, будет искать, имеет ли класс, к которому принадлежит этот экземпляр, этот атрибут. Если да, то на него будет сделана ссылка.

6. Используйте сторонние библиотеки

6.1 Установите собственную библиотеку

Обычно мы используемpipЧтобы установить стороннюю библиотеку, как установить собственную библиотеку? Конечно, вы можете отправить свою собственную библиотеку наpip, но и добавить некоторое количество кода и необходимых файлов, здесь мы используем более простой метод:

  1. Найдите каталог установки Python и найдите следующееsite-packagesпапка;
  2. Запомните свое имя файла, так как оно будет использоваться в качестве ссылки, и поместите туда py-файл, который вы написали.

В этой папке должны быть все установленные вами сторонние библиотеки. Если вы не знаете свой путь установки, вы можете попытаться узнать, где он находится, используя:

import sys
print(sys.path)

Будет напечатан список, и четвертым в списке будет место, где установлена ​​ваша библиотека, так что вы также можете сделать это напрямую:

import sys
print(sys.path[3])

6.2 Установка сторонних библиотек

Удивительная сторонняя библиотека

Если использовать мобильный телефон как аналог языка программирования, то Python — это смартфон. Так же, как мобильные приложения с контентом появляются на платформах iOS и Android, существует также множество сторонних библиотек, которые обеспечивают большое удобство для разработчиков Python.

Если вы хотите создать веб-сайт, вы можете выбрать полнофункциональный Django, облегченный Flask и другие веб-фреймворки; если вы хотите написать небольшую игру, вы можете использовать фреймворк PyGame; если вы хотите быть краулером, вы можете используйте структуру Scrapy; Если вы хотите провести статистический анализ данных, вы можете использовать фрейм данных Pandas... Так много богатых ресурсов могут помочь нам делать то, что мы хотим, эффективно и быстро, поэтому нам не нужно заново изобретать колесо.

Итак, как найти соответствующую библиотеку в соответствии с вашими потребностями? может прибытьawesome-python.comЭтот веб-сайт ищется по категориям, и на него включена относительно полная сторонняя библиотека. Например, если вы хотите найти библиотеку для сканирования, проверьте категорию «Сканирование в Интернете», вы увидите веб-сайт и описание соответствующей сторонней библиотеки, вы можете перейти на веб-сайт библиотеки, чтобы просмотреть более подробное введение, и подтвердить то, что библиотека поддерживает Python 2, по-прежнему остается Python 3, но большинство распространенных библиотек уже поддерживают обе версии. Кроме того, вы также можете искать напрямую через поисковые системы.

Установите сторонние библиотеки:

① Самый простой способ: установить в PyCharm

  1. В меню PyCharm выберите: Файл -> Настройка по умолчанию
  2. Найдите интерпретатор проекта, выберите текущую версию Python, нажмите «+», чтобы добавить библиотеку.
  3. Введите имя библиотеки, проверьте его и нажмите «Установить пакет».

После успешной установки PyCharm выдаст сообщение об успешном завершении. Вы также можете проверить, какие библиотеки установлены в интерфейсе интерпретатора проекта, и щелкнуть знак «-», чтобы удалить библиотеки, которые больше не нужны.

②Самый прямой способ: установить в терминале/командной строке

PyPI (Python Package Index) — это репозиторий официальных сторонних библиотек Python, который PyPI рекомендует использовать.pipменеджер пакетов для загрузки сторонних библиотек.

  1. установить пункт

    После Python 3.4 установленная среда Python может напрямую поддерживать pip, вы можете ввести это предложение в терминал/командную строку, чтобы проверить:pip --version(При условии, что путь к компьютеру был настроен), если отображается версия pip, это означает, что pip был успешно установлен; если обнаружено, что он не установлен, установите его в соответствии с различными системами следующим образом:

  2. Установите библиотеку с помощью pip

    После установки pip, чтобы установить библиотеку позже, просто введите в командной строке:pip3 install PackageName(Примечание: если вы хотите установить в Python 2, вам нужно поставитьpip3заменитьpip). Пополнить:

    pipиpip3здесьPython36\Scripts\каталог, если установлены и python2, и python3, по умолчанию pippython2использовать,pip3Назначен python3. Если установлен только python3, тоpipиpip3эквивалентны.

    Если вы установили обе версии Python 2 и 3, у вас могут возникнуть проблемы с каталогом установки, вы можете заменить его на:python3 -m pip install PackageName(Примечание: если вы хотите установить в Python2, вам нужно заменить Python3 на Python)

    Если вы столкнулись с проблемами доступа, вы можете ввести:sudo pip install PackageName

    После успешной установки вам будет предложено:Successfully insyalled PackageName

    Некоторые часто используемые команды pip:

    # pip 使用格式:pip <command> [options] package_name
    
    pip install package_name==1.9.2	# 安装指定版本的包
    pip install --upgrade package_name	# 更新指定的包
    pip uninstall package_name	# 卸载指定的包
    pip show package_name	# 查看所安装包的详细信息
    pip list	# 查看所有安装的包
    pip --help	# 查看帮助
    

Добавлено: если загрузка идет медленно, рассмотрите возможность изменения источника загрузки pip. Домашние зеркала бывают:

# 国内常用的镜像
http://pypi.douban.com/simple/            # 豆瓣
http://mirrors.aliyun.com/pypi/simple/    # 阿里
https://pypi.tuna.tsinghua.edu.cn/simple  # 清华
http://pypi.mirrors.ustc.edu.cn/simple/   # 中国科学技术大学
http://pypi.hustunique.com/simple/        # 华中理工大学

Способ изменения:

  1. временное использование, доп.-iили--indexпараметр:pip install -i http://pypi.douban.com/simple/ flask

  2. Постоянный метод настройки под Linux

    cd $HOME  
    mkdir .pip  
    cd .pip
    sudo vim pip.conf  
    
    # 在里面添加,trusted-host 选项为了避免麻烦是必须的,否则使用的时候会提示不受信任  
    [global]
    index-url=https://pypi.tuna.tsinghua.edu.cn/simple
    
    [install]
    trusted-host=pypi.tuna.tsinghua.edu.cn 
    disable-pip-version-check=true
    timeout = 6000 
    
  3. Постоянный метод настройки под Windows

    # a、进入如下目录(没有此目录或文件就自己创建下)
    C:\Users\username\AppData\Local\pip
    或
    C:\Users\username\pip
    
    # b、创建 “pip.ini” 文件(注意:以UTF-8 无BOM格式编码),添加如下内容
    [global]
    index-url=https://pypi.tuna.tsinghua.edu.cn/simple
    
    [install]
    trusted-host=pypi.tuna.tsinghua.edu.cn 
    disable-pip-version-check=true
    timeout = 6000 
    

③Самый примитивный способ: ручная установка

Входитьpypi.python.org, найдите имя библиотеки, которую хотите установить, есть 3 возможности:

  1. Первыйexeфайл, это самый удобный, загрузите соответствующий файл, который соответствует вашей компьютерной системе и среде Pythonexe, а затем нажмите «Далее» до конца, чтобы установить.

  2. Второй.whlClass, преимущество в том, что зависимые пакеты могут быть установлены автоматически.

    1. на ввод командной строкиpip3 install whellДождитесь завершения выполнения, об ошибке не сообщается (в Python 2 его следует заменить на pip)
    2. Подтвердите загрузку из проводника.whlПуть к файлу класса, а затем продолжайте вводить в командной строке:cd C:\download, здесь нужно изменить на свой путь.Смысл пути - это папка, в которой находится файл, не включая само имя файла, а затем продолжить ввод в командной строке:pip3 install xxx.whl,xxx.whlполное имя файла, который вы скачали.
  3. Третий - исходный код, вероятно, обаzip,tar.zip,tar.bz2Сжатый пакет в формате, этот метод требует, чтобы пользователь установил другие пакеты, от которых зависит этот пакет. Например, pandas зависит от numpy.Если вы не установите numpy, этот метод не сможет успешно установить pandas.

    1. Разархивируйте пакет, войдите в разархивированную папку, обычно вы увидитеsetup.pyфайл, подтвердите путь к файлу, загруженному из проводника, откройте командную строку и введите:cd C:\downloadЗдесь нужно изменить на свой путь.Смысл пути - это папка, в которой находится файл, не включая само имя файла
    2. Затем продолжайте вводить в командной строке:python3 setup.py installЭта команда может установить эту стороннюю библиотеку в систему, которая является вашим путем Python.Windows, вероятно, находится вC:\Python3.5\Lib\site-packages.

    Примечание. Если вы хотите удалить библиотеку, найдите путь Python, войдите в папку site-packages и удалите в ней файл библиотеки.

Большая часть содержания этой статьи взята из: