Архив метки: Python

Функция map() в Python

map() это встроенная функция в Python, которая применяет функцию ко всем элементам в теле цикла. Это позволяет писать простой и чистый код без использования циклов.

 

Функция map() в Python

Функция map() принимает следующий вид:

map(function, iterable, ...)


 

Она принимает два обязательных аргумента:

  • function — Функция, которая вызывается для каждого элемента iterable.
  • iterable — Один или несколько объектов, поддерживающих итерацию. Большинство встроенных в Python объектов, таких как списки, словари и кортежи, являются итеративными.

В Python 3 map() возвращает объект карты с размером, равным переданному итерируемому объекту. В python 2 функция возвращает список.

Давайте рассмотрим пример, чтобы лучше объяснить, как работает функция map(). Допустим, у нас есть список строк, и мы хотели бы преобразовать каждый элемент в списке в верхний регистр.

Один из способов сделать это — использовать традиционный цикл for:

directions = ["north", "east", "south", "west"]

directions_upper = []



for direction in directions:

    d = direction.upper()

    directions_upper.append(d)



print(directions_upper)


 

['NORTH', 'EAST', 'SOUTH', 'WEST']


 

С функцией map() код будет намного проще и более гибким.

def to_upper_case(s):

    return s.upper()



directions = ["north", "east", "south", "west"]



directions_upper = map(to_upper_case, directions)



print(list(directions_upper))


 

Мы используем функцию list() для преобразования возвращенного объекта карты в список :

['NORTH', 'EAST', 'SOUTH', 'WEST']


 

Если функция обратного вызова проста, более лучший способ заключается в использовании лямбда-функции:

directions = ["north", "east", "south", "west"]



directions_upper = map(lambda s: s.upper(), directions)



print(list(directions_upper))


 

Лямбда-функция — это небольшая анонимная функция.

Вот еще один пример, показывающий, как создать список квадратных чисел от 1 до 10:

squares = map(lambda n: n*n , range(1, 11))

print(list(squares))


 

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


 

Функция range() генерирует последовательность целых чисел.

 

Использование map() с несколькими итерациями

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

В следующем примере показано, как выполнить поэлементное умножение для двух списков:

def multiply(x, y):

  return x * y



a = [1, 4, 6]

b = [2, 3, 5]



result = map(multiply, a, b)



print(list(result))


[2, 12, 30]


 

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

a = [1, 4, 6]

b = [2, 3, 5]



result = map(lambda x, y: x*y, a, b)



print(list(result))


 

Когда предоставляется несколько итераций, размер возвращаемого объекта равен самой короткой итерации.

Давайте посмотрим на пример, когда итерации не имеют одинаковую длину:

a = [1, 4, 6]

b = [2, 3, 5, 7, 8]



result = map(lambda x, y: x*y, a, b)



print(list(result))


 

Избыточные элементы (7 и 8) игнорируются:

[2, 12, 30]


 

Вывод

Функция Python map() принимает итеративный объект вместе с функцией и применяет эту функцию к каждому итерируемого элементу.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2020-07-13T12:40:10
Python

Как комментировать в Python

При написании кода на Python всегда полезно делать код легко читаемым. Организация кода, присвоение переменным и функциям описательных имен — это несколько способов сделать это.

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

Добавление комментариев к вашему коду Python сэкономит вам много времени и усилий, если вы посмотрите на свой код в будущем. Допустим, вы хотите изменить сценарий, который вы написали несколько месяцев или лет назад. Скорее всего, вы не помните, почему вы написали какой-то сложный кусок кода, если вы не добавили комментарий. Комментарии также помогают другим разработчикам понять ваш код и его назначение.

Комментарии должны быть краткими и точными. Не объясняйте что-то очевидное для читателя.

В этой статье рассматриваются основы написания комментариев на Python.

 

Написание комментариев в Python

Python игнорирует все, что написано в строке после хеш-метки (#).

Комментарии могут быть добавлены в начале строки или встроены в другой код:

# Это комментарий Python.

print("Привет Мир") # Это встроенный комментарий Python.


Пробел после хеш-метки не обязателен, но он улучшит читабельность комментария.

Символ хеша внутри строкового литерала не указывает на начало строки комментария. Это просто хэш-символ:

paragraph = "# Хэш внутри кавычек-это не комментарий."



Комментарии должны быть на том же уровне отступа, что и код под ними:



```py

def factorial(n):

  if n == 0:

    return 1

  else:

    # Используйте функцию факториала

    return n * factorial(n-1)


Если ваш текстовый редактор поддерживает подсветку синтаксиса, комментарии обычно отображаются зеленым цветом.

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

# for fruit in fruits:

#   print(fruit)


Многострочные комментарии в Python (блоки комментариев)

В отличие от других популярных языков программирования, Python поддерживает только однострочные комментарии.

Самый простой способ написать многострочные комментарии в Python — добавить однострочные комментарии один за другим:

# Это первая строка.

# Это вторая строка.


Другой вариант — использовать строки документации.

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

Строка документа начинается и заканчивается тройными двойными кавычками ( «»») и может занимать одну или несколько строк:

"""Это 

многострочная строка 

документа.

"""


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

 

Python

Если вы читаете скрипты Python, вы можете заметить, что в некоторых из них первая строка начинается с символов #! и пути к интерпретатору Python:

#!/usr/bin/env python3


Эта последовательность символов вызывается shebang и используется для указания операционной системе, какой интерпретатор использовать для анализа остальной части файла. Скрипты, которые начинаются с shebang и являются исполняемыми, могут запускаться в терминале без ввода python перед именем скрипта.

Поскольку строка shebang начинается с символа хеша, она рассматривается как комментарий и автоматически игнорируется интерпретатором Python.

 

Вывод

Написание комментариев является хорошей практикой и помогает другим разработчикам, в том числе будущим, понять, что делает код. В Python все после хеш-метки ( #) и до конца строки считается комментарием.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2020-07-01T13:13:07
Python

Разбор данных JSON в Python

JSON — это читаемый человеком текстовый формат данных. Он не зависит от языка и используется для обмена данными между приложениями.В этой статье мы объясним, как анализировать данные JSON в Python.

 

Python JSON

Модуль json позволяет кодировать и декодировать данные JSON является частью стандартной библиотеки Python.

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

Ниже приведена таблица, показывающая объекты Python и их эквивалентное представление JSON:











PythonJSON
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

 

Для работы с JSON просто импортируйте модуль вверху файла:

import json


 

Кодировка JSON в Python

Модуль json имеет два метода для кодирования объектов Python в JSON отформатированных строк: dump() и dumps().

Метод dump() отправляет вывод в файл-подобный объект. Он принимает два позиционных аргумента: объект, который должен быть закодирован, и объект в виде файла. Вот пример:

data = {

    "country": "Russia",

    "vehicle": {

        "name": "Volkswagen",

        "model": "T-Roc"

    }

}



with open("file.json", "w") as file:

    json.dump(data, file)


 

Если вы запустите скрипт, он создаст файл с именем file.json:

file.json

{"country": "Russia", "vehicle": {"name": "Volkswagen", "model": "T-Roc"}}


 

Метод dumps() работает так же, как и dump(), но вместо того, чтобы послать вывод в файл-подобный объект, он возвращает строку:

data = {

    "country": "Russia",

    "vehicle": {

        "name": "Volkswagen",

        "model": "T-Roc"

    }

}



json.dumps(data)


 

'{"country": "Russia", "vehicle": {"name": "Volkswagen", "model": "T-Roc"}}'


 

Оба метода принимают одинаковые ключевые аргументы. Например, если вы анализируете или отлаживаете данные JSON, вы можете указать уровень отступа:

data = {

    "country": "Russia",

    "vehicle": {

        "name": "Volkswagen",

        "model": "T-Roc"

    }

}



print(json.dumps(data, indent=2))


 

{

  "country": "Russia",

  "vehicle": {

    "name": "Volkswagen",

    "model": "T-Roc"

  }

}


 

Расшифровка JSON в Python

Для того, чтобы преобразовать JSON закодированные данные в объекты Python, использовать методы load() и loads().

Метод load() считывает структуру JSON из файла типа объекта и преобразует его в объект Python.

Допустим, у нас есть следующий файл JSON:

file.json

[

  {

    "userId": 1,

    "id": 1,

    "title": "Meet with Lisa",

    "completed": true

  },

  {

    "userId": 1,

    "id": 2,

    "title": "Design a prototype",

    "completed": false

  }

]


 

Чтобы преобразовать данные JSON в представление Python, вы должны использовать что-то вроде этого:

import json



with open('file.json') as f:

  data = json.load(f)



type(data)


 

JSON преобразуется в список Python, который вы можете использовать в своем коде:

<class 'list'>


 

Метод loads() преобразует строку, содержащую документ JSON на объект Python:

import json



json_str= '{"userId": "1", "id": "1", "title": "Meet with Lisa", "completed": "True"}'



print(json.loads(json_str))


 

Строка преобразуется в словарь Python:

{'userId': '1', 'id': '1', 'title': 'Meet with Lisa', 'completed': 'True'}


 

Вот более сложный пример, который показывает, как сделать запрос API и декодировать данные JSON:

import json

import requests



response = requests.get("https://jsonplaceholder.typicode.com/users")

users = json.loads(response.text)



print(users)


 

Вывод

Мы рассказали вам, как кодировать и декодировать данные JSON в Python.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2020-06-29T10:06:00
Python

Оператор Modulo в Python

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

Например, 5 деленное на 3, равно 1, с остатком 2, а 8, деленное на 4, равно 2, с остатком 0.

 

Оператор Modulo в Python

В Python оператор Modulo представлен знаком процента ( %). Синтаксис выглядит следующим образом:

num1 % num2


Вот пример:

5 % 4


1


 

Если делитель (второй аргумент) равен нулю, то возбуждается ошибка ZeroDivisionError:

5 % 0


ZeroDivisionError: integer division or modulo by zero


 

Оператор по модулю также принимает плавающие числа в качестве аргументов:

6.8 % 3.4


0.0


 

При форматировании строк символ % представляет оператор интерполяции.

 

Примеры

Одним из распространенных случаев использования оператора по модулю является проверка, является ли число нечетным или четным. Если число, деленное на 2, не имеет остатка, то это четное число. В противном случае, если он оставляет остаток от 1, то число нечетное:

num = 11



if (num % 2) == 0:

   print(num, "is even")

else:

   print(num, "is odd")


 

Если вы запустите приведенный выше код, 11 % 2 оставьте остаток 1 и код внутри оператора else будет выполнен:

11 is odd


 

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

def isPrimeNumber(num):

  if num < 1:

    return False

  for i in range(2, num):

    if (num % i) == 0:

      return False

  else:

    return True


 

Сначала мы проверяем num, является ли число положительным числом. Затем мы проверяем, делится ли число на другое число в диапазоне от 2 или num без напоминания. Если ни одно из условий не выполнено, число простое.

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

def secondsToMinutes(sec):

  seconds = sec // 60

  minutes = sec % 60

  return "%d minutes and %d seconds" % (minutes, seconds)



secondsToMinutes(657)


'57 minutes and 10 seconds'


 

Оператор деления на две косые черты (//) округляет результат до ближайшего целого числа.

 

Вывод

В этой статье мы показали, как использовать оператор Python по модулю.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2020-06-19T13:48:26
Python 3

Как добавить элементы в список в Python (добавить, расширить и вставить)

При работе со списками в Python вам часто нужно добавлять новые элементы в список.

Тип данных списка Python имеет три метода для добавления элементов:

  • append() — добавляет один элемент в список.
  • extend() — добавляет элементы итерируемого в список.
  • insert() — вставляет один элемент в заданную позицию списка.

Все три метода изменяют список на месте и возвращают None.

 

Метод append() в списке Python

Метод append() добавляет один элемент в конец списка.

Синтаксис метода append() следующий:

list.append(element) 


Где, элемент element, который будет добавлен в список.

Вот пример:

characters = ['Tokyo', 'Lisbon', 'Moscow', 'Berlin'] 



characters.append('Nairobi')



print('Updated list:', characters)


Updated list: ['Tokyo', 'Lisbon', 'Moscow', 'Berlin', 'Nairobi']


 

Параметр element может быть объектом любого типа данных:

odd_numbers = [1, 3, 5, 7] 



even_numbers = [2, 4, 6]



odd_numbers.append(even_numbers)



print('Обновленный список:', odd_numbers)


Список even_numbers добавляется в список как один элемент odd_numbers.

Обновленный список: [1, 3, 5, 7, [2, 4, 6]]


 

Метод extend() в список Python

Метод extend() все элементы итератор к концу списка.

Синтаксис метода extend() следующий:

list.extend(iterable) 


 

Где iterable —  это итерация, добавляемая в список.

characters = ['Tokyo', 'Lisbon', 'Moscow', 'Berlin'] 



new_characters = ['Nairobi', 'Denver', 'Rio']



characters.extend(new_characters)



print('Список обновлен:', characters)


 

Список обновлен: ['Tokyo', 'Lisbon', 'Moscow', 'Berlin', 'Nairobi', 'Denver', 'Rio']


 

Аргументом может быть любой тип итерации:

animals = ['dog', 'cat']



# кортеж

mammals = ('tiger', 'elephant')



animals.extend(mammals)



print('Updated list:', animals)



# dictionary

birds = {'owl': 1, 'parrot': 2}



animals.extend(birds)



print('Updated list:', animals)


 

Updated list: ['dog', 'cat', 'tiger', 'elephant']

Updated list: ['dog', 'cat', 'tiger', 'elephant', 'owl', 'parrot']


 

Метод insert() в списке Python

Метод insert() добавляет один элемент в список по указанному индексу.

Синтаксис метода insert() следующий:

list.insert(index, element) 


 

Где index — это индекс элемента, перед которым нужно вставить, и elementэлемент, который нужно вставить в список. В Python индекс списка начинается с 0.

Вот пример:

fruits = ['raspberry', 'strawberry', 'blueberry'] 



fruits.insert(1, 'cranberry')



print('Updated list:', fruits)


Updated list: ['raspberry', 'cranberry', 'strawberry', 'blueberry']


 

Параметр element может быть объектом любого типа данных:

numbers = [10, 15, 20, 25] 



squares = [1, 4, 9]



numbers.insert(2, squares)



print('Updated list:', numbers)


 

Список squares вставляется как один элемент в список numbers.

Updated list: [10, 15, [1, 4, 9], 20, 25]


 

Вывод

Мы показали вам, как добавлять элементы в список в Python с использованием методов append(), extend() и insert(). Другой способ добавить элементы в список, использовать оператор +- для объединения нескольких списков.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2020-06-12T01:46:23
Python

Python. Давайте создадим простой HTTP-сервер

Веб-серверы есть везде.

Черт возьми, вы взаимодействуете с одним прямо сейчас!

Независимо от того, какой вы разработчик программного обеспечения, в какой-то момент вашей карьеры вам придется взаимодействовать с веб-серверами. Может быть, вы создаете сервер API для бэкэнда. Или, может быть, вы просто настраиваете веб-сервер для своего сайта.

В этой статье мы расскажем, как создать самый простой http веб-сервер на Python.

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

Если вы уже знаете, как работают веб-серверы, вы можете сразу перейти к этому разделу.

  • Что такое HTTP-сервер?
  • Адрес сокета TCP
  • Создайте простой файл HTTP
  • Создать HTTP веб-сервер

 

Что такое HTTP-сервер?

Веб-сервер HTTP — это не что иное, как процесс, который выполняется на вашем компьютере и выполняет ровно две вещи:

1- Прослушивает входящие HTTP-запросы на определенный адрес сокета TCP (IP-адрес и номер порта, о которых мы расскажем позже)

2- Обрабатывает этот запрос и отправляет ответ обратно пользователю.

 

Но что на самом деле происходит под капотом?

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

Но для простоты мы отвлечемся от некоторых деталей и расскажем об этом на очень высоком уровне.

На высоком уровне, когда вы набираете www.yandex.ru  в своем браузере, ваш браузер создаст сетевое сообщение, называемое HTTP-запросом.

Этот запрос будет распространяться на компьютер yandex, на котором работает веб-сервер. Этот веб-сервер перехватит ваш запрос и обработает его, отвечая HTML-кодом домашней страницы yandex.

Наконец, ваш браузер отображает этот HTML на экране, и это то, что вы видите на своем экране.

Каждое взаимодействие с домашней страницей yandex после этого (например, когда вы нажимаете на ссылку) инициирует новый запрос и ответ точно так же, как первый.

Повторим еще раз: на машине, которая получает запрос http, работает программный процесс, называемый веб-сервером. Этот веб-сервер отвечает за перехват этих запросов и их обработку соответствующим образом.

Хорошо, теперь, когда вы знаете, что такое веб-сервер и какова его функция, вам может быть интересно, как запрос в первую очередь достигает машины yandex?

Хороший вопрос!

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

 

Адрес сокета TCP

Любое http-сообщение (будь то запрос или ответ) должно знать, как добраться до места назначения.

Чтобы достичь места назначения, каждое http-сообщение содержит адрес, называемый адресом TCP назначения.

И каждый TCP-адрес состоит из IP-адреса и номера порта.

Мы знаем, что все эти аббревиатуры (TCP, IP и т. д.) могут быть ошеломляющими, если ваши сетевые знания не сильны.

Так где же этот адрес, когда все, что вы сделали, и набрали www.yandex.ru в вашем браузере?

Ну, это доменное имя преобразуется в IP-адрес через большую распределенную базу данных, называемую DNS.

Хотите проверить, что это за IP-адрес?

Легко! Зайдите в свой терминал и сделайте следующее:

$ host yandex.ru

Yandex.ru has address 77.88.55.66                                                                                                                                               

Yandex.ru has address 5.255.255.70                                                                                                                                              

Yandex.ru has address 77.88.55.70                                                                                                                                               

Yandex.ru has address 5.255.255.60                                                                                                                                              

Yandex.ru has IPv6 address 2a02:6b8:a::a                                                                                                                                        

Yandex.ru mail is handled by 10 mx.Yandex.ru.

 

Как видите, как DNS переведет yandex.ru на любой из указанных выше адресов.

Один только IP-адрес позволит HTTP-сообщению поступить на нужный компьютер, но вам все равно нужен номер порта, чтобы HTTP-запрос поступил именно на веб-сервер.

Другими словами, веб-сервер — это обычное сетевое приложение, которое прослушивает определенный порт.

И HTTP-запрос ДОЛЖЕН быть адресован этому порту.

Так где же номер порта при вводе www.yandex.ru ?

По умолчанию номер порта равен 80 для http и 443 для https, поэтому даже если вы не указали номер порта явно, он все еще там.

И если веб-сервер прослушивает номер порта не по умолчанию (ни 80, ни 443), вы должны явно указать номер порта следующим образом:

www.yandex.ru:445

 

К настоящему времени у вас должна быть вся необходимая информация для создания http-сервера на Python.

Так что без дальнейших церемоний, давайте начнем.

 

Создайте простой файл HTML

Вот что мы хотим сделать.

Мы хотим создать простой http-сервер, который обслуживает статическую HTML-страницу.

Давайте создадим нашу HTML-страницу.

<html>

    <head>

        <title>Python-это потрясающе!</title>

    </head>

    <body>

        <h1>yandex</h1>

        <p>Поздравляю! Сервер HTTP работает!</p>

    </body>

</html>

 

Теперь сохраните этот файл как index.html.

Теперь, для обслуживания веб-страницы, следующим шагом является создание веб-сервера, который будет обслуживать эту HTML-страницу.

 

Создать HTTP веб-сервер

Чтобы создать веб-сервер в Python 3, вам нужно импортировать два модуля: http.server и socketserver

Обратите внимание, что в Python 2 был модуль с именем  SimpleHTTPServer. Этот модуль был объединен с http.server в Python 3

Давайте посмотрим на код для создания http-сервера

import http.server

import socketserver



PORT = 8080

Handler = http.server.SimpleHTTPRequestHandler



with socketserver.TCPServer(("", PORT), Handler) as httpd:

    print("serving at port", PORT)

    httpd.serve_forever()

 

Просто так у нас есть функциональный http-сервер.

Теперь давайте разберем этот код построчно.

Во-первых, как мы упоминали ранее, веб-сервер — это процесс, который прослушивает входящие запросы на определенный TCP-адрес.

И, как вы уже знаете, TCP-адрес идентифицируется по IP-адресу и номеру порта.

Во-вторых, веб-сервер также должен знать, как обрабатывать входящие запросы.

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

Конечно, эти обработчики могут делать все что угодно.

Но что вы думаете, какой самый основной обработчик?

Ну, это будет обработчик, который просто обслуживает статический файл.

Другими словами, когда мы заходим на yandex.ru, веб-сервер на другом конце отправляет обратно статический HTML-файл.

Это на самом деле то, что мы пытаемся сделать.

И это, и есть то, что является http.server.SimpleHTTPRequestHandler : простой обработчик HTTP-запросов, который обслуживает файлы из текущего каталога и любых его подкаталогов.

 

Класс socketserver.TCPServer

Теперь поговорим о классе socketserver.TCPServer.

Экземпляр TCPServer описывает сервер, который использует протокол TCP для отправки и получения сообщений (http — это протокол прикладного уровня поверх TCP).

Чтобы создать экземпляр TCP-сервера, нам нужны две вещи:

  1. TCP-адрес (IP-адрес и номер порта)
  2. Обработчик

 

socketserver.TCPServer(("", PORT), Handler)

 

Как видите, TCP-адрес передается в виде кортежа (IP-адрес, номер порта)

Передача пустой строки в качестве IP-адреса означает, что сервер будет прослушивать любой сетевой интерфейс (все доступные IP-адреса).

А поскольку PORT хранит значение 8080, сервер будет прослушивать входящие запросы на этот порт.

Для обработчика мы передаем простой обработчик, о котором мы говорили ранее.

Handler = http.server.SimpleHTTPRequestHandler

 

Ну, а как насчет serve_forever?

serve_forever — это метод в экземпляре TCPServer, который запускает сервер и начинает прослушивать и отвечать на входящие запросы.

Круто, давайте сохраним этот файл как server.py в том же каталоге, что и index.html, потому что по умолчанию SimpleHTTPRequestHandler будет искать файл с именем index.html в текущем каталоге.

В этом каталоге запустите веб-сервер:

$ python server.py

serving at port 8080

 

Благодаря этому теперь у вас есть HTTP-сервер, который прослушивает любой интерфейс на порте 8080 и ожидает входящие HTTP-запросы.

Пришло время для забавных вещей!

Откройте браузер и введите localhost:8080 в адресной строке.

Потрясающие! Похоже, все работает нормально.

Но что такое localhost ?

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

А поскольку веб-сервер прослушивает любой интерфейс, он также прослушивает интерфейс обратной связи.

Вы хотите знать, какой IP-адрес соответствует localhost?

Введите следующее:

$ host localhost

localhost has address 127.0.0.1

localhost has IPv6 address ::1

Host localhost not found: 3(NXDOMAIN)

 

Фактически вы можете полностью заменить localhost на 127.0.0.1 в вашем браузере, и вы все равно получите тот же результат.

 

Одно последнее слово

На самом деле вы можете запустить веб-сервер с python, даже не создавая никаких скриптов.

Просто зайдите в свой терминал и сделайте следующее (но убедитесь, что вы на Python 3)

python -m http.server 8080

 

По умолчанию этот сервер будет прослушивать все интерфейсы и порт 8080.

Если вы хотите прослушать определенный интерфейс, сделайте следующее:

python -m http.server 8080 --bind 127.0.0.1

 

Также начиная с Python 3.7, вы можете использовать флаг –directory для обслуживания файлов из каталога, который не обязательно является текущим каталогом.

Таким образом, теперь возникает вопрос: зачем вам когда-либо писать сценарий, когда вы можете просто вызывать сервер из терминала?

Хорошо, помните, что вы используете  SimpleHTTPRequestHandler. Если вы хотите создать свои собственные обработчики (что вы, вероятно, захотите), то вы не сможете сделать это из терминала.



2020-06-05T15:50:58
Python 3