04 Built In
Огляд
Викладання: хв
Вправи: хвПитання
Цілі
title: “Вбудовані функції та довідка” teaching: 15 exercises: 10 questions:
- “Як я можу використовувати вбудовані функції?”
- “Як я можу дізнатися, що вони роблять?”
- “Які помилки можуть виникати в програмах?” objectives:
- “Пояснення призначення функцій.”
- “Коректний виклик вбудованих функцій Python.”
- “Коректний виклик вкладених вбудованих функцій.”
- “Використання довідки для перегляду документації про вбудовані функції.”
- “Правильний опис ситуації, в яких виникають SyntaxError і NameError” keypoints:
- “Використовуйте коментарі при створенні документації програм.”
- “Функції можуть сприймати нуль або деяку кількість аргументів.”
- “Поширені вбудовані функції
max,minтаround.” - “Функції можуть працювати лише з певними аргументами (комбінаціями аргументів).”
- “Функції можуть мати значення за замовчуванням для певних аргументів.”
- “Використання вбудованої функції
helpдля отримання довідки про функції”. - “Два шляхи отримання допомоги у Jupyter Notebook.”
- “Кожна функція щось повертає.”
- “Python повідомляє про синтаксичну помилку, коли джерело програми не зрозуміле.”
- “Python повідомляє про помилку виконання, коли щось йде не так під час компілювання програми.”
- “Виправлення синтаксичних помилок у процесі читання вихідного коду, а помилок виконання - у процесі компіляції програми.”
Використовуйте коментарі при створенні документації програм.
# Цю строку Python не виконує.
adjustment = 0.5 # Усе після '#' ігнорується.
Функції можуть сприймати нуль або деяку кількість аргументів.
- Ми вже бачили деякі функції — тепер розглянемо їх ближче.
- Аргумент - це значення, яке передається у функцію.
lenпотребує тільки один аргумент.int,strтаfloatстворюють нові значення з існуючих.printв якості аргументу може використовувати як нульове, так і ненульове значення.printбез аргументів повертає порожній рядок.- Необхідно завжди використовувати дужки, навіть якщо вони порожні, щоб Python розумів, що викликається функція.
print('before')
print()
print('after')
before
after
Поширені вбудовані функції max, min та round.
- Використовуйте
max, щоб знайти найбільше з одного або декількох значень. - Використовуйте
min, щоб знайти найменше значення. - Обидві функції в якості аргументу можуть використовувати як символьний рядок, так і число.
- Для порівняння літер використовуйте «Більші» та «менші» (0-9, A-Z, a-z) літери.
print(max(1, 2, 3))
print(min('a', 'A', '0'))
3
0
Функції можуть працювати лише з певними аргументами (комбінаціями аргументів).
maxтаminповинні мати принаймні один аргумент.- “Найбільше значення з порожньої множини” - запит, який не має сенсу.
- Крім того, аргументи функції повинні бути зіставні, щоб їх можна було порівнювати.
print(max(1, 'a'))
TypeError Traceback (most recent call last)
<ipython-input-52-3f049acf3762> in <module>
----> 1 print(max(1, 'a'))
TypeError: '>' not supported between instances of 'str' and 'int'
Функції можуть мати значення за замовчуванням для певних аргументів.
roundокругляє число з плаваючою крапкою.- За замовчуванням округлює до нуля знаків після крапки.
round(3.712)
4
- Ми можемо вказати потрібну кількість десяткових знаків.
round(3.712, 1)
3.7
Використовуйте вбудовану функцію help, щоб отримати довідку щодо функції.
- Кожна вбудована функція має онлайн-документацію.
help(round)
Допомога щодо вбудованих функцій у модулі builtins:
round(number, ndigits=None)
Округлення числа до заданої точності в десяткових цифрах.
Повернене значення є цілим числом, якщо ndigits опущено - None. Інакше
значення, що повертається, має той самий тип, що й число. ndigits може бути від'ємним.
Python повідомляє про синтаксичну помилку, коли він не може зрозуміти джерело програми.
- Він навіть не намагатиметься запустити програму, якщо її неможливо коректно прочитати.
# Рядок не взято в лапки.
name = 'Feng
File "<ipython-input-56-f42768451d55>", line 2
name = 'Feng
^
SyntaxError: EOL while scanning string literal
# Додатковий знак '=' у присвоєнні.
age = = 52
File "<ipython-input-57-ccc3df3cf902>", line 2
age = = 52
^
SyntaxError: invalid syntax
- Подивіться уважніше на повідомлення про помилку:
print("hello world"
File "<ipython-input-6-d1cc229bf815>", line 1
print ("hello world"
^
SyntaxError: unexpected EOF while parsing
- Повідомлення вказує на проблему в першому рядку введеної програми (“line 1”).
- У цьому випадку розділ імені файлу «ipython-input» повідомляє нам, що ми працюємо з введенням в IPython, з інтерпретатором Python, який використовується в Jupyter Notebook.
- Частина
-6-в назві файлу вказує на те, що помилка сталася в клітинці 6. - Далі йде проблемний рядок коду,
на що вказує символ
^.
Python повідомляє про помилку “runtime error”, коли щось йде не так під час виконання програми.
age = 53
remaining = 100 - aege # неправильно написано 'age'
NameError Traceback (most recent call last)
<ipython-input-59-1214fb6c55fc> в <module>
1 age = 53
----> 2 remaining = 100 - aege # неправильно написано 'age'
NameError: name 'aege' is not defined
- Якщо перечитаєте джерело, можна виправити синтаксичні помилки, а якщо відстежите компілювання - помилки виконання.
Два шляхи отримання допомоги у Jupyter Notebook.
- Розмістіть курсор у будь-якому місці виклику функції
(тобто в імені функції або її параметрах),
утримуйте
shiftта натиснітьtab. - Або введіть назву функції зі знаком питання після неї.
Кожна функція щось повертає.
- Кожен виклик функції дає певний результат.
- Якщо функція не повертає корисного результату,
зазвичай вона повертає спеціальне значення
None.
result = print('example')
print('result of print is', result)
example
result of print is None
Що відбувається?
- Поясніть простими словами порядок операцій у наступній програмі: коли відбувається додавання, коли відбувається віднімання, коли викликається кожна функція тощо.
- Яке кінцеве значення величини
radiance?radiance = 1.0 radiance = max(2.1, 2.0 + min(radiance, 1.1 * radiance - 0.5))Рішення
1.
1.1 * radiance = 1.11.1 - 0.5 = 0.6min(radiance, 0.6) = 0.62.0 + 0.6 = 2.6max(2.1, 2.6) = 2.6- В підсумку,
radiance = 2.6
Знайдіть відмінності
- Подумайте, що виведе кожен з операторів
- Функція
max(len(rich), poor)поверне відповідь або повідомлення про помилку? Якщо поверне відповідь, чи буде вона мати сенс?easy_string = "abc" print(max(easy_string)) rich = "gold" poor = "tin" print(max(rich, poor)) print(max(len(rich), len(poor)))Рішення
print(max(easy_string))cprint(max(rich, poor))tinprint(max(len(rich), len(poor)))4
max(len(rich), poor)поверне TypeError. Це станеться наmax(4, 'tin')і, як ми говорили раніше, порівнювати рядок і ціле число не можна.TypeError Traceback (most recent call last) <ipython-input-65-bc82ad05177a> в <module> ----> 1 max(len(rich), poor) TypeError: '>' not supported between instances of 'str' and 'int'
Чому ні?
Чому функції
maxіminне повертаютьNone, якщо їм не надано аргументів?Рішення
maxіminу цьому випадку повертають TypeErrors, оскільки правильна кількість параметрів не була надана. Якби функції повернули тількиNone, таку помилку було б набагато важче відстежити. Швидше за все, значенняNoneбуде збережено у змінній і використано пізніше в програмі лише для того, щоб повернути помилку виконання.
Останній символ рядка
Якщо Python починає рахувати з нуля, та
lenповертає кількість символів у рядку, то який індекс отримає останній символ у рядкуname? (Примітка: ми побачимо простіший спосіб зробити це в наступному епізоді.)Рішення
name[len(name) - 1]
Ключові моменти