Π Π°Π·Π½ΠΎΠ΅

Ѐункция Π² int python: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ int() | Python

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ int() | Python

Π’ языкС программирования Python встроСнная функция int()Β Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число Π² дСсятичной систСмС счислСния (класс int).

Если Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ int() Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΎΠ½Π° Π²Π΅Ρ€Π½Π΅Ρ‚ 0.

Π§Π°Ρ‰Π΅ всСго Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ int() ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ строкой, Π»ΠΈΠ±ΠΎ числом. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ прСдставлСниями Ρ†Π΅Π»ΠΎΠ³ΠΎ числа, ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирована ошибка ValueError.

>>> int('4')
4
>>> int('3a')
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    int('3a')
ValueError: invalid literal for int() with base 10: '3a'

Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ†Π΅Π»ΠΎΠ΅ число, Ρ‚ΠΎ ΠΎΠ½Π° Π²Π΅Ρ€Π½Π΅Ρ‚ Π΅Π³ΠΎ ΠΆΠ΅. Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ вСщСствСнноС число, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΎ Π΄ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ Π² сторону нуля (Ρ‚. Π΅. дробная Ρ‡Π°ΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Π°).

>>> int(87)
87
>>> int(-103)
-103
>>> int(234.879)
234
>>> int(-0.3)
0
>>> int(-0.9)
0

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ вСщСствСнноС число, Π² Ρ†Π΅Π»ΠΎΠ΅ число с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ int() Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

>>> int('101.1')
Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    int('101.1')
ValueError: invalid literal for int() with base 10: '101.1'

ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ Ссли трСбуСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ число Π² строковом прСдставлСнии Π² Ρ†Π΅Π»ΠΎΠ΅ число, сначала Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ float(), Π° Π·Π°Ρ‚Π΅ΠΌ int().

>>> a = '15.76'
>>> a = float(a)
>>> a
15.76
>>> a = int(a)
>>> a
15

Π’ случаС, ΠΊΠΎΠ³Π΄Π° указываСтся Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ int(), ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ строкой. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ int() сообщаСтся, Π² ΠΊΠ°ΠΊΠΎΠΉ систСмС счислСния находится число, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² строкС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Ѐункция int() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² дСсятичной систСмС счислСния.

>>> int('12',8)
10
>>> int('13h',20)
477
>>> int('111001',2)
57

Для Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ, Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ систСм счислСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСфиксы. Если Ρ‚Π°ΠΊΠΎΠ΅ прСдставлСниС числа Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ обязатСлСн.

>>> int(0b11)
3
>>> int('0b11')
Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    int('0b11')
ValueError: invalid literal for int() with base 10: '0b11'
>>> int('0b11',2)
3
>>> int(0o10)
8
>>> int(0x15)
21
>>> int(0xA5)
165

Π˜Ρ‚Π°ΠΊ, функция int() всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ дСсятичноС Ρ†Π΅Π»ΠΎΠ΅ число. Если ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² дСсятичноС число Π½Π΅ удаСтся, Ρ‚ΠΎ гСнСрируСтся ошибка.

Python | функция int ()

Ѐункция int () Π² Python ΠΈ Python3 ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ число Π² Π΄Π°Π½Π½ΠΎΠΉ Π±Π°Π·Π΅ Π² дСсятичноС.

Бинтаксис:

int(string, base)

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€:

string : consists of 1's and 0's
base : (integer value) base of the number.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:

Returns an integer value, which is equivalent 
of binary string in the given base. 

Ошибки:

TypeError : Returns TypeError when any data type other 
than string or integer is passed in its equivalent position.

Код β„– 1:

num = 13

Β Β 

String = '187'

Β Β 

result_1 = int(String) + numΒ 

print("int('187') + 13 = ", result_1, "\n")

Β Β 

str = '100'

Β Β 

print("int('100') with base 2 = ", int(str, 2))

print("int('100') with base 4 = ", int(str, 4))

print("int('100') with base 8 = ", int(str, 8))

print("int('100') with base 16 = ", int(str, 16))

Π’Ρ‹Ρ…ΠΎΠ΄ :

int('187') + 13 =  200 

int('100') with base 2 =  4
int('100') with base 4 =  16
int('100') with base 8 =  64
int('100') with base 16 =  256

Код β„– 2:

Β Β 

binaryString = "111"

Β Β 

Decimal = int(binaryString, 2)Β 

Β Β 

print("Decimal equivalent of binary 111 is", Decimal)Β 

Β Β 

Β Β 

binaryString = "101"

Β Β 

Octal = int(binaryString, 8)Β 

Β Β 

print("Octal equivalent of binary 101 is", Octal)

Π’Ρ‹Ρ…ΠΎΠ΄ :

Decimal equivalent of binary 111 is 7
Octal equivalent of binary 101 is 65

Код β„– 3: ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для дСмонстрации ошибки TypeError.

Β Β 

Β Β 

binaryString = 111

Β Β 

decimal = int(binaryString, 2)Β 

Β Β 

print(decimal)

Π’Ρ‹Ρ…ΠΎΠ΄ :

Traceback (most recent call last):
  File "/home/d87cec4c0c33aad3bb6187858b40b734.py", line 8, in 
    decimal = int(binaryString, 2)  
TypeError: int() can't convert non-string with explicit base

,

Заявка :
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ всСх стандартных конвСрсиях . НапримСр, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Π² дСсятичноС, Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π² Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅, Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ посты:

Python | функция int ()

0.00 (0%) 0 votes

ΠŸΡ€ΠΎ Python — Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ — int

Π’ΠΈΠΏ прСдставляСт Ρ†Π΅Π»ΠΎΠ΅ число.

Π¦Π΅Π»Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ.

Π¦Π΅Π»Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ (Π½Π΅ Π²Π°ΠΆΠ½ΠΎ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ, Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ.
Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ конструктора int().

    int(x, base=10)

Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся строкой, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ число. Вакая строка ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π·Π½Π°ΠΊ числа, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы (ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ Ρ‚Π°ΠΊ ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅).
Если ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅, Β«Π΄Π»ΠΈΠ½Π½ΠΎΠ΅Β» Ρ†Π΅Π»ΠΎΠ΅, Π»ΠΈΠ±ΠΎ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой) Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅ с Ρ‚Π΅ΠΌ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.
ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΊ Ρ†Π΅Π»ΠΎΠΌΡƒ усСкаСт Π΅Π³ΠΎ Π² сторону нуля.

ОснованиС, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ base, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся строкой, ΠΈΠ½Π°Ρ‡Π΅ поднимаСтся TypeError.

    my_int = 1
my_int = 0x1 # ШСстнадцатСричный Π²ΠΈΠ΄
my_int = 0o1 # Π’ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄
my_int = 0b1 # Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄
my_int = int('1')
my_int = int(1.1) # 1
my_int = int(' 1') # 1
my_int = int() # 0
my_int = int(10, 2) # TypeError: int() can't convert non-string with explicit base
my_int = int('10', 2) # 2

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ†Π΅Π»Ρ‹Ρ… ΠΎΡ‚ -5 ΠΏΠΎ 256 ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСскиС ΠΏΡ€ΠΈ стартС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° β€” ΠΊΠ΅ΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅.

Python 2

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ (ΠΈΠ»ΠΈ просто Β«Ρ†Π΅Π»Ρ‹Π΅Β») Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚ΠΈΠΏΠ° long ΠΈΠ· Π‘ΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ ΠΈΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 32 Π±ΠΈΡ‚ точности (sys.maxint всСгда установлСн Π² максимум для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… Π½Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅; минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” -sys.maxint - 1). Β«Π”Π»ΠΈΠ½Π½Ρ‹Π΅Β» β€” long β€” Ρ†Π΅Π»Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ (Π² Python 3 всС Ρ†Π΅Π»Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Β«Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈΒ»).ЛогичСский Π‘ΡƒΠ»Π΅Π² Ρ‚ΠΈΠΏ являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ Ρ†Π΅Π»ΠΎΠ³ΠΎ.

bool

ЛогичСский (Π±ΡƒΠ»Π΅Π²) Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….

7 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ – это Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° Π² Π±Π»ΠΎΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ имя. Они ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π²Π²ΠΎΠ΄, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ вычислСния ΠΈΠ»ΠΈ дСйствиС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python
  2. ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python
  3. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python
  4. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python
  5. Ѐункция Python. НСизвСстноС количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
  6. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python
  7. Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° s ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния

Β 

1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, вычисляСт сумму ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ вычислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
def calculate_sum(a,b):
  sum = a+b
  return sum

# ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π½ΠΈΠΆΠ΅ инструкция называСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
print(calculate_sum(2,3)) # 5

Β 

Π’ Python Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Β 

2. ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ вмСстС с Python, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ установлСн.Β ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎΠ± опрСдСлСниях Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.Β print () – ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Python.

print("ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€")
print(len("МСня Π·ΠΎΠ²ΡƒΡ‚ AndreyEx"))

Β 

Π•Ρ‰Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: len(), str(), int(), abs(), sum() ΠΈ Ρ‚. Π΄.

ВсС встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Python3, здСсь.

Β 

3. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова def.Β ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

def calculate_si_amount(principal, rate, time):
  interest =  (principal*rate*time)/100
  return principal+interest

Β 

Π’ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ сумма рассчитываСтся ΠΏΡƒΡ‚Π΅ΠΌ примСнСния простого ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° ΠΊ основной суммС. Calculate_si_amount являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. principal, rate ΠΈ time ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ рассчитанныС Π΄Π°Π½Π½Ρ‹Π΅.

Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния.Β Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΎΠ±Π°, Π»ΠΈΠ±ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…, Π»ΠΈΠ±ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅.

from random import seed, random
from random import random

def generate_random_number():
  seed(10)
  return random()

Β 

4. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

def multiply(a, b=10):
  return a*b

multiply(12) # 120
multiply(2, 3) # 6
multiply(b=9) # Ошибка: None*9 нСдопустимо

Β 

Π’ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π·Π°Π΄Π°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ b, ΠΎΠ½ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π²Π΅Π½ 10, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

Β 

5. Ѐункция Python. НСизвСстноС количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, скаТСм, 4 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ для 2-Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎ 3-ΠΌΡƒ ΠΈ 4-ΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ слСдуСт ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Если число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ функция, нСизвСстно, Ρ‚ΠΎΠ³Π΄Π° * args добавляСтся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².Β Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.Β Π—Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ° (*) здСсь Π²Π°ΠΆΠ½Π°. НазваниС args – это просто соглашСниС.Β Π•ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя.

def calculate_sum(a, *args):
  sum = a
  for i in args:
    sum += i
  return sum

calculate_sum(10) # 10
calculate_sum(10, 11, 12) # 33
calculate_sum(1, 2, 94, 6, 2, 8, 9, 20, 43, 2) # 187

Β 

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ** kwargs ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

def print_names(f1, l1, **kwargs):
  print(f1, l1, end=' ')
  for key in kwargs:
    print(key, kwargs[key], end=' ')

print_names("andreyex", "master")
print_names("andreyex", "master", alex="john", leon="milene")
# andreyex master andreyex master alex john leon milene

Β 

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ ссылку Π½Π° Ρ†ΠΈΠΊΠ» for.Β ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ этому для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ:Β 12 Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Loop Π² Python

Β 

6. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

Python позволяСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

def prime_numbers(x):
  l=[]
  for i in range(x+1):
    if checkPrime(i):
      l.append(i)
  return len(l), l

no_of_primes, primes_list = prime_numbers(100)

Β 

Π—Π΄Π΅ΡΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π΄Π²Π° значСния. Когда эта функция вызываСтся, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если функция Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, ΠΎΠ½Π° нСявно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None.

Β 

7. Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π·Π½Π°Ρ‚ΡŒ оТидания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

def prime_numbers(x:int) -> (int, list):
  l=[]
  for i in range(x+1):
    if checkPrime(i):
      l.append(i)
  return len(l), l

Β 

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΠΉ Π½ΡƒΠΆΠ΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° int ΠΈ Π²Π΅Ρ€Π½Π΅Ρ‚ Π΄Π²Π° значСния Ρ‚ΠΈΠΏΠ° int ΠΈ list соотвСтствСнно.

На этом всС. Π£Π΄Π°Ρ‡ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ вопросы ΠΈΠ»ΠΈ прСдлоТСния, Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².

Если Π²Ρ‹ нашли ΠΎΡˆΠΈΠ±ΠΊΡƒ, поТалуйста, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ тСкста ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl+Enter.

ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π£Ρ€ΠΎΠΊ 14 курса «Python. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

Π―Π·Ρ‹ΠΊ Python Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ…, Ρ‚. Π΅. встроСнных Π² Π½Π΅Π³ΠΎ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, ΠΎΠ½ΠΈ скрыты Π³Π΄Π΅-Ρ‚ΠΎ Π² «Π½Π΅Π΄Ρ€Π°Ρ…» языка. Достаточно Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΈ Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡ… интСрфСйс.

Ряд встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΡƒΠΆΠ΅ использовали. Π­Ρ‚ΠΎ print(), input(), int(), float(), str(), bool(), type(). ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ всСх встроСнных Π² Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ языку: https://docs.python.org/3/library/functions.html . Π’ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° русский ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ здСсь: https://pythoner.name/documentation/library/functions .

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, условно Ρ€Π°Π·Π±ΠΈΠ² ΠΈΡ… Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹:

  • Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с символами – ord(), chr(), len()

  • матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – abs(), round(), divmod(), pow(), max(), min(), sum()

Ѐункция ord() позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ символа ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Unicode. БоотвСтствСнно, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ½Π° Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ символ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ:

>>> ord('z')
122
>>> ord('Ρ„')
1092
>>> ord('@')
64

Ѐункция chr() выполняСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ дСйствиС. Она позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ символ ΠΏΠΎ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ:

>>> chr(87)
'W'
>>> chr(1049)
'Π™'
>>> chr(10045)
'✽'

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ord() ΠΈ chr(), ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ функция – это дСйствиС. Π•Π΅ имя ΠΊΠ°ΠΊ Π±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° вопрос «Π§Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ?». Order – это порядок. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ порядковый Π½ΠΎΠΌΠ΅Ρ€ элСмСнта Π² ряду. А Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ символ. Character – это символ. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ символ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ порядковый Π½ΠΎΠΌΠ΅Ρ€.

Ѐункция len() Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ простых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², количСство ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° подсчитываСт. Числа – это простыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈΡ… нСльзя ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² len(). Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ:

>>> len('abc')
3
>>> s1 = '------'
>>> s2 = '_______'
>>> len(s1) > len(s2)
False
>>> len(s1)
6
>>> len(s2)
7

ΠšΡ€ΠΎΠΌΠ΅ строк Π² len() ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ, структуры Π΄Π°Π½Π½Ρ‹Ρ….

Ѐункция abs() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа:

>>> abs(-2.2)
2.2
>>> abs(9)
9

Если трСбуСтся ΠΎΠΊΡ€ΡƒΠ³Π»ΠΈΡ‚ΡŒ вСщСствСнноС число Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° послС запятой, Ρ‚ΠΎ слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ round():

>>> a = 10/3
>>> a
3.3333333333333335
>>> round(a,2)
3.33
>>> round(a)
3

Если Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ Π·Π°Π΄Π°Π½, Ρ‚ΠΎ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ Π΄ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа. Π•ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° спСцифичСская ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом. Π’ этом случаС ΠΎΠΊΡ€ΡƒΠ³Π»ΡΡ‚ΡŒΡΡ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, дСсятки, сотни ΠΈ Ρ‚. Π΄., Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ цСлая Ρ‡Π°ΡΡ‚ΡŒ:

>>> round(5321, -1)
5320
>>> round(5321, -3)
5000
>>> round(5321, -4)
10000

Ѐункция ΠΈΠΌΠ΅Π½Π½ΠΎ округляСт согласно ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ округлСния ΠΈΠ· ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Π° Π½Π΅ отбрасываСт. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ 5 тысяч Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΎΠΊΡ€ΡƒΠ³Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎ дСсяти.

>>> round(3.76, 1)
3.8
>>> round(3.72, 1)
3.7
>>> round(3.72)
4
>>> round(3.22)
3

Если Π½ΡƒΠΆΠ½ΠΎ просто ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части Π±Π΅Π· округлСния, слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ int():

>>> int(3.78)
3

НСрСдко Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ round() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ совмСстно с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ print(), избСгая форматирования Π²Ρ‹Π²ΠΎΠ΄Π°:

>>> a = 3.45673
>>> print("Number: %.2f" % a)
Number: 3.46
>>> print("Number:", round(a,2))
Number: 3.46

Π’ послСднСм случаС ΠΊΠΎΠ΄ выглядит Π±ΠΎΠ»Π΅Π΅ ясным.

Ѐункция divmod() выполняСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°Ρ†Π΅Π»ΠΎ ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ остатка ΠΎΡ‚ дСлСния:

>>> divmod(10, 3)
(3, 1)
>>> divmod(20, 7)
(2, 6)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ½Π° ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π΄Π²Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: div() ΠΈ mod(). ΠŸΠ΅Ρ€Π²Π°Ρ Π΄Π΅Π»ΠΈΡ‚ Π½Π°Ρ†Π΅Π»ΠΎ, вторая Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ остаток ΠΎΡ‚ цСлочислСнного дСлСния (дСлСния ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ). Π’ Python ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы-ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹:

>>> 10 // 3
3
>>> 10 % 3
1

Ѐункция pow() Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ число – основаниС, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ – ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ:

>>> pow(3, 2)
9
>>> pow(2, 4)
16

Π’ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

>>> 3**2
9
>>> 2**4
16

Однако pow() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π­Ρ‚ΠΎ число, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСлится ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ возвСдСния Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ:

>>> pow(2, 4, 4)
0
>>> 2**4 % 4
0

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ способа являСтся Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ быстроС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ max(), min() ΠΈ sum() находят соотвСтствСнно ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт ΠΈ сумму элСмСнтов Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

>>> max(10, 12, 3)
12
>>> min(10, 12, 3, 9)
3
>>> a = (10, 12, 3, 10)
>>> sum(a)
35

Π’ sum() нСльзя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ элСмСнтов, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ структура Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. Π’ min() ΠΈ max() Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π°Ρ‰Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

>>> max(a)
12

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°

  1. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½ΠΎΠΌΠ΅Ρ€Π° символов ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Unicode ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ символы. Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ нуля.

  2. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая измСряСт Π΄Π»ΠΈΠ½Ρƒ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ строки. Если строка Π΄Π»ΠΈΠ½Π½Π΅Π΅ дСсяти символов, Ρ‚ΠΎ выносится ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Если ΠΊΠΎΡ€ΠΎΡ‡Π΅, Ρ‚ΠΎ ΠΊ строкС добавляСтся ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ символов *, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ Π΄Π»ΠΈΠ½Π° составляла Π΄Π΅ΡΡΡ‚ΡŒ символов, послС Ρ‡Π΅Π³ΠΎ новая строка Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° экран.

  3. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΡˆΠ΅ΡΡ‚ΡŒ вСщСствСнных чисСл. На экран Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ минимальноС ΠΈ максимальноС ΠΈΠ· Π½ΠΈΡ…, ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½Ρ‹Π΅ Π΄ΠΎ Π΄Π²ΡƒΡ… Π·Π½Π°ΠΊΠΎΠ² послС запятой. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π±Π΅Π· использования встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ min() ΠΈ max().

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ Π² android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ pdf-вСрсии курса

Π˜Π½Ρ‚Ρ€ΠΎΡΠΏΠ΅ΠΊΡ†ΠΈΡ Π² Python

МногиС языки программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Ρ€ΠΎΡΠΏΠ΅ΠΊΡ†ΠΈΡŽ, ΠΈ Python Π½Π΅ являСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π² контСкстС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования, интроспСкция β€” это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя выполнСния ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, доступныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для выполнСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΏΡΡ‚ΡŒ самых ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ интроспСкции Π² Python.


dir()

ΠŸΠ΅Ρ€Π²Π°Ρ функция β€” это функция dir(). Она прСдоставляСт список Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², доступных для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

>>> a = [1, 2, 3]
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π΅Ρ€Π½ΡƒΠ»Π° функция dir() β€” это отсортированный Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС список. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сущСствованиС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅.

>>> b = [1, 2, 3]
>>> b_dir = dir(b)
>>> 'index' in b_dir
True
>>> 'pop' in b_dir
True

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dir() Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π°, доступныС Π² локальной области видимости, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈ использовано Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b', 'b_dir']

type()

Π”Ρ€ΡƒΠ³ΠΎΠΉ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ интроспСкции являСтся функция type(). Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· названия, эта функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, классом ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½ΠΈΠΆΠ΅:

>>> type(1.2)
<class 'float'>
>>> type([1, 2, 3])
<class 'list'>
>>> type((3, 'Three'))
<class 'tuple'>
>>> def do_something():
... pass
... 
>>> type(do_something)
<class 'function'>
>>> class Fruit:
... pass
... 
>>> type(Fruit)
<class 'type'>
>>> type(Fruit())
<class '__main__.Fruit'>
>>> import os
>>> type(os)
<class 'module'>

Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ значСниями ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ type()? ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ == ΠΈΠ»ΠΈ is. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

>>> type(1.2) == int
False
>>> type(1.2) == float
True
>>> type([1,2]) == list
True
>>> type((1,2)) is tuple
True

isinstance()

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ интроспСкции, которая особСнно ΠΏΠΎΠ»Π΅Π·Π½Π°, являСтся функция isinstance(). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ экзСмпляром ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ класса. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅.

>>> isinstance([1,2], list)
True
>>> isinstance([1,2], tuple)
False
>>> isinstance((1,2), tuple)
True

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция isinstance() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

>>> isinstance(1, (int, float, tuple))
True
>>> isinstance(1, int) or isinstance(1, float) or isinstance(1, tuple)

Рассмотрим Π±ΠΎΠ»Π΅Π΅ практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс:

>>> class Fruit:
... pass
... 
>>> apple = Fruit()
>>> isinstance(apple, Fruit)
True

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ type(), ΠΈ isinstance() ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.

Когда ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ type(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, ΠΌΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ сравнСниС ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ. По сути, ΠΌΡ‹ сравниваСм Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ.

А Π²ΠΎΡ‚ isinstance() являСтся Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. ЀактичСски ΠΎΠ½Π° опрСдСляСт, являСтся Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ экзСмпляром ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ класса (классов) ΠΈΠ»ΠΈ Π΅Π³ΠΎ подкласса.Β  Для isinstance() экзСмпляр подкласса Ρ‚Π°ΠΊΠΆΠ΅ являСтся экзСмпляром Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½Π° сравниваСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ со списком ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Ρ… классов, Ρ‡Ρ‚ΠΎ являСтся своСго Ρ€ΠΎΠ΄Π° сравнСниСм ΠΎΠ΄ΠΈΠ½ ΠΊ нСскольким. На рисункС Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.


hasattr()

Иногда, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ Π½Π΅Π³ΠΎ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚. ΠœΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

>>> class Fruit:
... pass
... 
>>> Fruit().tasty
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Fruit' object has no attribute 'tasty'

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ hasattr() ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ.

>>> class Fruit:
... tasty = True
... 
>>> fruit = Fruit()
>>> if hasattr(fruit, 'tasty'):
... print('The fruit is tasty')
... else:
... print('The fruit is not tasty')
... 
The fruit is tasty

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈ Π½Π° это Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dir() для достиТСния Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, функция dir() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ доступныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· элСмСнтов Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ списка. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

>>> class Fruit:
... tasty = True
... 
>>> fruit = Fruit()
>>> if 'tasty' in dir(fruit):
... print('The fruit is tasty')
... else:
... print('The fruit is not tasty')
... 
The fruit is tasty

id()

И послСдняя, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ваТная функция интроспСкции Π² Python β€” это функция id(). Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ CPython ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” это адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ для всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ссли ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ ΠΈΡ… сущСствования Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

a = 2
b = 1
id(a)
140339209865072
id(b)
140339209865096

Один ΠΈΠ· распространСнных ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ΄Π° Π² Python β€” это ΠΎΠ±ΠΌΠ΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ a, b = b, a. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ происходит послС ΠΎΠ±ΠΌΠ΅Π½Π°.

id(a)
140339209865096
id(b)
140339209865072
a, b
(1, 2)

Как ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, эти Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ помСнялись мСстами, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΈΡ… адрСсов Π² памяти ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.


Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Ρ€ΠΎΡΠΏΠ΅ΠΊΡ†ΠΈΡŽ Π² Python ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ…Β  ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… интроспСкции Π² Python, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ inspect.

ΠŸΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ рассмотрСны Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнными. Π’Ρ‹ смСло ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π° Python.

НСкоторыС возмоТности Python ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π·Π½Π°Π»ΠΈ / Π₯Π°Π±Ρ€

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅

Π― ΠΎΡ‡Π΅Π½ΡŒ полюбил Python послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» ΠΊΠ½ΠΈΠ³Ρƒ ΠœΠ°Ρ€ΠΊΠ° Π›ΡƒΡ‚Ρ†Π° Β«Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ PythonΒ». Π―Π·Ρ‹ΠΊ ΠΎΡ‡Π΅Π½ΡŒ красив, Π½Π° Π½Π΅ΠΌ приятно ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ собствСнныС ΠΈΠ΄Π΅ΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ количСство ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ компиляторов, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ, ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сообщСство ΠΎΡ‡Π΅Π½ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈ язык развиваСтся. Π’ процСссС изучСния языка Ρƒ мСня появилось ΠΌΠ½ΠΎΠ³ΠΎ вопросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π³ΡƒΠ³Π»ΠΈΠ» ΠΈ старался ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π½Π΅ΠΏΠΎΠ½ΡΡ‚ΡƒΡŽ ΠΌΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ. Об этом ΠΌΡ‹ ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ с Π²Π°ΠΌΠΈ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

НСмного ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ…

Начну ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΠΏΡƒΡ‚Π°ΡŽΡ‚ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Python программистов.

List comprehensions ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ список. Π― всСгда ΠΏΡƒΡ‚Π°Π» Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков ΠΈ выраТСния β€” Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (Π½ΠΎ Π½Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ!). Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, ΠΏΠΎ русский Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅. ВыраТСния β€” Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ это generator expressions, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ выраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π° Π½Π΅ список. Π”Π°Π²Π°ΠΉΡ‚Π΅ сравним:

f = (x for x in xrange(100)) # Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ - Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€
c = [x for x in xrange(100)] # Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списков

Π­Ρ‚ΠΎ Π΄Π²Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ конструкции. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€), Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ список.

Generators ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€. Π§Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· yield:

def prime(lst):
    for i in lst:
        if i % 2 == 0:
            yield i

>>> f = prime([1,2,3,4,5,6,7])
>>> list(f)
[2, 4, 6]
>>> next(f)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>

ΠšΡΡ‚Π°Ρ‚ΠΈ, Π² Python 3.3 появилась новая конструкция yield from. БовмСстноС использованиС yield ΠΈ for ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ часто, Ρ‡Ρ‚ΠΎ эти Π΄Π²Π΅ конструкции Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ.

def generator_range(first, last):
    for i in xrange(first, last):
        yield i

def generator_range(first, last):
    yield from range(first, last)
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ контСкстныС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹?

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ· сСбя Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ with. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ with создаСт Π±Π»ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» контСкстного ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π΄Π°Π»Π΅Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» являСтся функция open(). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° диск (Π½Π° самом Π΄Π΅Π»Π΅ Python Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ close() автоматичСски, Π½ΠΎ явноС Π΅Π³ΠΎ использованиС являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ‚ΠΎΠ½ΠΎΠΌ). НапримСр:

fp = open("./file.txt", "w")
fp.write("Hello, World")
fp.close()

Π§Ρ‚ΠΎ Π±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ close() ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ контСкстным ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ автоматичСски Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ Ρ„Π°ΠΉΠ» послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π±Π»ΠΎΠΊΠ°:

with open("./file.txt", "w") as fp:
    fp.write("Hello, World")

Π—Π΄Π΅ΡΡŒ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ close, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ». Из этого слСдуСт, Ρ‡Ρ‚ΠΎ контСкстный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния ΠΊΠ°ΠΊΠΈΡ… Π»ΠΈΠ±ΠΎ дСйствий Π΄ΠΎ Π²Ρ…ΠΎΠ΄Π° Π² Π±Π»ΠΎΠΊ ΠΈ послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π½Π΅Π³ΠΎ. Но Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ контСкстных ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² Π½Π° этом Π½Π΅ заканчиваСтся. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ дСструкторы. Но Π² Python Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³Π΄Π΅ Ρ‚ΠΎ Π΅Ρ‰Π΅ Ρ‚ΠΎ Π½Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ дСструктор Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ __del__ вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли всС ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹Π»ΠΈ исчСрпаны:

In [4]: class Hello:
   ...:     def __del__(self):
   ...:         print 'destructor'
   ...:

In [5]: f = Hello()

In [6]: c = Hello()

In [7]: e = Hello()

In [8]: del e
destructor

In [9]: del c
destructor

In [10]: c = f

In [11]: e = f

In [12]: del f # <- дСструктор Π½Π΅ вызываСтся

РСшим эту Π·Π°Π΄Π°Ρ‡Ρƒ Ρ‡Π΅Ρ€Π΅Π· контСкстныС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹:

In [1]: class Hello:
   ...:     def __del__(self):
   ...:         print u'дСструктор'
   ...:     def __enter__(self):
   ...:         print u'Π²Ρ…ΠΎΠ΄ Π² Π±Π»ΠΎΠΊ'
   ...:     def __exit__(self, exp_type, exp_value, traceback):
   ...:         print u'Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π±Π»ΠΎΠΊΠ°'
   ...:

In [2]: f = Hello()

In [3]: c = f

In [4]: e = f

In [5]: d = f

In [6]: del d

In [7]: del e

In [8]: del c

In [9]: del f # <- дСструктор вызвался Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ³Π΄Π° всС ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹
дСструктор

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ контСкста:

In [10]: with Hello():
   ....:     print u'ΠΌΠΎΠΉ ΠΊΠΎΠ΄'
   ....:
Π²Ρ…ΠΎΠ΄ Π² Π±Π»ΠΎΠΊ
ΠΌΠΎΠΉ ΠΊΠΎΠ΄
Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π±Π»ΠΎΠΊΠ°
дСструктор

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π±Π»ΠΎΠΊΠ° послС выполнСния нашСго ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» контСкстного ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°

ΠœΡ‹ ΡƒΠΆΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрСли ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» контСкстного ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° написав нСбольшой класс Hello. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ разбСрСмся Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Π§Ρ‚ΠΎ Π±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ стал контСкстным ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ Π² Π΅Π³ΠΎ класс ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: __enter__ ΠΈ __exit__. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ выполняСтся Π΄ΠΎ Π²Ρ…ΠΎΠ΄Π° Π² Π±Π»ΠΎΠΊ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ экзСмпляр класса, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ as.

ΠœΠ΅Ρ‚ΠΎΠ΄ __exit__ выполняСтся послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π±Π»ΠΎΠΊΠ° with, ΠΈ ΠΎΠ½ содСрТит Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” exp_type, exp_value ΠΈ exp_tr. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅ with. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅.

class Open(object):
    def __init__(self, file, flag):
        self.file = file
        self.flag = flag

    def __enter__(self):
        try:
            self.fp = open(self.file, self.flag)
        except IOError:
            self.fp = open(self.file, "w")
        return self.fp

    def __exit__(self, exp_type, exp_value, exp_tr):
        """ подавляСм всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ IOError """
        if exp_type is IOError:
            self.fp.close() # Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»
            return True
        self.fp.close() # Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»

with Open("asd.txt", "w") as fp:
    fp.write("Hello, World\n")

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ exp_type содСрТит Π² сСбС класс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΎ, exp_value β€” сообщСниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» ΠΈ подавляСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ IOError посрСдством Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° True ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ __exit__. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π±Π»ΠΎΠΊΠ΅ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наш ΠΊΠΎΠ΄ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΠΈ Π±Π»ΠΎΠΊ заканчиваСтся вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ self.fp.close(), Π½Π΅ зависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΎ. ΠšΡΡ‚Π°Ρ‚ΠΈ, Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° with ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π°Π²Π»ΡΡ‚ΡŒ ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ NameError, SyntaxError, Π½ΠΎ этого Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ стоит.

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ контСкстных ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ просты Π² использовании, Π½ΠΎ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ простой способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поставляСтся вмСстС со стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΏΠΈΡ‚ΠΎΠ½Π°. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим ΠΏΠ°ΠΊΠ΅Ρ‚ contextlib.

ΠŸΠ°ΠΊΠ΅Ρ‚ contextlib

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ контСкстных ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ способом, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ написаниСм классов с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ __enter__ ΠΈ __exit__ Π½Π΅ ΠΎΠ΄Π½Π° ΠΈΠ· слоТных Π·Π°Π΄Π°Ρ‡. Но для Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° написаниС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… классов Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС возьни. Для этих Ρ†Π΅Π»Π΅ΠΉ Π±Ρ‹Π» ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ contextmanager(), входящий Π² состав ΠΏΠ°ΠΊΠ΅Ρ‚Π° contextlib. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ contextmanager() ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ контСкстный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€:

import contextlib
@contextlib.contextmanager
def context():
    print u'Π²Ρ…ΠΎΠ΄ Π² Π±Π»ΠΎΠΊ'
    try:
        yield {}
    except RuntimeError, err:
        print 'error: ', err
    finally:
        print u'Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π±Π»ΠΎΠΊΠ°'

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°:

In [8]: with context() as fp:
   ...:     print u'Π±Π»ΠΎΠΊ'
   ...:
Π²Ρ…ΠΎΠ΄ Π² Π±Π»ΠΎΠΊ
Π±Π»ΠΎΠΊ
Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π±Π»ΠΎΠΊΠ°

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°.

In [14]: with context() as value:
   ....:     raise RuntimeError, 'Error'
   ....:
Π²Ρ…ΠΎΠ΄ Π² Π±Π»ΠΎΠΊ
error:  Error
Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π±Π»ΠΎΠΊΠ°

In [15]:

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, рСализация с использованиСм классов практичСски Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с использованиСм Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° contextmanager(), Π½ΠΎ использованиС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ наш ΠΊΠΎΠ΄.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ интСрСсный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° contextmanager():

import contextlib
@contextlib.contextmanager
def bold_text():
    print '<b>'
    yield # ΠΊΠΎΠ΄ ΠΈΠ· Π±Π»ΠΎΠΊΠ° with выполнится Ρ‚ΡƒΡ‚
    print '</b>'

with bold_text():
    print "Hello, World"

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

<b>Hello, World</b>

ΠŸΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΈ Π² Ρ€ΡƒΠ±ΠΈ Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ?

И напослСдок ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… контСкстах. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ контСксты ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нСсколькими контСкстами ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. НапримСр:

import contextlib
@contextlib.contextmanager
def context(name):
    print u'Π²Ρ…ΠΎΠ΄ Π² контСкст %s' % (name)
    yield name # наш блок
    print u'Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· контСкста %s' % (name)

with contextlib.nested(context('first'), context('second')) as (first, second):
    print u'Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° %s %s' % (first, second)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π²Ρ…ΠΎΠ΄ Π² контСкст first

Π²Ρ…ΠΎΠ΄ Π² контСкст second

Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° first second

Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· контСкста second

Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· контСкста first

Аналогичный ΠΊΠΎΠ΄ Π±Π΅Π· использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ nested:

first, second = context('first'), context('second')
with first as first:
    with second as second:
        print u'Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° %s %s' % (first, second)

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Ρ…ΠΎΡ‚ΡŒ ΠΈ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ context(‘first’) ΠΈ context(‘second’) Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΎ Π²Ρ…ΠΎΠ΄Π° Π² Π±Π»ΠΎΠΊ, поэтому ΠΌΡ‹ Π½Π΅ смоТСм ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π² этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π΅Π΅ ΠΈ выглядит красивСС. А Π²ΠΎΡ‚ Π² Python 2.7 ΠΈ 3.1 функция nested устарСла ΠΈ Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° новая синтаксичСская конструкция для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… контСкстов:

with context('first') as first, context('second') as second:
    print u'Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° %s %s' % (first, second)
range ΠΈ xrange Π² Python 2.7 ΠΈ Python 3

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Python 2.7 range Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список. Π”ΡƒΠΌΠ°ΡŽ всС согласятся, Ρ‡Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ большиС ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти нСцСлСсообразно, поэтому ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ xrange, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ xrange ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ список, Π½ΠΎ Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² памяти всС Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ элСмСнты. Но мСня Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΈΠ²ΠΈΠ»ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ xrange Π² Python 2.x, ΠΊΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ большиС значСния. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> f = xrange(1000000000000000000000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long
>>>

Python Π½Π°ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ int слишком Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΈ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π² C long. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ Ρƒ Python 2.x Π΅ΡΡ‚ΡŒ ограничСния Π½Π° Ρ†Π΅Π»ΠΎΠ΅ число, Π² этом ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ просмотрСв константу sys.maxsize:

>>> import sys
>>> sys.maxsize
9223372036854775807
>>>

Π’ΠΎΡ‚ ΠΎΠ½ΠΎ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа:

>>> import sys
>>> sys.maxsize+1
9223372036854775808L
>>>

Python Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» нашС число Π² long int. НС ΡƒΠ΄ΠΈΠ²Π»ΡΠΉΡ‚Π΅ΡΡŒ, Ссли xrange Π² Python 2.x Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… значСниях.

Π’ Python 3.3 Ρ†Π΅Π»ΠΎΠ΅ число ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСсконСчно большим, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ:

>>> import sys
>>> sys.maxsize
9223372036854775807
>>> range(sys.maxsize+1)
range(0, 9223372036854775808)
>>>

ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² long int Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> import sys
>>> sys.maxsize + 1
9223372036854775808
>>> f = sys.maxsize + 1
>>> type(f)
<class 'int'>
>>>

Π’ Python 2.7

>>> import sys
>>> type(sys.maxsize + 1)
<type 'long'>
>>>
НС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… конструкций

Π”ΡƒΠΌΠ°ΡŽ всС согласятся, Ρ‡Ρ‚ΠΎ простота ΠΏΠΈΡ‚ΠΎΠ½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π½Π΅ Π² лСгкости Π΅Π³ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ, Π° Π² простотС самого языка. ΠŸΠΈΡ‚ΠΎΠ½ красив, Π³ΠΈΠ±ΠΎΠΊ ΠΈ Π½Π° Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ стилС, Π½ΠΎ ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ. Но ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… конструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд каТутся странными Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ. Для Π½Π°Ρ‡Π°Π»Π° рассмотрим ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

>>> f = [[]] * 3
>>> f[0].append('a')
>>> f[1].append('b')
>>> f[2].append('c')
>>>

Каков Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Π°Π½Π½ΠΎΠΉ конструкции? НСподготовлСнный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сообщит ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅: [[‘a’], [b’], [c’]]. Но Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

>>> print f
[['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']]
>>>

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ спискС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дублируСтся? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ умноТСния создаСт ссылки Π²Π½ΡƒΡ‚Ρ€ΠΈ нашСго списка Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ список. Π’ этом Π»Π΅Π³ΠΊΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ² наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> c = [[], [], []]
>>> hex(id(c[0])), hex(id(c[1])), hex(id(c[2]))
('0x104ede7e8', '0x104ede7a0', '0x104ede908')
>>>

>>> hex(id(f[0])), hex(id(f[1])), hex(id(f[2]))
('0x104ede710', '0x104ede710', '0x104ede710')
>>>

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ ссылки Π½Π° списки Ρ€Π°Π·Π½Ρ‹Π΅, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ссылаСмся Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ спискС ΠΏΠΎΠ²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠΆΠ΅ рассматривался Π½Π° Ρ…Π°Π±Ρ€Π΅, Π½ΠΎ ΠΌΠ½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΡΡ‚Π°Ρ‚ΡŒΡŽ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° lambda β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ³ΠΎΠ½ΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» for, ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

>>> tmp = {}
>>> for i in range(10):
...     tmp[i] = lambda: i
>>> tmp[0]()
9
>>> tmp[1]()
9
>>>

Π’ ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… lambda Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСмСнная i замыкаСтся ΠΈ ΠΊΠ°ΠΊ Π±Ρ‹ создаСтся экзСмпляр Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Π² Π±Π»ΠΎΠΊΠ΅ lambda β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая являСтся ссылкой Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i Π² Ρ†ΠΈΠΊΠ»Π΅ for. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° счСтчик Ρ†ΠΈΠΊΠ»Π° for мСняСтся, ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈ значСния Π²ΠΎ всСх lambda функциях, поэтому ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i-1 Π²ΠΎ всСх функциях. Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это Π»Π΅Π³ΠΊΠΎ, явно ΠΏΠ΅Ρ€Π΅Π΄Π°Π² lambda Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i:

>>> tmp = {}
>>> for i in range(10):
...     tmp[i] = lambda i = i: i
>>> tmp[0]()
0

>>> tmp[1]()
1
>>>

Ѐункция

python int () — qaru

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

.

Python int ()

Бинтаксис ΠΌΠ΅Ρ‚ΠΎΠ΄Π° int () :

int (x = 0, основаниС = 10) 

int () ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

int () ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

  • x — Число ΠΈΠ»ΠΈ строка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² цСлочислСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
    АргумСнт ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ — ноль .
  • base — ОснованиС числа x .
    ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 0 (Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄) ΠΈΠ»ΠΈ 2-36.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· int ()

int () ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:

  • цСлочислСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ числа ΠΈΠ»ΠΈ строки ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π±Π°Π·Ρƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΊ 10
  • (Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0
  • (Ссли Π·Π°Π΄Π°Π½ΠΎ основаниС) ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ строку с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ основаниСм (0, 2, 8, 10, 16)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. Как int () Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Python?

  # Ρ†Π΅Π»ΠΎΠ΅ число
print ("int (123) is:", int (123))

# float
print ("int (123.23) это: ", int (123.23))

# строка
print ("int ('123') is:", int ('123'))  

Π’Ρ‹Ρ…ΠΎΠ΄

  int (123): 123
int (123.23): 123
int ('123'): 123 
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: Как int () Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для дСсятичных, Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… чисСл?

  # Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ 0b ΠΈΠ»ΠΈ 0B
print ("Для 1010 int Ρ€Π°Π²Π½ΠΎ:", int ('1010', 2))
print ("Для 0b1010 int Ρ€Π°Π²Π½ΠΎ:", int ('0b1010', 2))

# Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ 0o ΠΈΠ»ΠΈ 0O
print ("Для 12 int Ρ€Π°Π²Π½ΠΎ:", int ('12 ', 8))
print ("Для 0o12 int Ρ€Π°Π²Π½ΠΎ:", int ('0o12', 8))

# ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ
print ("Для A int Ρ€Π°Π²Π½ΠΎ:", int ('A', 16))
print ("Для 0xA int Ρ€Π°Π²Π½ΠΎ:", int ('0xA', 16))  

Π’Ρ‹Ρ…ΠΎΠ΄

  Для 1010 int: 10
Для 0b1010 int: 10
Для 12 int Ρ€Π°Π²Π½ΠΎ: 10
Для 0o12 int: 10
Для A int Ρ€Π°Π²Π½ΠΎ: 10
Для 0xA int: 10 
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: int () для настраиваСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ int () Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° __int __ () .

Π˜Ρ‚Π°ΠΊ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ являСтся числом, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² цСлочислСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ __index __ () ΠΈ __int __ () класса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΈ число.

Π­Ρ‚ΠΈ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ старыС вСрсии Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ __int __ () , Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ __index __ () .

  класс ЧСловСк:
    возраст = 23

    def __index __ (сам):
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сСбя.возраст
    
    def __int __ (сам):
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ self.age

person = Π§Π΅Π»ΠΎΠ²Π΅ΠΊ ()
print ('int (Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ) is:', int (Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ))  

Π’Ρ‹Ρ…ΠΎΠ΄

  int (Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ): 23 
 

.

HOWTO ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ — докумСнтация Python 2.7.18

Автор

ΠšΡƒΡ‡Π»ΠΈΠ½Π³ А.М.

Выпуск

0,31

Π’ этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΌΡ‹ познакомимся с функциями Python, подходящими для
рСализация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС. ПослС знакомства с
ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, ΠΌΡ‹ рассмотрим особСнности языка, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
itertools ΠΈ functools .

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ основная концСпция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования; Ссли Π²Ρ‹
просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ возмоТностях языка Python, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ
Ρ€Π°Π·Π΄Π΅Π».

Π―Π·Ρ‹ΠΊΠΈ программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π·Π°Π΄Π°Ρ‡ нСсколькими способами:

  • Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков программирования ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ : ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — это списки
    инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ говорят ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Π²Π²ΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. C,
    Паскаль ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Unix — это ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ языки.

  • На Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языках Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ
    ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΈ рСализация языка выясняСт, ΠΊΠ°ΠΊ
    Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ вычислСния эффСктивно. SQL — это Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹
    скорСС всСго, Π·Π½Π°ΠΊΠΎΠΌ с; SQL-запрос описываСт Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…
    для извлСчСния, ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ SQL Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксы,
    ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ Ρ‚. Π΄.

  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ коллСкциями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚
    Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ это Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС Π²
    ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Smalltalk ΠΈ Java — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки. C ++ ΠΈ Python
    языки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚
    использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π° Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
    Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ производят Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ…
    Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ влияСт Π½Π° Π²Ρ‹Π²ΠΎΠ΄, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.Π₯ΠΎΡ€ΠΎΡˆΠΎ извСстный
    Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ сСмСйство ML (Standard ML, OCaml ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅
    Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹) ΠΈ Haskell.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… языков ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ
ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ часто затрудняСт написаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅
u

.Ѐункция Python

Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — qaru

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

Загрузка…

  1. ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
    Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ

  2. Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ сообщСство

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *