Основы языка программирования python за 10 минут

Алан-э-Дейл       19.08.2023 г.

Запись файла

Чтобы записать текст в файл, нам нужно открыть файл с помощью метода open с одним из следующих режимов доступа.

  • w: он перезапишет файл, если какой-либо файл существует. Указатель файла находится в начале файла.
  • a: добавит существующий файл. Указатель файла находится в конце файла. Он создает новый файл, если файл не существует.

Пример 1.

# open the file.txt in append mode. Create a new file if no such file exists.
fileptr = open("file2.txt", "w")

# appending the content to the file
fileptr.write('''Python is the modern day language. It makes things so simple.
It is the fastest-growing programing language''')

# closing the opened the file
fileptr.close()

Выход:

File2.txt

Python is the modern-day language. It makes things so simple. It is the fastest growing programming language.

Скриншот файла file2.txt

Мы открыли файл в режиме w. Файл file1.txt не существует, он создал новый файл, и мы записали его содержимое с помощью функции write().

Пример 2.

#open the file.txt in write mode.  
fileptr = open("file2.txt","a")
  
#overwriting the content of the file  
fileptr.write(" Python has an easy syntax and user-friendly interaction.")  
    
#closing the opened file   
fileptr.close()

Выход:

Python is the modern day language. It makes things so simple.
It is the fastest growing programing language Python has an easy syntax and user-friendly interaction.

Снимок файла file2.txt

Мы видим, что содержимое файла изменено. Мы открыли файл в режиме и добавили содержимое в существующий файл file2.txt.

Чтобы прочитать файл с помощью сценария Python, Python предоставляет метод read(). Метод read() считывает строку из файла. Он может читать данные как в текстовом, так и в двоичном формате.

Синтаксис метода read() приведен ниже.

fileobj.read(<count>)      

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

Рассмотрим следующий пример.

#open the file.txt in read mode. causes error if no such file exists.  
fileptr = open("file2.txt","r")
#stores all the data of the file into the variable content  
content = fileptr.read(10) 
# prints the type of the data stored in the file  
print(type(content))    
#prints the content of the file  
print(content)     
#closes the opened file  
fileptr.close()  

Выход:

<класс 'str'>
 Python is

В приведенном выше коде мы прочитали содержимое file2.txt с помощью функции read(). Мы передали значение счетчика как десять, что означает, что он будет читать первые десять символов из файла.

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

content = fileptr.read()
print(content) 

Выход:

Python is the modern-day language. It makes things so simple.
It is the fastest-growing programing language Python has easy an syntax and user-friendly interaction

Установка PyAutoGUI в Python

Процесс установки PyAutoGUI довольно прост для всех операционных систем. Однако существует несколько зависимостей для Mac и Linux, которые необходимо установить перед установкой и использованием библиотеки PyAutoGUI в программах.

Windows

Для Windows PyAutoGUI не имеет зависимостей. Просто запустите следующую команду в командной строке, и установка будет завершена.

$ pip install PyAutoGUI

Mac

Для Mac сначала необходимо последовательно установить модули pyobjc-core и pyobjc. Ниже приведены команды, которые необходимо последовательно запустить в терминале для успешной установки:

$ pip3 install pyobjc-core
$ pip3 install pyobjc
$ pip3 install pyautogui

Linux

Для Linux единственная зависимость – это python3-xlib (для Python 3). Чтобы установить его, а затем pyautogui, запустите в своем терминале две указанные ниже команды:

$ pip3 install python3-xlib
$ pip3 install pyautogui

Ввод Данных С Помощью Функции raw_input ( )

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

В Python 2.7 вам нужно использовать raw_input(). Эта функция считывает только одну строку из стандартного ввода и по умолчанию возвращает ее в виде строки.

Если вы используете python 2, то нам нужно использовать функцию raw_input() вместо функции input ().

Примечание: функция raw_input() выведена из эксплуатации в Python 3.

Функция map

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

Встроенная в Python функция – это функция более высокого порядка, которая предназначена для выполнения именно такой задачи. Она позволяет обрабатывать одну или несколько последовательностей с использованием заданной функции. Вот общий формат функции :

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

В приведенном выше интерактивном сеансе в строках 1 и 2 двум переменным, seq и seq2, присваиваются две итерируемые последовательности. В строке 3 переменной result присваивается результат применения функции map, в которую в качестве аргументов были переданы ранее определенная лямбда-функция и две последовательности

Обратите внимание, что функция map возвращает объект-последовательность map, о чем говорит строка 5. Особенность объекта-последовательности map состоит в том он может предоставлять свои элементы, только когда они требуются, используя ленивые вычисления

Ленивые вычисления – это стратегия вычисления, согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат. Программистам часто приходится обрабатывать последовательности, состоящие из десятков тысяч и даже миллионов элементов. Хранить их в оперативной памяти, когда в определенный момент нужен всего один элемент, не имеет никакого смысла. Ленивые вычисления позволяют генерировать ленивые последовательности, которые при обращении к ним предоставляют следующий элемент последовательности. Чтобы показать ленивую последовательность, в данном случае результат работы примера, необходимо эту последовательность «вычислить». В строке 6 объект map вычисляется во время преобразования в список.

Индексирование и нарезка кортежей

Индексация и нарезка кортежа аналогичны спискам. Индексирование в кортеже начинается с 0 и продолжается до длины(tuple) – 1.

Доступ к элементам в кортеже можно получить с помощью оператора index []. Python также позволяет нам использовать оператор двоеточия для доступа к нескольким элементам в кортеже.

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

Рассмотрим следующий пример:

tup =(1,2,3,4,5,6,7)
print(tup)
print(tup)
print(tup)
# It will give the IndexError
print(tup)

Выход:

1
2
3
tuple index out of range

В приведенном выше коде кортеж состоит из 7 элементов, которые обозначают от 0 до 6. Мы попытались получить доступ к элементу вне кортежа, который вызвал ошибку IndexError.

tuple =(1,2,3,4,5,6,7)
#element 1 to end
print(tuple)
#element 0 to 3 element 
print(tuple)
#element 1 to 4 element
print(tuple) 
# element 0 to 6 and take step of 2
print(tuple)

Выход:

(2, 3, 4, 5, 6, 7)(1, 2, 3, 4)(1, 2, 3, 4)(1, 3, 5)

Строки

Как насчет твоего имени? Введи своё имя в кавычках, вот так:

command-line

Ты только что создала свою первую строку! Это последовательность символов, которые могут быть обработаны компьютером. Строка должна всегда начинаться и заканчиваться одинаковым символом. Им может быть одинарная () или двойная () кавычка (разницы нет!) Кавычки говорят Python’у, что внутри них находится строка.

Строки могут быть слиты воедино. Попробуй так:

command-line

Ты также можешь умножать строки на число:

command-line

Если тебе нужно поставить апостроф внутри строки, то есть два способа сделать это.

Используй двойные кавычки:

command-line

или поставь перед апострофом обратную косую черту ():

command-line

Прикольно, да? Чтобы увидеть своё имя прописными буквами, просто набери:

command-line

Ты только что использовала метод своей строки! Метод (такой как ) представляет собой набор инструкций, который должен выполнить Python над заданным объектом (в нашем случае: ) при его вызове.

Если ты хочешь узнать количество букв в своём имени, то и для этого тоже существует функция!

command-line

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

Подведём итог

Хорошо, достаточно о строках. Пока ты узнала следующее:

  • командная строка — ввод команд (кода) в интерактивную командную строку Python приводит к ответам на Python;
  • числа и строки — в Python числа используются для вычислений, а строки — для текстовых объектов;
  • операторы, такие как + и *, объединяют значения для получения нового;
  • функции, такие как upper() и len(), выполняют действия над объектами.

Таковы основы каждого языка программирования, который ты можешь выучить. Готова к чему-то посложнее? Мы уверены, что готова!

Рекомендации по ФП на языке Python

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

Что делает функции нечистыми?

  • Глобальные мутации, т.е. внесение изменений в глобальное состояние,

  • Недетерминированность функций, т.е. которые для одинаковых входных значений могут возвращать разные результаты, и

  • Операции ввода-вывода.

Пример глобальной мутации:

Пример недетерминированности:

Пример операции ввода-вывода:

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

Ссылочная прозрачность (1) улучшает тестопригодность программ, т.е. поведение подпрограмм не зависит от контекста, повторный запуск приложения дает одинаковый результаты как следствие отсутствия мутаций, (2) обеспечивается модульность, т.е. поведение функций не зависит от контекста, и чистые функции можно легко составлять в композиции, строя новые формы поведений, (3) упрощает обеспечение конкурентности из-за отсутствия необходимости в синхронизации, т.к. отсутствие совместных мутируемых данных делает синхронизацию ненужной.

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

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

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

  • Правило модульности — писать простые части, которые можно соединять чистыми интерфейсами.

Указанные выше два простых правила делают ненужными архитектурные шаблоны и принципы ООП, заменяя их функциями! А что, спросите вы, и классы тоже? В Python использование классов не противоречит ФП, если в них отсутствует мутирующие интерфейсы.

Пример класса с мутирующим интерфейсом:

Пример класса без мутирующего интерфейса:

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

При всем при этом dataclasses могут быть вполне себе умными!

Также следует использовать сторонние функциональные библиотеки (например, toolz), которые обеспечивают более оптимальную композиционность функций.

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

И применять архитектурный шаблон «немутируемое ядро — мутируемая оболочка» (aka «функциональное ядро — императивная оболочка»), который позволяет выносить мутацию во вне и производить ее на границах приложения.

Методы списков в Python

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

Давайте подумаем о списках покупок. Какие операции мы с ними проделываем чаще всего?

  • Добавляем элементы (по одному или несколько сразу)
  • Удаляем элементы
  • Меняем порядок элементов.

Как добавлять элементы в список

Мы можем добавлять элементы, вставляя их по одному в конец списка. Это делается при помощи метода . Давайте добавим в наш .

shopping_list.append('grapes')
print(shopping_list)

>> 

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

shopping_list.extend()
print(shopping_list)

>> ['apples', 'pens', 'candy', 'notepad', 'brushes', 'paint', 'grapes', 'protein bars', 'cheese'

Примечание. Есть существенная разница между методами и и оператором конкатенации .

Оператор создает новый список, комбинируя списки, указанные в качестве операндов. А методы и изменяют список, для которого они вызваны, и не возвращают новых списков.

Как удалять элементы из списка

Мы можем удалять элементы из списка по одному или даже группами.

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

last_element = shopping_list.pop()
print(shopping_list)
print(last_element)
# Вывод
>> 
>> cheese

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

not_needed = shopping_list.pop(2)
print(not_needed)
# Вывод
>> candy

Если нам не нужен доступ к значению удаляемого элемента, можно воспользоваться функцией .

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

del shopping_list
print(shopping_list)
# Вывод
>> 

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

В нашем примере элемент под индексом 1 — это . Если бы мы не знали индекс , мы могли бы просто написать и получить такой же результат, как в примере кода выше.

Для удаления всех элементов из списка можно использовать .

Примечание. При попытке удалить элемент, которого нет в списке, мы получим ValueError.

Глобальные переменные

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

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

# Declare a variable and initialize it
x = 101

# Global variable in function
def mainFunction():
    # printing a global variable
    global x
    print(x)
    # modifying a global variable
    x = 'Welcome To Javatpoint'
    print(x)

mainFunction()
print(x)

Выход:

101
Welcome To Javatpoint
Welcome To Javatpoint

Объяснение:

В приведенном выше коде мы объявили глобальную переменную x и присвоили ей значение. Затем мы определили функцию и получили доступ к объявленной переменной, используя ключевое слово global внутри функции. Теперь мы можем изменить значение. Затем мы присвоили переменной x новое строковое значение. Теперь мы вызвали функцию и приступили к печати x. Она напечатала новое присвоенное значение x.

Unicode

Python поддерживает Unicode так как по дефолту в нём используется UTF-8

Это позволяет использовать юникод символы без заморочек

>>> «Pythonia voi käyttää myös vaativassa ja tieteellisessä»

‘Pythonia voi käyttää myös vaativassa ja tieteellisessä’

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

>>> «Pythonia voi k\u00e4ytt\u00e4\u00e4 my\u00f6s vaativassa ja tieteellisess\u00e4»

‘Pythonia voi käyttää myös vaativassa ja tieteellisessä’

Можно получить юникод символы и другими способами

‘\xe4’

‘ä’

Твоя собственная функция!

Помнишь функции, такие как , которые можно использовать в Python? Тогда у нас есть хорошая новость — сейчас ты научишься писать свои собственные функции!

Функция — это последовательность инструкций, которые должен выполнить Python. Каждая функция в Python начинается с ключевого слова , имеет свое имя и параметры. Давай начнем с простого примера. Замени код в python_intro.py на следующий:

python_intro.py

Отлично, наша первая функция готова!

Ты можешь задаться вопросом, почему мы написали имя функции в конце файла. Причина в том, что Python читает и исполняет код из файла сверху вниз. Поэтому для использования нашей функции мы должны вызвать её в конце файла.

Давай запустим и посмотрим, что произойдет:

command-line

Примечание: если это не сработало, не поддавайся панике! Вывод командной строки поможет тебе понять, почему так произошло:

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

Давай напишем нашу первую функцию с параметрами. Мы будем использовать предыдущий пример — функцию, которая пишет ‘hi’ и имя пользователя:

python_intro.py

Как ты можешь заметить, мы передали нашей функции параметр :

python_intro.py

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

command-line

Упс, ошибка. К счастью, Python выдает довольно подробное сообщение об ошибке. Оно говорит нам, что функция (которую мы определили) имеет один обязательный аргумент (), и мы забыли передать его при вызове функции. Давай исправим это в конце файла:

python_intro.py

И запустим ещё раз:

command-line

А если мы поменяем имя?

python_intro.py

И повторим:

command-line

Теперь, как ты думаешь, что произойдет, если ты наберешь другое имя? (Не Ola или Sonja) Попробуй сама и проверь, была ли ты права. Результат должен быть таким:

command-line

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

Давай попробуем что-то похитрее — существует немало имён, и писать условие для каждого будет тяжело, правда?

python_intro.py

Давай выполним этот код:

command-line

Поздравляем! Ты только что научилась писать свои собственные функции 🙂

Pressing & Releasing Buttons

Next, you can also simulate key presses using the function:

This will press and release the space button. In fact, there is an equivalent function that does the same thing.

You can also pass multi-keys:

The operator means we press both buttons at the same time, you can also use multi-step hotkeys:

But what if you want to press a specific key but you don’t want to release it? Well, and functions come into play:

So this will press the CTRL button and then release it, you can do anything in between, such as sleeping for few seconds, etc.

But now what if you want to write a long text and not just specific buttons? would be inefficient. Luckily for us, the function does exactly that, it sends artificial keyboard events to the OS simulating the typing of a given text, let’s try it out:

Setting the delay to 0.1 indicates 0.1 seconds to wait between key presses, this will look fancy like in hacking movies!

Оператор возврата return

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

Синтаксис:

return 

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

Рассмотрим следующие примеры:

Пример 1.

# Defining function
def sum():
    a = 10
    b = 20
    c = a+b
    return c
# calling sum() function in print statement
print("The sum is:",sum())

Выход:
В приведенном выше коде мы определили функцию с именем sum, и у нее есть оператор c = a + b, который вычисляет заданные значения, а результат возвращается оператором return вызывающей функции.

Пример 2. Создание функции без оператора возврата

# Defining function
def sum():
    a = 10
    b = 20
    c = a+b
# calling sum() function in print statement
print(sum())

Выход:

None

В приведенном выше коде мы определили ту же функцию без оператора return, так как мы видим, что функция sum() вернула объект None вызывающей функции.

Типы данных и преобразование типов

Перечислим основные типы данных в Python, которые понадобятся на ближайших уроках:

  • int – целочисленные значения;float – вещественные (дробные) значения;bool – логические значения — истина (True) или ложь (False);str – символьная строка или единичный символ.

Рассмотрим примеры использования основных типов в Python:Целые числа (int):

num = 13
print(num)  # 13
 
num = 
print(num)  # 0
 
num = -10
print(num)  # -10
 
num = 500_000_000  # для удобства чтения
print(num) # 500000000

Вещественные числа (float):

num = 13.4
print(num) # 13.4
 
num = 0.0
print(num) # 0.0
 
num = -15.2
print(num) # -15.2
 
num = 100_000.000_002 # для удобства чтения
print(num) # 100000.000002
 
num = 1.7e2 # 1.7 умножить на 10 в степени 2
print(num) # 170

Логический тип (bool):

print(15 == 15) # True
 
print(1 != 3) # True
 
print(3 > 4) # False
 
print(3 <= 3) # True
 
print(6 >= 6) # True
 
print(6 < 5) # False
 
x = 2
print(1 < x < 3) # True

Строки (str):

example_string = "Очень интересно"
print(example_string) # Очень интересно
 
example_string = 'Пьеса "На дне"'
print(example_string) # Пьеса "На дне"
 
example_string = "Пьеса \"На дне\"
print(example_string) # Пьеса "На дне"
 
example_string = "Как " \
                 "разбить " \
                 "объявление длинной строки"
print(example_string) # Как разбить объявление длинной строки
 
example_string = """
                 Как  
                 оставить сроку
                 в несколько строк
                 """
print(example_string) 
# Как  
# оставить сроку
# в несколько строк
# Как объединить две строки в одну
print("Можно их" + " сложить") # Можно их сложить 
 
print("Можно и так!" * 3) # Можно и так!Можно и так!Можно и так!

Рассмотрим примеры того, как используется преобразование типов в Питон:

  • преобразование в символьную строку:
1
2
3
a = 1.7
a=str(a)
print(a) # '1.7'

преобразование в целое:

1
2
3
x = 1.7
x=int(x)
print(x) # 1

преобразование в вещественное:

1
2
3
y=1
y=float(y)
print(y) # 1.0

Проверка условий в Python.

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

>>> car = ‘audi’
>>> car == ‘audi’True

Присвоим переменной car значение ‘audi’. Во второй строке проверим равно ли значение переменной car. Двойной знак равно (==) используется для проверки равенства. В итоге Python возвращает значение True, означающий что значения равны. В случае неравенства значений, возвращается False.

>>> car = ‘audi’
>>> car == ‘bmw’False

В Python проверка равенства выполняется с учетом регистра. В случае написания значений с разным регистром, значения получаются не равными.

>>> car = ‘audi’
>>> car == ‘Audi’False

Проверка неравенства.

Проверка неравенства происходит с помощью восклицательного знака и знака равно ( != ). Восклицательный знак представляет отрицание, как и во многих языках программирования.

>>> car = ‘audi’
>>> car != ‘bmw’True

Функции клавиатуры record() и play()

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

Функция record() принимает ключ запуска, до которого она записывает, и возвращает последовательность событий типа KeyboardEvent. Затем вы можете поместить эту последовательность событий в функцию play(), которая точно воспроизводит их, с дополнительным аргументом speed_factor. Он действует как множитель скорости исходных событий:

Если мы напечатаем recorded_events, они будут выглядеть примерно так:

Позиции указателя файла

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

# open the file file2.txt in read mode  
fileptr = open("file2.txt","r")  

#initially the filepointer is at 0   
print("The filepointer is at byte :",fileptr.tell())  
  
#reading the content of the file  
content = fileptr.read();  
  
#after the read operation file pointer modifies. tell() returns the location of the fileptr.   
  
print("After reading, the filepointer is at:",fileptr.tell())  

Выход:

The filepointer is at byte : 0
After reading, the filepointer is at: 117
Гость форума
От: admin

Эта тема закрыта для публикации ответов.