Функции Python и операции с файлами

Python
Функции Python и операции с файлами

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

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

функция

Функция в основном включает два аспекта:

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

• Пользовательские функции

Встроенные функции — это некоторые функции, поставляемые с python. Для их вызова нам нужно только передать функции соответствующие параметры. Print — самая простая и типичная встроенная функция, а пользовательские функции требуют инкапсуляции нескольких функций в соответствии с Утверждения образуют новую функцию.

пользовательская функция

1. Создайте функцию

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

In [1]: def  vol(length,width,height):
   ...:     volume = length*width*height
   ...:     return volume

В приведенных выше трех строках кода вам нужно знать:

•def: ключевое слово, определяющее функцию

• длина, ширина, высота: формальные параметры функции

• return: возвращаемое значение функции

2. Вызовите функцию

После создания пользовательской функции вы можете вызвать функцию по имени функции (аргументу):

In [2]: vol(2,2,3)
Out[2]: 12

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

In [4]: vol(2,2)
TypeError: vol() missing 1 required positional argument: 'height'

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

In [8]: vol(width=3,length=4,height=5)
Out[8]: 60

3. Значение функции по умолчанию

Формальные параметры функции также могут указывать значения по умолчанию.Если мы установим значение параметра высоты по умолчанию в функции vol выше на 2:

In [6]: def  vol(length,width,height=2):
   ...:     volume = length*width*height
   ...:     return volume
   ...:
In [7]: vol(2,2)
Out[7]: 8

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

4. Функция сбора (переменная функция)

Для формальных параметров функции мы также можем сделать их переменными:

In [9]: def test(*params):
   ...:     print('参数的长度为%d'%len(params))
   ...:     print('第三个参数为%s'%params[2])
   ...:
In [10]: test(1,2,'mao',3.14,'pp')
参数的长度为5
第三个参数为mao

Здесь вам нужно пометить формальные параметры знаком *, а затем вы можете передать несколько фактических параметров при вызове параметров.

5. Глобальное и локальное

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

In [12]: def test(a,b):
    ...:     c = 2
    ...:     return a*b*c
    
In [13]: test(2,2)
Out[13]: 8
In [14]: print(c)
NameError: name 'c' is not defined

6. Анонимная функция лямбда

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

In [20]: vol = lambda a,b,c:a*b*c

In [21]: vol(2,2,3)
Out[21]: 12

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

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

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

In [24]: def fun1(a):
    ...:     b = 2
    ...:     def fun2():
    ...:         return a*b
    ...:     return fun2()
    ...:

In [25]: fun1(4)
Out[25]: 8

Часто используемые встроенные функции

В первых двух статьях были рассмотрены встроенные функции, такие как часто используемые len, sorted, reverse, sum и т. д. Кроме того, будет представлено еще несколько основных встроенных функций.

1.макс. и мин.

求一个序列中最大值和最小值:
In [28]: min(1,2,3)
Out[28]: 1

In [29]: max(1,2,3)
Out[29]: 3

2.abs

Найдите абсолютное значение числа:

In [31]: abs(-1)
Out[31]: 1

3.round

Округлить до ближайшего десятичного знака:

In [32]: round(3.555,2)
Out[32]: 3.56

4.pow

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

In [33]: pow(2,3)#2*2*2
Out[33]: 8

In [34]: pow(2,3,3)#(2*2*2)%3
Out[34]: 2

5.divmod

Вычислите частное и остаток числа:

In [36]: divmod(10,3)
Out[36]: (3, 1)

6.help

Чтобы запросить справочную документацию для функции:

In [37]: help(abs)
Help on built-in function abs in module builtins:

abs(x, /)
    Return the absolute value of the argument.

7.filter

Функция filter() принимает два параметра, первый параметр может быть функцией или None, а второй параметр — последовательностью. Функция состоит в том, чтобы судить о каждом элементе, возвращать True или False, filter() автоматически отфильтровывает элементы, которые являются False в последовательности в соответствии с результатом оценки, и оставляет элементы, которые являются True, что можно использовать в сочетании с лямбда-выражениями. :

In [38]: list(filter(lambda x:x%2,range(10)))
Out[38]: [1, 3, 5, 7, 9]

8.map

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

In [42]: list(map(lambda x: x*2,range(10)))
Out[42]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

документ

Что касается операций чтения и записи файлов, то должна встречаться функция open(). Если файл уже существует, она откроет файл. Если он не существует, он создаст файл. Обычное использование требует двух параметров: open(filename , Режим).

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

• 'r': открыть файл только для чтения (по умолчанию).

• 'w': открыть файл в режиме записи, перезаписав существующие файлы.

• 'a': открыть файл в режиме записи, добавить запись в конце, если файл существует

• 'b': открыть файл в двоичном режиме, а затем будет комбинация режимов, таких как rb, wb и т. д.

1.read() метод для чтения

Метод read() может передавать параметр size, который представляет собой длину прочитанного содержимого. размер является необязательным параметром.Если не передано или отрицательное число, будет прочитано все содержимое файла:

In [52]: fb = open('E:/Python基础/test.txt','r')

In [53]: fb.read(10)
Out[53]: 'nai\nniatan'

In [54]: fb.read()
Out[54]: 'g\nnaitangmao'

In [55]: fb.read()
Out[55]: ''

Следует отметить три момента:

• 1. Новая строка в исходном файле представлена ​​символом новой строки '\n' при чтении и также занимает единичную длину.

• 2. Контент, который был прочитан, не может быть прочитан повторно

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

2. метод readline()

Метод readline() предназначен для чтения одной строки из файла, и в конце данных в этой строке будет новая строка '\n'. Если в одной строке нет данных, только '\n' Аналогично, при возврате Пустая строка указывает на то, что достигнут конец файла.

In [59]: fb1 = open('E:/Python基础/test.txt','r')

In [60]: fb1.readline()
Out[60]: 'nai\n'

3. метод readlines()

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

In [72]: fb3 = open('E:/Python基础/test.txt','r')

In [73]: fb3.readlines()
Out[73]: ['nai\n', 'niatang\n', 'naitangmao']

4. Перейдите к файловому объекту для чтения

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

In [81]: for i in fb4:
    ...:     print(i,end = '')
    ...:
nai
niatang
naitangmao

5. Запись файла

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

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

• При написании следует обращать внимание на то, перезаписывается ли оно или добавляется.

In [85]: fb5 = open('E:/Python基础/test1.txt','w')

In [89]: list1 = [1,2]
In [91]: fb5.write(str(list1))
Out[91]: 6

После записи с помощью write он вернет длину записанной строки.

6. Закрыть файл

Помни, помни, помни! Если вы открываете файл с помощью open(), обязательно закройте файл с помощью close() после завершения операции.

In [92]: fb5.close()

7.с путем

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

In [93]: with open('E:/Python基础/test.txt','r') as fb:
    ...:     data = fb.read()
    
In [95]: fb.closed
Out[95]: True

8.pickle

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

In [96]: import pickle
In [97]: list1 = ['nai','tang','mao',1,2,3]

In [98]: pic_f = open('E:/Python基础/list.pkl','wb')
In [99]: pickle.dump(list1,pic_f)
In [100]: pic_f.close()

Метод dump() получает два параметра, первый - содержимое, которое нужно сохранить, а второй - файловый объект, который нужно сохранить.После операции вам нужно закрыть файловый объект с помощью close().После сохранения вы можете используйте метод load() для загрузки файла Content.

In [102]: pic_f = open('E:/Python基础/list.pkl','rb')
In [103]: list2 = pickle.load(pic_f)

In [104]: list2
Out[104]: ['nai', 'tang', 'mao', 1, 2, 3]
In [105]: pic_f.close()

При использовании pickle для хранения или чтения обратите внимание на работу файловых объектов в бинарном виде, то есть ‘wb’ и ‘rb’, pickle очень подходит для хранения данных со сложными типами данных и большим объемом данных.