04 Built In

Огляд

Викладання: хв
Вправи: хв
Питання
Цілі

title: “Вбудовані функції та довідка” teaching: 15 exercises: 10 questions:

# Цю строку Python не виконує.
adjustment = 0.5   # Усе після '#' ігнорується.

Функції можуть сприймати нуль або деяку кількість аргументів.

print('before')
print()
print('after')
before

after

Поширені вбудовані функції max, min та round.

print(max(1, 2, 3))
print(min('a', 'A', '0'))
3
0

Функції можуть працювати лише з певними аргументами (комбінаціями аргументів).

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(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

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.

Кожна функція щось повертає.

result = print('example')
print('result of print is', result)
example
result of print is None

Що відбувається?

  1. Поясніть простими словами порядок операцій у наступній програмі: коли відбувається додавання, коли відбувається віднімання, коли викликається кожна функція тощо.
  2. Яке кінцеве значення величини radiance?
radiance = 1.0
radiance = max(2.1, 2.0 + min(radiance, 1.1 * radiance - 0.5))

Рішення

1.

  1. 1.1 * radiance = 1.1
  2. 1.1 - 0.5 = 0.6
  3. min(radiance, 0.6) = 0.6
  4. 2.0 + 0.6 = 2.6
  5. max(2.1, 2.6) = 2.6
  6. В підсумку, radiance = 2.6

Знайдіть відмінності

  1. Подумайте, що виведе кожен з операторів print у наведеній нижче програмі.
  2. Функція 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))
c
print(max(rich, poor))
tin
print(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]

Ключові моменти