Прочитав эту статью, вы сможете получить определенное представление о возможностях языка Python и стиле программирования, а также сможете писать простые программы на Python.
1. Установка и эксплуатация
Руководства по установке Python для каждой системы см. в этой информации самостоятельно, и я не буду повторять их здесь.
Чтобы проверить версию Python, введите в командной строкеpython
То есть при этом он войдет в интерактивный режим командной строки, и здесь можно выполнить команду python.
Если на компьютере установлены обе версии python2.x и python3.x, введитеpython
Работает версия 2.x. Чтобы запустить 3.x, введитеpython3
.
Введите в командной строкеpython
:
Solo-mac:~ solo$ python
Python 2.7.10 (default, Aug 17 2018, 19:45:58)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Введите в командной строкеpython3
:
Solo-mac:~ solo$ python3
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
входитьexit()
для выхода из режима командной строки.
запустить файл python из командной строки
Если вы написали файл Python и хотите запустить его через командную строку, войдите в этот каталог и введите в командной строкеpython 文件名.py
Вот и все.
Например, есть файл на рабочем столеhello.py
, содержание состоит в том, чтобы напечатать предложение:
print("Hello, Python")
Чтобы запустить его, сначала войдите в каталог Desktop, а затем введите в командной строкеpython hello.py
будет работать:
Solo-mac:Desktop solo$ python hello.py
Hello, Python
2. Переменные и простые типы данных
2.1 Правила именования переменных
- Имена переменных могут содержать только буквы, цифры и символы подчеркивания. Имена переменных могут начинаться с букв или символов подчеркивания, но не с цифр, например, переменная может называться message_1, но не 1_message.
- Имена переменных не могут содержать пробелов, но для разделения слов внутри них можно использовать знаки подчеркивания. Например, переменная с именем приветствие_сообщение работает, но приветственное сообщение с именем переменной вызывает ошибку.
- Не используйте ключевые слова Python и имена функций в качестве имен переменных, т. е. не используйте слова, зарезервированные Python для специальных целей, таких как печать.
- Имена переменных должны быть короткими и описательными. Например, name лучше, чем n, student_name лучше, чем s_n, и name_length лучше, чем length_of_persons_name.
- Используйте строчную l и прописную O с осторожностью, так как они могут быть ошибочно приняты за цифры 1 и 0.
Имена переменных должны быть в нижнем регистре.Хотя нет обязательного правила, это общее правило.
2.2 Струны
Строка — это последовательность символов. В Python все строки заключаются в кавычки, причем кавычки могут быть одинарными, двойными или и теми, и другими. как:
"This is a string."
'This is also a string.'
"I love 'python'"
2.2.1 Простые операции со строками
Ниже описаны простые операции со строками.
title()
title() отображает каждое слово в верхнем регистре, то есть делает заглавной первую букву каждого слова.
>>> name = 'solo coder'
>>> name.title()
'Solo Coder'
верхний(), нижний()
Измените строку на все прописные или все строчные.
>>> name
'solo coder'
>>> name.upper()
'SOLO CODER'
>>> name.lower()
'solo coder'
>>> name
'solo coder'
Примечание: title(), upper(), lower() не изменяют исходную строку, а только выводят новую строку.
2.2.2 Объединение (конкатенация) строк
Python использует знак плюс (+) для объединения строк.
>>> first = 'solo'
>>> last = 'coder'
>>> full = first + ' ' + last
>>> full
'solo coder'
2.2.3 Используйте табуляции или символы новой строки для добавления пробелов
В программировании пробел обычно относится к любому непечатаемому символу, такому как пробелы, символы табуляции и символы новой строки.
Чтобы добавить табуляцию к строке, используйте комбинацию символов\t
, чтобы добавить новую строку в строку, используйте комбинацию символов\n
.
>>> print('\tPython')
Python
>>> print('Hello,\nPython')
Hello,
Python
2.2.4 Удалить пробел
rstrip()
убрать пробел справа,lstrip()
удалить левое поле,strip()
Удалите пробелы с обоих концов.
>>> msg = ' Python '
>>> msg
' Python '
>>> msg.rstrip()
' Python'
>>> msg.lstrip()
'Python '
>>> msg.strip()
'Python'
>>> msg
' Python '
Обратите внимание, что после выполнения команды для удаления пробелов распечатайте msg, которая по-прежнему является исходной строкой, что означает, чтоstrip()
Это также не меняет исходную строку.
2.2.5 Оператор печати в Python 2
В Python 2 синтаксис оператора печати немного отличается:
>>> python2.7
>>> print "Hello Python 2.7 world!"
Hello Python 2.7 world!
В Python 2 нет необходимости заключать в круглые скобки то, что вы хотите напечатать. Технически print в Python 3 — это функция, поэтому скобки необходимы. Некоторые операторы печати Python 2 также включают круглые скобки, но ведут себя немного иначе, чем в Python 3. Проще говоря, в коде Python 2 некоторые операторы печати содержат круглые скобки, а некоторые — нет.
2.3 Числа
2.3.1 Целые числа
В Python вы можете выполнять операции сложения (+), вычитания (-), умножения (*), деления (/) над целыми числами.
>>> 2 + 3
5
>>> 3 - 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5
Python также поддерживает порядок операций, поэтому вы можете использовать несколько операций в одном выражении. Вы также можете использовать круглые скобки, чтобы изменить порядок операций, чтобы Python выполнял операции в указанном вами порядке, как показано ниже:
>>> 2 + 3*4
14
>>> (2 + 3) * 4 20
2.3.2 Числа с плавающей запятой
Python относится к числам с десятичной точкой как к числам с плавающей запятой. В большинстве языков программирования используется этот термин, который указывает на тот факт, что десятичная точка может стоять в любом месте числа.
По большей части поведение чисел с плавающей запятой не имеет значения. Вы просто вводите числа, которые хотите использовать, и Python обычно обрабатывает их так, как вы ожидаете:
>>> 0.1 + 0.1
0.2
>>> 0.2 + 0.2 9 0.4
>>>2 * 0.1
0.2
>>>2 * 0.2
0.4
Обратите внимание, однако, что количество знаков после запятой, содержащихся в результате, может быть неопределенным:
>>> 0.2 + 0.1
0.30000000000000004
>>> 3 * 0.1
0.30000000000000004
У всех языков есть эта проблема, не о чем беспокоиться. Python попытается найти способ представить результат как можно точнее, но, учитывая способ представления чисел внутри компьютеров, в некоторых случаях это сложно. Вы узнаете больше о том, как обращаться с ним позже.
2.3.3 Использование функции str() во избежание ошибок типов
Если вы соедините числа со строками, вы получите ошибку типа. Чтобы избежать этой проблемы, вы можете использоватьstr()
Преобразуйте число в строку, а затем выполните операцию.
>>> age = 18
>>> print('my age is ' + age)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> print('my age is ' + str(age))
my age is 18
2.3.4 Целые числа в Python 2
В Python 2 деление двух целых чисел дает немного другие результаты:
>>> python2.7
>>> 3 / 2
1
Python возвращает результат 1, а не 1,5. В Python 2 результат целочисленного деления содержит только целую часть, а дробная часть удалена. Обратите внимание, что при вычислении целочисленного результата вместо округления дробная часть отбрасывается.
В Python 2, чтобы избежать этого, важно убедиться, что хотя бы один из операндов является числом с плавающей запятой, поэтому результатом также будет число с плавающей запятой:
>>> 3 / 2
1
>>> 3.0 / 2
1.5
>>> 3 / 2.0
1.5
>>> 3.0 / 2.0
1.5
Такое поведение деления часто сбивает с толку при переходе с Python 3 на Python 2 или с Python 2 на Python 3. Помните об этом необычном поведении при использовании или написании кода, использующего как числа с плавающей запятой, так и целые числа.
2.3.5 Примечания
В Python комментарии обозначаются знаком решетки (#). Все, что находится после знака решетки, интерпретатор Python игнорирует. как
# 向大家问好
print("Hello Python people!")
3. Список
Список состоит из набора элементов, расположенных в определенном порядке.
В Python квадратные скобки ([]) используются для обозначения списков, а запятые — для разделения элементов.
>>> list = []
>>> list.append('haha')
>>> list.append('heihei')
>>> list.append('hehe')
>>> list
['haha', 'heihei', 'hehe']
>>> list[0]
'haha'
Вы можете использовать -1 для получения последнего элемента, например list[-1] для получения последнего элемента и list[-2] для получения предпоследнего элемента.
3.1 Добавление, удаление, изменение и проверка списков
3.1.1 Изменение элементов
Изменяйте элементы напрямую с изменением индекса
>>> list[0] = 'nihao'
>>> list
['nihao', 'heihei', 'hehe']
3.1.2 Добавление элементов
Может быть добавлен в конце или вставлен в любом месте.
добавить в конце: добавить
>>> list.append('wa')
>>> list
['nihao', 'heihei', 'hehe', 'wa']
Вставить: вставить
>>> list.insert(1, 'hello')
>>> list
['nihao', 'hello', 'heihei', 'hehe', 'wa']
3.1.3 Удаление элементов
Существует три способа удаления:
- del: удалить по индексу
- pop(): удаляет последний элемент списка и возвращает значение последнего элемента. Вы также можете передать индекс, чтобы удалить значение в любой позиции.
- remove(): удалить по значению
>>> list
['nihao', 'hello', 'heihei', 'hehe', 'wa']
>>> del list[1]
>>> list
['nihao', 'heihei', 'hehe', 'wa']
>>> list.pop()
'wa'
>>> list.remove('hehe')
>>> list
['nihao', 'heihei']
даватьpop()
Передайте индекс, чтобы удалить значение в других позициях
>>> list
['nihao', 'heihei']
>>> list.pop(0)
'nihao'
>>> list
['heihei']
Уведомление:
Метод remove() удаляет только первое указанное значение. Если удаляемое значение может появляться в списке несколько раз, требуется цикл, чтобы определить, все ли такие значения были удалены.
Если вы не уверены, использовать ли оператор del или метод pop(), вот простой критерий: если вы хотите удалить элемент из списка и никоим образом его не использовать, используйте оператор del; продолжить использование элемента после его удаления, используйте метод pop().
3.2 Список организаций
В этом разделе описываются такие операции, как сортировка, реверсирование и вычисление длины списков.
Существует два основных способа сортировки списка:
- Постоянно сортировать список с помощью метода sort()
- Временно отсортируйте список с помощью функции sorted()
3.2.1 Используйте метод sort() для постоянной сортировки списка
использоватьsort()
метод изменит исходный список. Если вы хотите изменить сортировку на противоположную, просто передайте параметр reverse=True методу sort().
>>> list
['zhangsan', 'lisi', 'bob', 'alex']
>>> list.sort()
>>> list
['alex', 'bob', 'lisi', 'zhangsan']
>>> list.sort(reverse=True)
>>> list
['zhangsan', 'lisi', 'bob', 'alex']
3.2.2 Используйте функцию sorted() для временной сортировки списка
функцияsorted()
Позволяет отображать элементы списка в определенном порядке, не затрагивая их исходный порядок в списке.
Если вы хотите изменить сортировку, просто добавьтеsorted()
Передайте параметр reverse=True.
>>> list = ['douglas','alex','solo','super']
>>> sorted(list)
['alex', 'douglas', 'solo', 'super']
>>> list
['douglas', 'alex', 'solo', 'super']
>>> sorted(list, reverse=True)
['super', 'solo', 'douglas', 'alex']
>>> list
['douglas', 'alex', 'solo', 'super']
3.2.3 Инверсия списка
Чтобы изменить порядок сортировки элементов списка, используйте методreverse()
.reverse()
Также изменяет исходный список.
reverse()
Будет изменен только первоначальный порядок, дополнительная сортировка по алфавиту выполняться не будет.
>>> list
['douglas', 'alex', 'solo', 'super']
>>> list.reverse()
>>> list
['super', 'solo', 'alex', 'douglas']
3.2.4 Определение длины списка
Используйте функцию len(), чтобы быстро узнать длину списка.
>>> list
['super', 'solo', 'alex', 'douglas']
>>> len(list)
4
3.3 Список действий
3.3.1 Циклы
использоватьfor…in
цикл.
Python различает блоки кода по отступу, поэтому требуется правильный отступ
>>> cats
['super', 'solo', 'alex', 'douglas']
>>> for cat in cats:
... print(cat)
...
super
solo
alex
douglas
3.3.2 range()
Функция Python range() позволяет легко генерировать диапазон чисел.
>>> for value in range(1,5):
... print(value)
...
1
2
3
4
Примечание: range() создает диапазон чисел, который содержит первый аргумент, но не второй.
использоватьrange()
Создать список
>>> numbers = list(range(1,6))
>>> numbers
[1, 2, 3, 4, 5]
range()
Вы также можете указать размер шага. В следующем примере генерируются четные числа от 0 до 11:
>>> nums = list(range(0,11,2))
>>> nums
[0, 2, 4, 6, 8, 10]
3.3.3 Простые вычисления в списках
Есть несколько функций Python, предназначенных для работы со списками чисел.
- min(): вычислить минимальное значение
- max(): вычислить максимальное значение
- sum(): вычислить сумму
>>> numbers
[1, 2, 3, 4, 5]
>>> min(numbers)
1
>>> max(numbers)
5
>>> sum(numbers)
15
3.3.4 Понимание списка
Генераторы списков объединяют цикл for и код для создания нового элемента в одну строку и автоматического добавления нового элемента.
>>> squares = [value**2 for value in range(1,11)]
>>> squares
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Чтобы использовать этот синтаксис, сначала укажите описательное имя списка, например, «квадраты», затем укажите открывающую квадратную скобку и определите выражение, которое создает значение, которое вы хотите сохранить в списке. В этом примере выражение имеет значение ** 2, которое вычисляет значение в квадрате. Затем напишите цикл for, который возвращает значение выражения, за которым следует закрывающая квадратная скобка. В этом примере цикл for предназначен для значения в диапазоне (1,11), что обеспечивает значения от 1 до 10 для значения выражения ** 2. Обратите внимание, что здесь нет двоеточия в конце оператора for.
3.4 Нарезка
Чтобы создать срез, укажите индексы первого и последнего используемых элементов. Как и функция range(), Python останавливается после достижения элемента перед вторым указанным вами индексом. Для вывода первых трех элементов списка необходимо указать индексы 0~3, что приведет к выводу элементов 0, 1 и 2 соответственно.
>>> names = ['aa','bb','cc','dd']
>>> print(names[1:4])
['bb', 'cc', 'dd']
Если вы не укажете первый индекс, Python автоматически запустится с начала списка:
>>> print(names[:4])
['aa', 'bb', 'cc', 'dd']
Если конечный индекс не указан, он будет автоматически выбран в конец списка.
>>> print(names[2:])
['cc', 'dd']
Также могут использоваться отрицательные индексы, например, для возврата последних трех элементов.
>>> print(names[-3:])
['bb', 'cc', 'dd']
перебирать фрагменты
>>> for name in names[1:3]:
... print(name)
...
bb
cc
3.5 Копировать список
Нарезку можно использовать для быстрого копирования списков без указания начального и конечного индексов.
>>> names
['aa', 'bb', 'cc', 'dd']
>>> names2 = names[:]
>>> names2
['aa', 'bb', 'cc', 'dd']
Новый список, скопированный путем нарезки, полностью отличается от исходного списка, и изменение одного не влияет на другой.
>>> names.append('ee')
>>> names
['aa', 'bb', 'cc', 'dd', 'ee']
>>> names2
['aa', 'bb', 'cc', 'dd']
И если вы просто присваиваете имена именам2 по присваиванию, вы не можете получить два списка, по сути, они оба указывают на один и тот же список. Если вы измените один, другой также будет изменен.
>>> names
['aa', 'bb', 'cc', 'dd']
>>> names2 = names
>>> names2
['aa', 'bb', 'cc', 'dd']
>>> names.append('ee')
>>> names
['aa', 'bb', 'cc', 'dd', 'ee']
>>> names2
['aa', 'bb', 'cc', 'dd', 'ee']
3.6 Кортежи
Python называет значения, которые нельзя изменить, как неизменяемые, а неизменяемые списки — как кортежи.
Кортежи выглядят как списки, но обозначаются скобками, а не квадратными скобками. Как только кортеж определен, доступ к его элементам можно получить с помощью индексов, как и к элементам списка.
>>> food = ('apple', 'orange')
>>> food[0]
'apple'
>>> food[1]
'orange'
>>> food[1] = 'banana'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Использование обхода такое же, как и для списков.
4. Условное решение
В основе каждого оператора if лежит выражение, которое оценивается как True или False, которое называется условной проверкой.
-
Чтобы проверить равенство, используйте
==
-
Чтобы проверить неравенство, используйте
!=
-
цифровое сравнение
>
,<
,>=
,<=
-
несколько состояний с
and
-
несколько условий или
or
-
Проверить, содержит ли список элемент
in
>>> names ['aa', 'bb', 'cc', 'dd', 'ee'] >>> 'bb' in names True
-
Проверить, не содержит ли список элемент
>>> names ['aa', 'bb', 'cc', 'dd', 'ee'] >>> 'ff' not in names True
если оператор
простой если-иначе
>>> a = 10
>>> if a > 10:
... print('hello')
... else:
... print('bye')
...
bye
if-elif-else
>>> if a<5:
... print(a<5)
... elif 5<a<10:
... print('5<a<10')
... else:
... print('a>10')
...
a>10
5. Словарь
В Python словарь представляет собой последовательность пар ключ-значение. Каждый ключ связан со значением, и вы можете использовать ключ для доступа к связанному с ним значению. Значения, связанные с ключами, могут быть числами, строками, списками или даже словарями. Фактически любой объект Python можно использовать в качестве значения в словаре.
5.1 Добавление, удаление, изменение и поиск словаря
используй словарь
В Python словарь представлен серией пар ключ-значение, заключенных в фигурные скобки {}.
>>> user = {'name':'bob', 'sex':'male', 'age':20}
>>> user
{'name': 'bob', 'sex': 'male', 'age': 20}
значение доступа в словаре
Чтобы получить значение, связанное с ключом, укажите имя словаря, за которым следует ключ в квадратных скобках.
>>> user
{'name': 'bob', 'sex': 'male', 'age': 20}
>>> user['name']
'bob'
>>> user['age']
20
Добавить пару ключ-значение
Словарь — это динамическая структура, к которой в любое время можно добавить пары ключ-значение.
>>> user['city']='beijing'
>>> user
{'name': 'bob', 'sex': 'male', 'age': 20, 'city': 'beijing'}
Изменить значение в словаре
Чтобы изменить значение в словаре, укажите имя словаря, ключ, заключенный в квадратные скобки, и новое значение, связанное с ключом.
>>> cat = {}
>>> cat['color'] = 'white'
>>> cat['age'] = 4
>>> cat
{'color': 'white', 'age': 4}
>>> cat['age'] = 6
>>> cat
{'color': 'white', 'age': 6}
удалить пару ключ-значение
Для информации, которая больше не нужна в словаре, соответствующая пара ключ-значение может быть полностью удалена с помощью оператора del. При использовании оператора del необходимо указать имя словаря и ключ для удаления.
>>> del cat['color']
>>> cat
{'age': 6}
5.2 Обход словаря
Словари можно использовать для хранения информации различными способами, поэтому существует несколько способов обхода словаря: вы можете просмотреть все пары ключ-значение, ключи или значения словаря.
Перебрать все пары ключ-значениеitems()
>>> cat
{'age': 6, 'color': 'white', 'city': 'beijing'}
>>> for k,v in cat.items():
... print(k + '-' + str(v))
...
age-6
color-white
city-beijing
пройти черезfor k,v in cat.items()
способ перебора всех пар ключ-значение,k
представляет ключ,v
представляет значение.
Примечание. Даже при обходе словаря пары ключ-значение возвращаются в другом порядке, чем они сохраняются. Python не заботится о порядке хранения пар ключ-значение, а только отслеживает связь между ключами и значениями.
перебирать все ключиkeys()
Если вам не нужно значение, вы можете использоватьkeys()
Перебрать все ключи.
>>> cat
{'age': 6, 'color': 'white', 'city': 'beijing'}
>>> for k in cat.keys():
... print(k.title())
...
Age
Color
City
Приведенный выше пример распечатываетcat
всех ключей, со строкамиtitle()
способ сделать первую букву каждого слова заглавной.
При обходе словаря он по умолчанию проходит по всем ключам,for k in cat.keys()
иfor k in cat
тот же эффект.
Перебирает все ключи по порядку, доступныsorted()
sort, который указывает Python перечислить все ключи в словаре и отсортировать этот список перед повторением по нему.
>>> for k in sorted(cat.keys()):
... print(k.title())
...
Age
City
Color
перебирать все значенияvalues()
>>> for value in cat.values():
... print(str(value))
...
6
white
beijing
Если вам нужно удалить дубликаты, вы можете использоватьset()
>>> cat
{'age': 6, 'color': 'white', 'city': 'beijing', 'city2': 'beijing'}
>>> for value in cat.values():
... print(str(value))
...
6
white
beijing
beijing
>>> for value in set(cat.values()):
... print(str(value))
...
beijing
white
6
5.3 Вложение
Вы можете вкладывать словари в списки, списки в словари и словари в словари. Здесь это не будет продемонстрировано.
Шесть, пользовательский ввод и цикл while
6.1 Пользовательский ввод
Функция input() приостанавливает выполнение программы, ожидая, пока пользователь введет текст. После получения пользовательского ввода Python сохраняет его в переменной для вашего удобства.
>>> msg = input('Please input your name: ')
Please input your name: solo
>>> msg
'solo'
Если вы используете Python 2.7, вы должны использовать функцию raw_input(), чтобы запросить у пользователя ввод. Эта функция, как и input() в Python 3, также интерпретирует ввод как строку.
Python 2.7 также включает функцию input(), но она интерпретирует пользовательский ввод как код Python и пытается их запустить. Если вы используете Python 2.7, используйте raw_input() вместо input() для получения ввода.
Если вы хотите преобразовать ввод в число, вы можете использоватьint()
для преобразования.
6.2 циклы while
Цикл for используется для создания блока кода для каждого элемента коллекции, а цикл while выполняется непрерывно до тех пор, пока заданное условие не будет выполнено.
>>> num = 1
>>> while num <= 5:
... print(str(num))
... num += 1
...
1
2
3
4
5
break
Чтобы выйти из цикла while немедленно, без запуска остального кода в цикле, независимо от результата условной проверки, используйте оператор break. Оператор break используется для управления потоком программы. Вы можете использовать его для управления тем, какие строки кода будут выполняться, а какие строки кода не будут выполняться, чтобы программа выполняла код, который вы хотите выполнить в соответствии с вашими пожеланиями. требования.
continue
Чтобы вернуться к началу цикла и решить, продолжать ли цикл на основе результата условной проверки, используйте оператор continue, который не выполняет остальную часть кода и выходит из всего цикла, как оператор break.
7. Функция
Python использует ключевые словаdef
чтобы определить функцию, имя функции начинается с двоеточия:
В конце отступ после двоеточия — это тело функции.
>>> def greet():
... print('Hello World!')
...
>>> greet()
Hello World!
7.1 Функциональные параметры
В функции можно передавать параметры. Следующий пример направляет функциюgreet()
передал параметрname
. вname
формальный параметр,solo
является фактическим параметром.
>>> def greet(name):
... print('Hello,' + name)
...
>>> greet('solo')
Hello,solo
Есть много способов передать аргументы в функцию: можно использовать позиционные аргументы, требующие, чтобы порядок аргументов совпадал с порядком формальных параметров, можно также использовать аргументы с ключевыми словами, когда каждый аргумент состоит из переменной. имя и значение и использование списков и словарей.
Введение
Когда вы вызываете функцию, Python должен связать каждый фактический параметр в вызове функции с формальным параметром в определении функции. Для этого самый простой способ ассоциации основан на порядке аргументов. Этот тип ассоциации называется позиционным аргументом.
>>> def student(name, age):
... print('Hello, My name is ' + name + ', I am ' + str(age) + ' years old')
...
>>> student('solo', 18)
Hello, My name is solo, I am 18 years old
Аргументы, передаваемые в том порядке, в котором определены формальные параметры, называются позиционными аргументами.
аргументы ключевого слова
Аргументы ключевого слова представляют собой пары "имя-значение", передаваемые функции. Аргументы ключевых слов освобождают вас от необходимости беспокоиться о порядке аргументов в вызове функции, а также четко указывают назначение каждого значения в вызове функции.
>>> student(age=18, name='solo')
Hello, My name is solo, I am 18 years old
Следуя примеру позиционных аргументов,student(name, age)
Первый параметр методаname
, второй параметрage
. Мы используем аргумент ключевого слова, чтобы указать, какой из них передается, и результат не будет хаотичным, даже если порядок написан не по порядку.
По умолчанию
При написании функции каждому параметру можно присвоить значение по умолчанию. Когда аргумент передается формальному параметру в вызывающей функции, Python будет использовать указанное фактическое значение параметра; в противном случае будет использоваться значение формального параметра по умолчанию. Следовательно, после указания значения по умолчанию для формального параметра соответствующий фактический параметр может быть исключен из вызова функции. Использование значений по умолчанию упрощает вызовы функций и четко указывает типичное использование функции.
>>> def student(name, age=18):
... print('Hello, My name is ' + name + ', I am ' + str(age) + ' years old')
...
>>> student('bob')
Hello, My name is bob, I am 18 years old
>>> student('nicole')
Hello, My name is nicole, I am 18 years old
>>> student('bob', 20)
Hello, My name is bob, I am 20 years old
как указано выше, дайтеstudent()
Второй параметр определения функцииage
установлено значение по умолчанию18
, если при вызове передается только один параметр, независимо от того, что передаетсяage
Обоим по 18. При передаче двух параметров фактически переданные параметры переопределяют значения по умолчанию.
Примечание. При использовании значений по умолчанию сначала должны быть перечислены формальные параметры без значений по умолчанию, а затем в списке параметров должны быть указаны фактические параметры со значениями по умолчанию. Это позволяет Python правильно интерпретировать позиционные аргументы.
7.2 Возвращаемое значение
Функция не всегда отображает выходные данные напрямую, вместо этого она может обрабатывать некоторые данные и возвращать значение или набор значений. Значение, возвращаемое функцией, называется возвращаемым значением. Внутри функции вы можете использовать оператор return для возврата значения в строку кода, вызвавшую функцию. Возвращаемые значения позволяют перенести большую часть тяжелой работы вашей программы в функции, упростив основную программу.
>>> def student(name):
... return name
...
>>> name = student('solo')
>>> name
'solo'
вернуть словарь
Функции могут возвращать значения любого типа, включая более сложные структуры данных, такие как списки и словари. Например, следующая функция принимает имя и возраст и возвращает словарь, представляющий человека:
>>> def build_person(name,age):
... person = {'name':name, 'age':age}
... return person
...
>>> p = build_person('solo',18)
>>> p
{'name': 'solo', 'age': 18}
7.3 Передача любого количества аргументов
Иногда вы не знаете заранее, сколько аргументов должна принять функция, но, к счастью, Python позволяет функциям собирать любое количество аргументов из вызывающего оператора.
>>> def person(*args):
... print(args)
...
>>> person('name','age','address')
('name', 'age', 'address')
Вышеприведенное определяет функциюperson()
, только с одним параметром*args
. имя параметра*args
Звездочка указывает Python создать файл с именемargs
Пустой кортеж , и оборачивает все полученные значения в этот кортеж.
Объединение позиционных аргументов с любым количеством аргументов
Если вы хотите, чтобы функция принимала аргументы разных типов, вы должны поместить параметры, которые принимают любое количество аргументов, последними в определении функции. Python сначала сопоставляет позиционные и ключевые аргументы, а затем собирает оставшиеся аргументы в последний параметр.
>>> def person(city, *args):
... print('city: ' + city + ', other args:')
... for value in args:
... print(value)
...
>>> person('beijing', 'name', 'age', 'tel')
city: beijing, other args:
name
age
tel
функцияperson()
Есть два формальных параметра, первыйcity
обычный позиционный аргумент, второй*args
является переменным параметром.
Используйте любое количество аргументов ключевого слова
Иногда вам нужно принять произвольное количество аргументов, но вы не знаете заранее, какая информация будет передана в функцию. В этом случае функцию можно написать так, чтобы она принимала любое количество пар ключ-значение — столько, сколько предоставляет вызывающий оператор. Одним из таких примеров является создание профиля пользователя: вы знаете, что получите информацию о пользователе, но не уверены, что это будет.
def build_profile(first, last, **user_info):
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key,value in user_info.items():
profile[key] = value
return profile
user = build_profile('steven', 'bob', city='beijing', age=18)
print(user)
Выполните код, и вывод:
{'first_name': 'steven', 'last_name': 'bob', 'city': 'beijing', 'age': 18}
7.4 Импорт и экспорт
Функции можно хранить в отдельных файлах, называемых модулями, которые затем можно импортировать в основную программу. Оператор import позволяет использовать код из модуля в текущем программном файле.
7.4.1 Импорт всего модуля
Модули — это файлы с расширением .py, которые содержат код для импорта в программу.
def eat(food):
print('I am cat, I eat ' + food)
import cat
cat.eat('fish')
консольный вывод
I am cat, I eat fish
7.4.2 Импорт определенных функций
Вы также можете импортировать определенные функции в модуль.Синтаксис этого метода импорта следующий:
from module_name import function_name
Вы можете импортировать столько функций из модуля, сколько хотите, разделив имена функций запятыми:
from module_name import function_0, function_1, function_2
Приведенный выше пример импортирует толькоcat.py
серединаeat()
метод
from cat import eat
eat('fish')
получить тот же результат.
7.4.3 Использование as для назначения псевдонимов функциям
Если имя импортируемой функции может конфликтовать с существующим именем в программе или если имя функции слишком длинное, укажите короткий и уникальный псевдоним — другое имя функции, похожее на псевдоним. Чтобы назначить этот специальный псевдоним функции, вам нужно сделать это при ее импорте.
from cat import eat as cat_eat
cat_eat('fish')
будетcat.py
серединаeat()
Метод импортирует и имеет указанный псевдонимcat_eat
, вы можете использовать псевдоним непосредственно при его использовании.
7.4.4 Использование as для назначения псевдонимов модулям
Вы также можете назначать псевдонимы модулям. Это упрощает вызов функций в модуле, давая ему короткий псевдоним.
Общий синтаксис:import module_name as mn
import cat as c
c.eat('fish')
7.4.5 Импорт всех функций в модуль
Используйте оператор звездочки (*), чтобы заставить Python импортировать все функции в модуле:
def eat(food):
print('I am cat, I eat ' + food)
def run():
print('cat run')
from cat import *
eat('fish')
run()
выходной результат
I am cat, I eat fish
cat run
Поскольку каждая функция импортируется, каждую функцию можно вызывать по имени без использования записи точки. Однако этого метода импорта лучше избегать при работе с большими модулями, которые вы не написали сами: если модуль имеет функции с теми же именами, что и используемые в вашем проекте, это может привести к неожиданным результатам: Python может столкнуться с несколькими функциями или переменными с тем же именем и, таким образом, перезаписать функцию вместо того, чтобы импортировать все функции по отдельности.
Рекомендуется либо импортировать только те функции, которые необходимо использовать, либо импортировать весь модуль и использовать обозначение периода. Это делает код чище и легче для чтения и понимания.
7.5 Рекомендации по написанию функций
-
Функции должны иметь описательные имена.
-
Имена функций должны содержать только строчные буквы и символы подчеркивания.
-
Каждая функция должна содержать комментарий, кратко объясняющий ее функциональность, сразу после определения функции в формате строки документации.
-
При указании значений по умолчанию для формальных параметров не включайте пробелы вокруг знака равенства:
def function_name(parameter_0, parameter_1='default value')
Этому соглашению следует также следовать для аргументов ключевого слова в вызовах функций:
function_name(value_0, parameter_1='value')
-
Если программа или модуль содержит несколько функций, используйте две пустые строки для разделения смежных функций, чтобы было легче узнать, где заканчивается предыдущая функция и начинается следующая функция.
-
Все операторы импорта следует размещать в начале файла, за исключением случаев, когда в начале файла используется комментарий для описания всей программы.
Восемь, класс
8.1 Создание и использование классов
class Cat():
def __init__(self, name, color):
self.name = name
self.color = color
def eat(self):
print('cat ' + self.name + ' color ' + self.color + ', now eat')
def run(self):
print('cat ' + self.name + ' color ' + self.color + ', now run')
my_cat = Cat('Spring', 'white')
print(my_cat.name)
print(my_cat.color)
my_cat.eat()
my_cat.run()
Класс создан вышеCat
, и создан экземплярmy_cat
, а затем вызвать метод классаeat()
иrun()
. Выходной результат:
Spring
white
cat Spring color white, now eat
cat Spring color white, now run
Функции в классе называются методами.__init__()
является конструктором функции, которая автоматически запускается Python каждый раз при создании нового экземпляра. Обратите внимание, что имя конструктора должно быть таким, оно указано.
В приведенном выше примере__init__(self, name, color)
Есть три параметра, первый параметрself
Обязательный и должен предшествовать другим параметрам. Другие формальные параметры могут быть скорректированы по мере необходимости.self
Является ссылкой на сам экземпляр, предоставляя экземпляру доступ к свойствам и методам в классе.
Доступ к свойствам также можно получить непосредственно через экземпляр:my_cat.name
. Но это не рекомендуется для других языков.
Создайте класс в Python 2.7
При создании класса в Python 2.7 требуется небольшая модификация — включение слова object в круглые скобки:
class ClassName(object):
8.2 Атрибуты класса
8.2.1 Установка значений по умолчанию для свойств
Каждое свойство в классе должно иметь начальное значение, даже если оно равно 0 или пустой строке. В некоторых случаях, например при установке значений по умолчанию, в методе__init__()
Можно указать такое начальное значение внутри; если вы делаете это для свойства, вам не нужно включать параметр, который предоставляет ему начальное значение.
переопределитьCat
, задайте свойство в конструктореage
Установите значение по умолчанию.
class Cat():
def __init__(self, name, color):
self.name = name
self.color = color
self.age = 3
def eat(self):
print('cat ' + self.name + ' color ' + self.color + ', now eat')
def run(self):
print('cat ' + self.name + ' color ' + self.color + ', now run')
def print_age(self):
print('cat`s age is ' + str(self.age))
8.2.2 Изменение значения атрибута
Значение свойства можно изменить тремя различными способами: непосредственно через экземпляр и через метод.
1. Напрямую изменить значение свойства
Самый простой способ изменить значение свойства — получить к нему доступ напрямую через экземпляр.
class Cat():
def __init__(self, name, color):
self.name = name
self.color = color
self.age = 3
def eat(self):
print('cat ' + self.name + ' color ' + self.color + ', now eat')
def run(self):
print('cat ' + self.name + ' color ' + self.color + ', now run')
def print_age(self):
print('cat`s age is ' + str(self.age))
my_cat = Cat('Spring', 'white')
my_cat.print_age()
my_cat.age = 4
my_cat.print_age()
Выход
cat`s age is 3
cat`s age is 4
Приведенный выше пример проходит непосредственно черезmy_cat.age = 4
отредактированоage
Стоимость имущества.
2. Измените значение свойства с помощью метода
Затем обновите код и добавьтеupdate_age()
метод измененияage
характеристики.
class Cat():
def __init__(self, name, color):
self.name = name
self.color = color
self.age = 3
def eat(self):
print('cat ' + self.name + ' color ' + self.color + ', now eat')
def run(self):
print('cat ' + self.name + ' color ' + self.color + ', now run')
def print_age(self):
print('cat`s age is ' + str(self.age))
def update_age(self, age):
self.age = age
my_cat = Cat('Spring', 'white')
my_cat.print_age()
my_cat.update_age(10)
my_cat.print_age()
Запуск выходов кода:
cat`s age is 3
cat`s age is 10
8.3 Наследование
Когда класс наследует другой класс, он автоматически получает все свойства и методы другого класса; исходный класс называется родительским классом, а новый класс называется дочерним классом. Подкласс наследует все свойства и методы своего родительского класса, а также может определять свои собственные свойства и методы.
class Animal():
def __init__(self, name, age):
self.name = name
self.age = age
def run(self):
print('Animal ' + self.name + ' run')
class Cat(Animal):
def __init__(self, name, age):
super().__init__(name, age)
cat = Cat('Tony', 2)
cat.run()
Запускаем программу, выводим:
Animal Tony run
класс определенAnimal
, снова определяетCat
унаследовано отAnimal
.Animal
называется родительским классом,Cat
называются подклассами. По выходным данным можно убедиться, что подкласс наследует метод родительского класса.
В конструкторе подкласса сначала должен быть реализован конструктор родительского класса:super().__init__(name, age)
.
Вы также можете определить свои собственные методы для подклассов или переопределить методы суперклассов.
class Animal():
def __init__(self, name, age):
self.name = name
self.age = age
def run(self):
print('Animal ' + self.name + ' run')
class Cat(Animal):
def __init__(self, name, age):
super().__init__(name, age)
def play(self):
print('Cat ' + self.name + ' play')
def run(self):
print('Cat ' + self.name + ' run')
cat = Cat('Tony', 2)
cat.run()
cat.play()
Изменим программу,Animal
класс без изменений,Cat
Класс по-прежнему наследуетAnimal
, но определяет свой собственный методplay()
и переопределить метод родительского классаrun()
. Запустите программу и получите вывод:
Cat Tony run
Cat Tony play
Наследование в Python 2.7
В Python 2.7 синтаксис наследования немного отличается, и класс ElectricCar определяется следующим образом:
class Car(object):
def __init__(self, make, model, year):
--snip--
class ElectricCar(Car):
def __init__(self, make, model, year):
super(ElectricCar, self).__init__(make, model, year)
--snip--
Функция super() принимает два аргумента: имя подкласса и сам объект. Эти аргументы необходимы, чтобы помочь Python связать родительский и дочерний классы. Кроме того, при использовании наследования в Python 2.7 обязательно указывайте объект в круглых скобках при определении родительского класса.
8.4 Импорт классов
Когда файл слишком длинный, часть кода можно извлечь и импортировать в основной файл.
Существует несколько способов импорта:
-
импортировать один класс
если
car.py
класс, определенный вCar
from car import Car
-
Импорт нескольких классов из модуля
если
car.py
Содержит три классаCar
,Battery
иElectricCar
.Просто импортируйте один класс:
from car import ElectricCar
Импортировать несколько классов, разделенных запятыми:
from car import Car, ElectricCar
-
импортировать весь модуль
Вы также можете импортировать целые модули и использовать обозначение периода для доступа к необходимым классам. Этот метод импорта прост, а код легко читается. Поскольку код, создающий экземпляр класса, содержит имя модуля, он не будет конфликтовать ни с одним именем, используемым текущим файлом.
import car my_car = car.Car()
-
Импортировать все классы в модуль
Чтобы импортировать каждый класс в модуль, используйте следующий синтаксис:
from module_name import *
Этот метод импорта не рекомендуется по двум причинам.
Во-первых, было бы полезно точно знать, какие классы использует ваша программа, просто взглянув на оператор импорта в начале файла, но этот способ импорта не дает понять, какие классы в модуле вы используете. Такой способ импорта также может привести к путанице в именах. Если вы случайно импортируете класс с тем же именем, что и что-то еще в файле программы, это вызовет труднодиагностируемую ошибку. Этот метод импорта представлен здесь, потому что, хотя он и не рекомендуется, вы можете увидеть его в коде, написанном другими.
Когда вам нужно импортировать много классов из модуля, лучше всего импортировать весь модуль и использовать синтаксис module_name.class_name для доступа к классам. При этом, хотя не все используемые классы перечислены в начале файла, вы точно знаете, где в вашей программе используются импортированные модули; вы также избегаете конфликтов имен, которые могут возникнуть при импорте каждого класса в модуль.
9. Файлы и исключения
9.1 Чтение данных из файла
Чтобы использовать информацию в текстовом файле, вам сначала нужно прочитать информацию в память. Для этого можно либо прочитать все содержимое файла сразу, либо пошагово, по одной строке за раз.
9.1.1 Чтение всего файла
with open('test.txt') as file_obj:
contents = file_obj.read()
print(contents)
open()
Используется для открытия файла, параметр представляет собой путь к файлу.
ключевые словаwith
Закройте файл, когда он больше не нужен для доступа к нему. имеютwith
Вы просто открываете файл, используете его, когда он вам нужен, и Python автоматически закрывает его, когда это необходимо.
По сравнению с исходным файлом единственным отличием этого вывода является дополнительная пустая строка в конце. Почему там лишняя пустая строка?read()
Возвращает пустую строку при достижении конца файла, и эта пустая строка отображается как пустая строка. Чтобы удалить лишние пустые строки, используйте оператор печатиrstrip()
.
Путь к файлу может быть относительным или абсолютным путем.
9.1.2 Чтение построчно
with open('test.txt') as file_obj:
for line in file_obj:
print(line.rstrip())
Чтобы проверить файл по одной строке за раз, используйте цикл for для файлового объекта.
9.2 Запись в файл
with open('test.txt', 'w') as file_obj:
file_obj.write("I love python")
В этом примере open() вызывается с двумя аргументами, первый аргумент также является именем открываемого файла; второй аргумент ('w') сообщает Python, что мы хотим открыть в режиме записи этот файл.
Дополнительный режим:
-
r
: Только чтение. -
w
: просто пиши. Если файл не существует, он будет создан, если файл существует, то он сначала будет очищен, а затем записан. -
a
: режим добавления, записанное содержимое добавляется к исходному файлу. Создайте файл, если он не существует. -
r+
: Прочитайте и напишите.
Если вы опустите аргумент режима, Python по умолчанию откроет файл в режиме только для чтения.
9.3 Ненормальный
Исключения обрабатываются с помощью блоков кода try-except. Блок try-except сообщает Python, что делать при возникновении исключения.
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
иначе заблокировать
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
else:
print("no exception")
еслиtry
Код выполняется успешно, и исключений нет, затем выполнитеelse
код в кодовом блоке.
9.4 Хранение данных с помощью json
используется в Питонеjson.dump()
иjson.load()
для хранения и чтения файлов json.
import json
userInfo = {'username': 'jack', 'age': 18}
with open('test.txt', 'w') as obj:
json.dump(userInfo, obj)
with open('test.txt') as obj:
content = json.load(obj)
print(content)
используется в приведенном выше примереjson.dump()
данные хранятся вtest.txt
в, использовать сноваjson.load()
Получите данные из файла и распечатайте его.
Обратите внимание, что импортируйте модуль json перед его использованием.
Десять, модульное тестирование
Сначала определите функцию, которая объединяет именаname_function.py
def get_formatted_name(first, last):
full_name = first + ' ' + last
return full_name.title()
Напишите тестовый класс для проверки этой функции
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
def test_name_function(self):
full_name = get_formatted_name('david', 'alex')
self.assertEqual(full_name, 'David Alex')
unittest.main()
Тестовый класс для наследованияunittest.TestCase
,пройти черезself.assertEqual
Утверждают, соответствует ли полученный результат ожидаемому.
Общие методы утверждения
метод | использовать |
---|---|
assertEqual(a, b) | Убедитесь, что а == б |
assertNotEqual(a, b) | проверить а != б |
assertTrue(x) | Убедитесь, что x истинно |
assertFalse(x) | Убедитесь, что x имеет значение False |
assertIn(item, list) | Убедитесь, что элемент находится в списке |
assertNotIn(item, list) | Убедитесь, что элемент отсутствует в списке |
setUp()
метод
Если вы включите метод в класс TestCasesetUp()
, Python сначала запустит его, а затем запустит каждый метод, начиная с test_.
Обычно используется для выполнения некоторых операций инициализации.
####Суммировать Особенности языка и стиль кодирования pyton относительно просты для понимания и также являются основой.Эта статья является лишь предвестником изучения python на ранней стадии.Вам нужно научиться правильно его использовать.Это также процесс и хорошее начало.
Эта статья перенесена изnuggets.capable/post/684490…, если есть какое-либо нарушение, пожалуйста, свяжитесь, чтобы удалить его.