Учебники

Объектно-ориентированные ярлыки

В этой главе подробно рассказывается о различных встроенных функциях в Python, операциях файлового ввода-вывода и концепциях перегрузки.

Встроенные функции Python

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

ВСТРОЕННЫЕ ФУНКЦИИ
абс () DICT () Помогите() мин () SetAttr ()
все() DIR () гекс () следующий() ломтик()
любой() divmod () Я бы() Объект () отсортировано ()
ASCII () перечислить () вход () Октябрь () STATICMETHOD ()
бен () Eval () Int () открыть() ул ()
BOOL () Exec () isinstance () Ord () сумма ()
ByteArray () фильтр() issubclass () POW () супер()
байт () плавать () ITER () Распечатать() кортеж ()
вызываемый () формат() LEN () имущество() тип()
CHR () frozenset () список() спектр() вары ()
classmethod () GetAttr () местные () магнезии () застежка-молния ()
компиляции () глобалы () карта() негативы () __Импортировать__()
сложный() hasattr () Максимум() круглый()
delattr () хэш () memoryview () задавать()

В этом разделе кратко обсуждаются некоторые важные функции —

функция len ()

Функция len () получает длину строк, списка или коллекций. Возвращает длину или количество элементов объекта, где объект может быть строкой, списком или коллекцией.

>>> len(['hello', 9 , 45.0, 24])
4

Функция len () внутренне работает как list .__ len __ () или кортеж .__ len __ () . Таким образом, обратите внимание, что len () работает только с объектами, которые имеют метод __len __ () .

>>> set1
{1, 2, 3, 4}
>>> set1.__len__()
4

Однако на практике мы предпочитаем len () вместо функции __len __ () по следующим причинам:

  • Это более эффективно. И не обязательно, чтобы конкретный метод был написан для отказа в доступе к специальным методам, таким как __len__.

  • Это легко поддерживать.

  • Поддерживает обратную совместимость.

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

Это легко поддерживать.

Поддерживает обратную совместимость.

Перевернутый (сло)

Возвращает обратный итератор. seq должен быть объектом, который имеет метод __reversed __ () или поддерживает протокол последовательности (метод __len __ () и метод __getitem __ ()). Обычно он используется для циклов for, когда мы хотим перебирать элементы сзади и вперед.

>>> normal_list = [2, 4, 5, 7, 9]
>>>
>>> class CustomSequence():
   def __len__(self):
      return 5
   def __getitem__(self,index):
      return "x{0}".format(index)
>>> class funkyback():
   def __reversed__(self):
      return 'backwards!'
>>> for seq in normal_list, CustomSequence(), funkyback():
      print('\n{}: '.format(seq.__class__.__name__), end="")
      for item in reversed(seq):
         print(item, end=", ")

Цикл for в конце печатает перевернутый список обычного списка и экземпляры двух пользовательских последовательностей. Вывод показывает, что reversed () работает на всех трех из них, но имеет совершенно разные результаты, когда мы определяем __reversed__ .

Выход

Вы можете наблюдать следующий вывод при выполнении кода, приведенного выше —

list: 9, 7, 5, 4, 2,
CustomSequence: x4, x3, x2, x1, x0,
funkyback: b, a, c, k, w, a, r, d, s, !,

перечислять

Метод enumerate () добавляет счетчик к итерируемому и возвращает объект перечисления.

Синтаксис enumerate () — это

enumerate(iterable, start = 0)

Здесь второй аргумент start является необязательным, и по умолчанию индекс начинается с нуля (0).

>>> # Enumerate
>>> names = ['Rajesh', 'Rahul', 'Aarav', 'Sahil', 'Trevor']
>>> enumerate(names)
<enumerate object at 0x031D9F80>
>>> list(enumerate(names))
[(0, 'Rajesh'), (1, 'Rahul'), (2, 'Aarav'), (3, 'Sahil'), (4, 'Trevor')]
>>>

Таким образом, enumerate () возвращает итератор, который выдает кортеж, который хранит количество элементов в переданной последовательности. Поскольку возвращаемое значение является итератором, прямой доступ к нему не очень полезен. Лучшим подходом для enumerate () является учет в цикле for.

>>> for i, n in enumerate(names):
   print('Names number: ' + str(i))
   print(n)
Names number: 0
Rajesh
Names number: 1
Rahul
Names number: 2
Aarav
Names number: 3
Sahil
Names number: 4
Trevor

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

  • hasattr, getattr, setattr и delattr, которые позволяют атрибутам объекта манипулировать их строковыми именами.

  • all и any, которые принимают итерируемый объект и возвращают True, если все или любые из элементов оцениваются как true.

  • nzip, который принимает две или более последовательностей и возвращает новую последовательность кортежей, где каждый кортеж содержит одно значение из каждой последовательности.

hasattr, getattr, setattr и delattr, которые позволяют атрибутам объекта манипулировать их строковыми именами.

all и any, которые принимают итерируемый объект и возвращают True, если все или любые из элементов оцениваются как true.

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

Файловый ввод / вывод

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

Встроенная функция open () используется для открытия файла и возврата объекта файла. Это наиболее часто используемая функция с двумя аргументами:

open(filename, mode)

Функция open () вызывает два аргумента, первый — имя файла, а второй — режим. Здесь режим может быть «r» для режима «только чтение», «w» только для записи (существующий файл с тем же именем будет удален), а «a» открывает файл для добавления, любые данные, записанные в файл, добавляются автоматически к концу. «r +» открывает файл для чтения и записи. Режим по умолчанию только для чтения.

В Windows добавленный в режим «b» открывает файл в двоичном режиме, поэтому существуют также режимы, такие как «rb», «wb» и «r + b».

>>> text = 'This is the first line'
>>> file = open('datawork','w')
>>> file.write(text)
22
>>> file.close()

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

>>> f = open('datawork','a')
>>> text1 = ' This is second line'
>>> f.write(text1)
20
>>> f.close()

Когда файл открыт для чтения, мы можем вызвать метод read, readline или readlines, чтобы получить содержимое файла. Метод read возвращает все содержимое файла в виде объекта str или bytes, в зависимости от того, является ли второй аргумент ‘b’.

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

>>> f = open('fileone','r+')
>>> f.readline()
'This is the first line. \n'
>>> f.readline()
'This is the second line. \n'

Запись в файл с помощью метода write для файловых объектов записывает в файл объект строки (байты для двоичных данных). Метод writelines принимает последовательность строк и записывает каждое из повторяющихся значений в файл. Метод writelines не добавляет новую строку после каждого элемента в последовательности.

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

Альтернатива перегрузке метода

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

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

class Human:
   def sayHello(self, name = None):
      if name is not None:
         print('Hello ' + name)
      else:
         print('Hello ')

#Create Instance
obj = Human()

#Call the method, else part will be executed
obj.sayHello()

#Call the method with a parameter, if part will be executed
obj.sayHello('Rahul')

Выход

Hello
Hello Rahul

Аргументы по умолчанию

Функции тоже объекты

Вызываемый объект — это объект, который может принимать некоторые аргументы и, возможно, будет возвращать объект. Функция — это самый простой вызываемый объект в Python, но есть и другие, такие как классы или определенные экземпляры классов.

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

def my_func():
   print('My function was called')
my_func.description = 'A silly function'
def second_func():

   print('Second function was called')

   second_func.description = 'One more sillier function'

def another_func(func):
   print("The description:", end=" ")
   print(func.description)
   print('The name: ', end=' ')
   print(func.__name__)
   print('The class:', end=' ')
   print(func.__class__)
   print("Now I'll call the function passed in")
   func()

another_func(my_func)
another_func(second_func)

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

The description: A silly function
The name: my_func
The class: 
Now I'll call the function passed in
My function was called
The description: One more sillier function
The name: second_func
The class: 
Now I'll call the function passed in
Second function was called

вызываемые объекты

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

В Python любой объект с методом __call __ () может быть вызван с использованием синтаксиса вызова функции.