Π Π°Π·Π½ΠΎΠ΅

Код python: ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ | Python 3 для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΈ Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²

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

10 ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ ΠΊΠΎΠ΄Π°, ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‰ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Python

Β«ΠŸΠΈΡ‚ΠΎΠ½ – ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉΒ». НавСрняка Π²Ρ‹ Π½Π΅ Ρ€Π°Π· ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с этим ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, особСнно ΠΎΡ‚ людСй, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΡ… Π² Python ΠΈΠ· C, C++ ΠΈΠ»ΠΈ Java. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях это Π²Π΅Ρ€Π½ΠΎ. Π¦ΠΈΠΊΠ»Ρ‹ ΠΈΠ»ΠΈ сортировка массивов, списков ΠΈΠ»ΠΈ словарСй ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², главная миссия Python – ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ приятным ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ. Π Π°Π΄ΠΈ лаконичности ΠΈ удобочитаСмости ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ отчасти принСсти Π² ΠΆΠ΅Ρ€Ρ‚Π²Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² послСдниС Π³ΠΎΠ΄Ρ‹ прСдпринято Π½Π΅ΠΌΠ°Π»ΠΎ усилий для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ эффСктивно ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ большиС Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NumPy, SciPy, Pandas ΠΈ numba, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ написаны Π½Π° C/C++. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ интСрСсный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ – PyPy ускоряСт ΠΊΠΎΠ΄ Python Π² 4.4 Ρ€Π°Π·Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с CPython (ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ рСализация Python).

НСдостаток PyPy – Π½Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… популярных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Matplotlib, SciPy.

Но ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’ Π½Π°ΡˆΠΈΡ… силах Ρ€Π°Π·ΠΎΠ³Π½Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² повсСднСвной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΊΠΎΠ΄ΠΈΠ½Π³Π°.

Бписок встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python 3

Π’ Python ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ быстро Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° C встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Они ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (abs, min, max, len, sum). Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡ… Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² подходящСм мСстС Π½Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠΈΠ΅ вСлосипСды, Π° Π±Ρ€Π°Ρ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠ΅ стандартноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ set() ΠΈ sum(). Π‘Ρ€Π°Π²Π½ΠΈΠΌ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ с кастомными рСализациями Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для set():

        import random
random.seed(666)
a_long_list = [random.randint(0, 50) for i in range(1000000)]

# 1. ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Π°Ρ рСализация set
%%time
unique = []
for n in a_long_list:
  if n not in unique:
    unique.append(n)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 316 ms, sys: 1.36 ms, total: 317 ms
# Wall time: 317 ms

# 2. ВстроСнная функция set
%%time  
unique = list(set(a_long_list))

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 8.74 ms, sys: 110 ΞΌs, total: 8.85 ms
# Wall time: 8.79 ms
    

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для sum():

        # 1. ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Π°Ρ рСализация sum
%%time
sum_value = 0
for n in a_long_list:
  sum_value += n
print(sum_value)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# 25023368
# CPU times: user 9.91 ms, sys: 2.2 ms, total: 101 ms
# Wall time: 100 ms

# 2. ВстроСнная функция sum
%%time
sum_value = sum(a_long_list)
print(sum_value)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# 25023368
# CPU times: user 4.74 ms, sys: 277 ΞΌs, total: 5.02 ms
# Wall time: 4.79 ms
    

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² 36 (set) ΠΈ 20 (sum) Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, написанныС самим Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ.

Если Π½Π°ΠΌ просто Π½ΡƒΠΆΠ΅Π½ отсортированный список, ΠΏΡ€ΠΈ этом Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ, sort() Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ sorted(). Π­Ρ‚ΠΎ справСдливо для Π±Π°Π·ΠΎΠ²ΠΎΠΉ сортировки:

        # 1. ДСфолтная сортировка с использованиСм sorted()
%%time
sorted(a_long_list)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 12 ms, sys: 2.51 ms, total: 14.5 ms
# Wall time: 14.2 ms

# 2. ДСфолтная сортировка с использованиСм sort()
%%time
a_long_list.sort()

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 8.52 ms, sys: 82 ΞΌs, total: 8.6 ms
# Wall time: 10 ms
    

Π‘ΠΏΡ€Π°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ ΠΈ для сортировки с использованиСм ΠΊΠ»ΡŽΡ‡Π° – ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° key, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

        # 1. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ с использованиСм sorted()
%%time
str_list1 = "Although both functions can sort list, there are small differences".split()
result = sorted(str_list1, key=str.lower)
print(result)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# ['Although', 'are', 'both', 'can', 'differences', 'functions', 'list,', 'small', 
'sort', 'there']
# CPU times: user 29 ΞΌs, sys: 0 ns, total: 29 ΞΌs
# Wall time: 32.9 ΞΌs

# 2. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ с использованиСм sort()
%%time
str_list2 = "Although both functions can sort list, there are small differences".split()
str_list2.sort(key=str.lower)
print(str_list2)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# ['Although', 'are', 'both', 'can', 'differences', 'functions', 'list,', 'small', 
'sort', 'there']
# CPU times: user 26 ΞΌs, sys: 0 ns, total: 26 ΞΌs
# Wall time: 29.8 ΞΌs

# 3. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (лямбда) с использованиСм sorted()
%%time
str_list1 = "Although both functions can sort list, there are small differences".split()
result = sorted(str_list1, key=lambda str: len(str))
print(result)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# ['can', 'are', 'both', 'sort', 'list,', 'there', 'small', 'Although', 'functions', 'differences']
# CPU times: user 61 ΞΌs, sys: 3 ΞΌs, total: 64 ΞΌs
# Wall time: 59.8 ΞΌs

# 4. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (лямбда) с использованиСм sort()
%%time
str_list2 = "Although both functions can sort list, there are small differences".split()
str_list2.sort(key=lambda str: len(str))
print(str_list2)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# ['can', 'are', 'both', 'sort', 'list,', 'there', 'small', 'Although', 'functions', 'differences']
# CPU times: user 36 ΞΌs, sys: 0 ns, total: 36 ΞΌs
# Wall time: 38.9 ΞΌs
    

Π’Π°ΠΊ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ sort() измСняСт список прямо Π½Π° мСстС, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ sorted() создаСт Π½ΠΎΠ²Ρ‹ΠΉ отсортированный список, сохраняя исходный Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, порядок Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ a_long_list фактичСски ΡƒΠΆΠ΅ измСнился.

Однако функция sorted() Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°. Она ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с любой ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ структурой. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ (ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ значСниям), придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sorted():

        a_dict = {'A': 1, 'B': 3, 'C': 2, 'D': 4, 'E': 5}

# 1. ДСфолтная сортировка ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ
%%time
result = sorted(a_dict) 
print(result)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# ['A', 'B', 'C', 'D', 'E']
# CPU times: user 4 ΞΌs, sys: 0 ns, total: 4 ΞΌs
# Wall time: 6.91 ΞΌs

# 2. CΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ значСниям, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π²ΠΈΠ΄Π΅ списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ
%%time
result = sorted(a_dict.items(), key=lambda item: item[1]) 
print(result)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# [('A', 1), ('C', 2), ('B', 3), ('D', 4), ('E', 5)]
# CPU times: user 7 ΞΌs, sys: 0 ns, total: 7 ΞΌs
# Wall time: 8.82 ΞΌs

# 3. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ значСниям, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π²ΠΈΠ΄Π΅ словаря
%%time
result = {key: value for key, value in sorted(a_dict.items(), key=lambda item: item[1])}
print(result)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# {'A': 1, 'C': 2, 'B': 3, 'D': 4, 'E': 5}
# CPU times: user 8 ΞΌs, sys: 0 ns, total: 8 ΞΌs
# Wall time: 11.2 ΞΌs
    

Когда Π½ΡƒΠΆΠ΅Π½ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ»ΠΈ список, вмСсто dict() ΠΈΠ»ΠΈ list(), ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ {} ΠΈ [] (для пустого мноТСства всС Π΅Ρ‰Π΅ Π½ΡƒΠΆΠ½Π° функция set()). Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ускорит ваш ΠΊΠΎΠ΄, Π½ΠΎ сдСлаСт Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ «pythonic».

        # 1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого словаря с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ dict()
%%time
sorted_dict1 = dict()
for key, value in sorted(a_dict.items(), key=lambda item:item[1]):
  sorted_dict1[key] = value

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 10 ΞΌs, sys: 0 ns, total: 10 ΞΌs
# Wall time: 12.2 ΞΌs

# 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого словаря с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° словаря
%%time
sorted_dict2 = {}
for key, value in sorted(a_dict.items(), key=lambda item:item[1]):
  sorted_dict2[key] = value

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 9 ΞΌs, sys: 0 ns, total: 9 ΞΌs
# Wall time: 11 ΞΌs

# 3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ list()
%%time
list()

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 3 ΞΌs, sys: 0 ns, total: 3 ΞΌs
# Wall time: 3.81 ΞΌs

# 4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° списка
%%time
[]

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 2 ΞΌs, sys: 0 ns, total: 2 ΞΌs
# Wall time: 3.1 ΞΌs
    

4. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ список ΠΈΠ· старого Π½Π° основС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условий, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» for – ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ всС значСния ΠΈ сохраняСм Π½ΡƒΠΆΠ½Ρ‹Π΅ Π² Π½ΠΎΠ²ΠΎΠΌ спискС.

НапримСр, ΠΎΡ‚Π±Π΅Ρ€Ρ‘ΠΌ всС Ρ‡Ρ‘Ρ‚Π½Ρ‹Π΅ числа ΠΈΠ· списка another_long_list:

        even_num = []
for number in another_long_list:
    if number % 2 == 0:
        even_num.append(number)

    

Но Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ элСгантный способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС. Код Ρ†ΠΈΠΊΠ»Π° for ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠΉ-СдинствСнной строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка, Π²Ρ‹ΠΈΠ³Ρ€Π°Π² ΠΏΡ€ΠΈ этом Π² скорости ΠΏΠΎΡ‡Ρ‚ΠΈ Π² Π΄Π²Π° Ρ€Π°Π·Π°:

        import random
random.seed(666)
another_long_list = [random.randint(0,500) for i in range(1000000)]

# 1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for
%%time
even_num = []
for number in another_long_list:
  if number % 2 == 0:
    even_num.append(number)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 113 ms, sys: 3.55 ms, total: 117 ms
# Wall time: 117 ms

# 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка
%%time
even_num = [number for number in another_long_list if number % 2 == 0]

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# CPU times: user 56.6 ms, sys: 3.73 ms, total: 60.3 ms
# Wall time: 64.8 ms
    

БочСтая это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ с ΠŸΡ€Π°Π²ΠΈΠ»ΠΎΠΌ #3 (использованиС Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ²), ΠΌΡ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ список Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ»ΠΈ мноТСство, просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² скобки:

        a_dict = {'A': 1, 'B': 3, 'C': 2, 'D': 4, 'E': 5}

sorted_dict3 = {key: value for key, value 
  in sorted(a_dict.items(), key=lambda item: item[1])}
print(sorted_dict3)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# {'A': 1, 'C': 2, 'B': 3, 'D': 4, 'E': 5}
    

РазбСрёмся Π² ΠΊΠΎΠ΄Π΅:

  • Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ sorted(a_dict.items(), key=lambda item: item[1]) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ [('A', 1), ('C', 2), ('B', 3), ('D', 4), ('E', 5)].
  • Π”Π°Π»Π΅Π΅ ΠΌΡ‹ распаковываСм ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΈ присваиваСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ key, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ – Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ value.
  • НаконСц, сохраняСм ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ keyvalue Π² словарС.

Иногда ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ списка Π½ΡƒΠΆΠ½Ρ‹ ΠΈ значСния, ΠΈ ΠΈΡ… индСксы. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΄Π²ΠΎΠ΅ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ enumerate() для прСвращСния списка Π² ΠΏΠ°Ρ€Ρ‹ индСкс-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

        import random
random.seed(666)
a_short_list = [random.randint(0,500) for i in range(5)]

# 1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ индСксов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ использования Π΄Π»ΠΈΠ½Ρ‹ списка
%%time
for i in range(len(a_short_list)):
  print(f'number {i} is {a_short_list[i]}')

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# number 0 is 233
# number 1 is 462
# number 2 is 193
# number 3 is 222
# number 4 is 145
# CPU times: user 189 ΞΌs, sys: 123 ΞΌs, total: 312 ΞΌs
# Wall time: 214 ΞΌs

# 2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ индСксов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enumerate()
for i, number in enumerate(a_short_list):
  print(f'number {i} is {number}')

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
# number 0 is 233
# number 1 is 462
# number 2 is 193
# number 3 is 222
# number 4 is 145
# CPU times: user 72 ΞΌs, sys: 15 ΞΌs, total: 87 ΞΌs
# Wall time: 90.1 ΞΌs


    

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях приходится ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ списка. Для ускорСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ zip(), которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΈΡ… Π² ΠΎΠ±Ρ‰ΠΈΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ:

        list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['1', '2', '3', '4', '5']

pairs_list = [pair for pair in zip(list1, list2)]
print(pairs_list)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4'), ('e', '5')]
    

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, списки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция zip() останавливаСтся, ΠΊΠΎΠ³Π΄Π° заканчиваСтся Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ список.

И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΡƒ (*) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ мноТСствСнноС присваиваниС:

        # 1. Распаковка списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ zip()
%%time
letters1, numbers1 = zip(*pairs_list)
print(letters1, numbers1)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
('a', 'b', 'c', 'd', 'e') ('1', '2', '3', '4', '5')
# CPU times: user 5 ΞΌs, sys: 1e+03 ns, total: 6 ΞΌs
# Wall time: 6.91 ΞΌs

# 2. Распаковка списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ простым ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ
letters2 = [pair[0] for pair in pairs_list]
numbers2 = [pair[1] for pair in pairs_list]
print(letters2, numbers2)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоли:
['a', 'b', 'c', 'd', 'e'] ['1', '2', '3', '4', '5']
# CPU times: user 5 ΞΌs, sys: 1e+03 ns, total: 6 ΞΌs
# Wall time: 7.87 ΞΌs
    

Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, содСрТит Π»ΠΈ список Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

        import random
random.seed(666)
another_long_list = [random.randint(0,500) for i in range(1000000)]

def check_membership(n):
    for element in another_long_list:
        if element == n:
            return True
    return False
    

Однако Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ in:

        # 1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия значСния Π² спискС ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ элСмСнтов
%%time
check_membership(900)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 29.7 ms, sys: 847 ΞΌs, total: 30.5 ms
# Wall time: 30.2 ms

# 2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия значСния Π² спискС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ in
900 in another_long_list

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 10.2 ms, sys: 79 ΞΌs, total: 10.3 ms
# Wall time: 10.3 ms
    

ΠŸΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· списка Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ set. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ сократим количСство элСмСнтов для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ in ΠΎΡ‡Π΅Π½ΡŒ быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с мноТСствами.

        # Π£Π±ΠΈΡ€Π°Π΅ΠΌ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹
check_list = set(another_long_list)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 19.8 ms, sys: 204 ΞΌs, total: 20 ms
# Wall time: 20 ms

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ значСния Π² спискС
900 in check_list

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 2 ΞΌs, sys: 0 ns, total: 2 ΞΌs
# Wall time: 5.25 ΞΌs
    

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ списка Π² мноТСство заняло 20 мс. Но это ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹. Π—Π°Ρ‚ΠΎ сама ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° заняла 5 мкс – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² 2 тыс. Ρ€Π°Π· мСньшС, Ρ‡Ρ‚ΠΎ становится Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈ частых обращСниях.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π² любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅/списки/словари/… пустыми. На этих ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ… Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ.

НС слСдуСт явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ == True ΠΈΠ»ΠΈ is True Π² условии if, достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя провСряСмой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ экономит рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ «магичСская» функция __eq__ для сравнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

        string_returned_from_function = 'Hello World'

# 1. Явная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° равСнство
%%time
if string_returned_from_function == True:
  pass

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 3 ΞΌs, sys: 0 ns, total: 3 ΞΌs
# Wall time: 5.01 ΞΌs

# 2. Явная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° is
%%time
if string_returned_from_function is True:
  pass

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 2 ΞΌs, sys: 1 ns, total: 3 ΞΌs
# Wall time: 4.05 ΞΌs

# 3. НСявноС равСнство
%%time
if string_returned_from_function:
  pass

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 3 ΞΌs, sys: 0 ns, total: 3 ΞΌs
# Wall time: 4.05 ΞΌs
    

Аналогично ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ условиС, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ not:

        if not string_returned_from_function:
  pass
    

Если Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² спискС, ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΡŽΡ‡ΠΈ – это значСния списка, Π° значСния – счСтчик встрСчаСмости.

        %%time
num_counts = {}
for num in a_long_list:
    if num in num_counts:
        num_counts[num] += 1
    else:
        num_counts[num] = 1

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 448 ms, sys: 1.77 ms, total: 450 ms
# Wall time: 450 ms
    

Однако Π±ΠΎΠ»Π΅Π΅ эффСктивный способ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ – использованиС Counter() ΠΈΠ· модуля collections. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ этом умСстится Π² ΠΎΠ΄Π½ΠΎΠΉ строчкС:

        %%time
num_counts2 = Counter(a_long_list)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 40.7 ms, sys: 329 ΞΌs, total: 41 ms
# Wall time: 41.2 ms
    

Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 10 Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ.

Π£ Counter Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ most_common, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ самыС часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ значСния:

        for number, count in num_counts2.most_common(10):
  print(number, count)

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
29 19831
47 19811
7 19800
36 19794
14 19761
39 19748
32 19747
16 19737
34 19729
33 19729

    

Одним словом, collections – это Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ инструмСнтов любого Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. НС ΠΏΠΎΠ»Π΅Π½ΠΈΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ нашС руководство ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ модуля.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ создаСтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство Ρ€Π°Π·. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ – ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ†ΠΈΠΊΠ»Π° for.

        def compute_cubic1(number):
  return number**3

%%time
new_list_cubic1 = [compute_cubic1(number) for number in a_long_list]

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 335 ms, sys: 14.3 ms, total: 349 ms
# Wall time: 354 ms
    

Однако ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ – ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

        def compute_cubic2():
  return [number**3 for number in a_long_list]

%%time
new_list_cubic2 = compute_cubic2()

# Π’Ρ‹Π²ΠΎΠ΄ Π² консоль
# CPU times: user 261 ms, sys: 15.7 ms, total: 277 ms
# Wall time: 277 ms
    

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ (Π΄Π»ΠΈΠ½Π° a_long_list) ΠΌΡ‹ сэкономили ΠΎΠΊΠΎΠ»ΠΎ 22% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

***

Π‘ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π΄Ρ‹, Ссли Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π² коммСнтариях своими ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΊ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° Π² Python. Π’ΠΎΡ‚ Π΅Ρ‰Ρ‘ нСсколько статСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ вас Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ:

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Python. Π§Π°ΡΡ‚ΡŒ 1

Рассмотрим популярныС инструмСнты для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Python ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ расскаТСм ΠΎΠ± ΠΈΡ… спСцификС ΠΈ основных ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Автор: Π’Π°Π»Π΅Ρ€ΠΈΠΉ Π¨Π°Π³ΡƒΡ€, teacher assistance Π½Π° курсС ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python

Высокая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ… ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Π΅
трСбования ΠΊ качСству ΠΊΠΎΠ΄Π°. Каким критСриям Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΊΠΎΠ΄?
ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ошибок, Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. НСдостаточноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· этих ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ появлСнию Π½ΠΎΠ²Ρ‹Ρ… ошибок ΠΈΠ»ΠΈ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ обнаруТСния ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…. НСбрСТно написанный ΠΈΠ»ΠΈ чСрСсчур Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, отсутствиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° врСмя исправлСния Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π°Π³Π°, вСдь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ приходится Π·Π°Π½ΠΎΠ²ΠΎ Π²Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄. Π”Π°ΠΆΠ΅ Ρ‚Π°ΠΊΠΈΠ΅, казалось Π±Ρ‹, Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ отсутствиС форматирования ΠΌΠΎΠ³ΡƒΡ‚ сильно Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

Командная Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π΅Ρ‰Π΅ большС ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ трСбования ΠΊ качСству ΠΊΠΎΠ΄Π°, поэтому Π²Π°ΠΆΠ½Ρ‹ΠΌ условиСм ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ становится описаниС Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ написанию ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ соглашСния, принятыС Π² языкС программирования, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вСдСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΈΠ»ΠΈ собствСнноС (Π²Π½ΡƒΡ‚Ρ€ΠΈΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅) руководство ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ. Π’Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ трСбования ΠΊ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ появлСния «Ρ€Π°Π·Π½ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ» срСди Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΠΈΡ… обсуТдСниС. ΠšΡ€ΠΎΠΌΠ΅ этого, соблюдСниС Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ лоТится Π½Π° ΠΏΠ»Π΅Ρ‡ΠΈ программистов Π² Π²ΠΈΠ΄Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. ВсС это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ появлСнию инструмСнтов для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ стилистичСских ΠΈ логичСских ошибок. О Ρ‚Π°ΠΊΠΈΡ… инструмСнтах для языка программирования Python ΠΌΡ‹ ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Анализаторы ΠΈ автоматичСскоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°

Π’Π΅ΡΡŒ инструмСнтарий, доступный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Python, ΠΌΠΎΠΆΠ½ΠΎ условно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎ способу рСагирования Π½Π° ошибки. ΠŸΠ΅Ρ€Π²Π°Ρ Π³Ρ€ΡƒΠΏΠΏΠ° сообщаСт ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, пСрСкладывая Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ΠΈΡ… ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π½Π° программиста. Вторая β€” ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ исправлСнного ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ автоматичСски вносит измСнСния.

И пСрвая, ΠΈ вторая Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ΠΊΠ°ΠΊ простыС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ узкоспСциализированных Π·Π°Π΄Π°Ρ‡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° docstring ΠΈΠ»ΠΈ сортировка ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ²), Ρ‚Π°ΠΊ ΠΈ Π±ΠΎΠ³Π°Ρ‚Ρ‹Π΅ ΠΏΠΎ возмоТностям Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠ΅ Π² сСбС Π±ΠΎΠ»Π΅Π΅ простыС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹. БрСдства Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π»ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΌΠΈ (linter). НазваниС происходит ΠΎΡ‚ lint β€” статичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° для языка программирования Π‘ΠΈ ΠΈ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΡΡ‚Π°Π²ΡˆΠ΅Π³ΠΎ Π½Π°Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°ΠΌΠΈ (formatter).

Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ повСрхностном сравнСнии этих Π³Ρ€ΡƒΠΏΠΏ Π²ΠΈΠ΄Π½Ρ‹ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. ΠŸΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠ² программисту, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ с оглядкой, Π΄Π°Π±Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ ошибки. И Π²ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ошибок β€” ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ исправлСния, Π° ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ процСсс исправлСния ошибок, оставляя программисту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ.

Бписок рассматриваСмых инструмСнтов для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Python

Π§Π°ΡΡ‚ΡŒ 1

Π§Π°ΡΡ‚ΡŒ 2

БоглашСния принятыС Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈ ΠΎΠ±Ρ‰ΠΈΠ΅ замСчания

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΎΠ±Π·ΠΎΡ€Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ².

ВСрсия Python: Π²ΠΎ всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ вСрсия языка программирования Python.

Установка всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΠΎΠ±Π·ΠΎΡ€Π΅ практичСски ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Π° ΠΈ сводится ΠΊ использованию ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° pip.

$ python3.6 -m pip install --upgrade <package_name>

НСкоторыС ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠΌΠ΅ΡŽΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² рСпозиториях дистрибутивов linux ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ установки с использованиСм git. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ для большСй опрСдСлСнности ΠΈ возмоТности повторСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ, установка Π±ΡƒΠ΄Π΅Ρ‚ производится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pip.

Об ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…: стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ говоря ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ Π² Π²ΠΈΠ΄Ρƒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ошибок. К ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ относятся ошибки стиля (Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ отступы, Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ строки), ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ β€” ошибки Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ошибки синтаксиса языка программирования (ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ ΠΏΡ€ΠΈ написании Π½Π°Π·Π²Π°Π½ΠΈΠΉ стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹, Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°). Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ ошибок, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” оставлСнныС Π² ΠΊΠΎΠ΄Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΈΠ»ΠΈ высокая цикломатичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

ВСстовый скрипт: для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΡ‹ создали ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΈΠΉ ΠΏΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ Ρ„Π°ΠΉΠ» example.py. ΠœΡ‹ ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ стали Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΡŽ Π² Π½Π΅ΠΌ ошибок. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ листингов с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ‚Π°ΠΊΠΎΠΌ случаС сильно β€œΡ€Π°Π·Π΄ΡƒΠ»ΠΎβ€ Π±Ρ‹ ΡΡ‚Π°Ρ‚ΡŒΡŽ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ρƒ нас Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ†Π΅Π»ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ различия Π² β€œΠΎΡ‚Π»ΠΎΠ²Π΅β€ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… ошибок для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡƒΡ‚ΠΈΠ»ΠΈΡ‚.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° example.py:

import os
import notexistmodule

def Function(num,num_two):
return num

class MyClass:
"""class MyClass """

def __init__(self,var):
self.var=var

def out(var):
print(var)


if __name__ == "__main__":
my_class = MyClass("var")
my_class.out("var")
notexistmodule.func(5)

Π’ ΠΊΠΎΠ΄Π΅ Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ нСсколько ошибок:

  • ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ модуля os,
  • ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ модуля notexistmodule,
  • имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ начинаСтся с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹,
  • лишниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,
  • отсутствиС self ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ класса,
  • Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Руководства ΠΏΠΎ стилям: для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ сталкиваСтся с Ρ‚Π΅ΠΌΠΎΠΉ оформлСния ΠΊΠΎΠ΄Π°, Π² качСствС знакомства ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ руководства ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ для языка Python PEP8 ΠΈ PEP257. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Π½ΡƒΡ‚Ρ€ΠΈΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… соглашСний ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Google Python Style Guide β€” https://github.com/google/styleguide/blob/gh-pages/pyguide.md

Pycodestyle

Pycodestyle β€” простая консольная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для анализа ΠΊΠΎΠ΄Π° Python, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° Π½Π° соотвСтствиС PEP8. Один ΠΈΠ· ΡΡ‚Π°Ρ€Π΅ΠΉΡˆΠΈΡ… Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ΄Π°, Π΄ΠΎ 2016 Π³ΠΎΠ΄Π° носил Π½Π°Π·Π²Π°Π½ΠΈΠ΅ pep8, Π½ΠΎ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ ΠΏΠΎ ΠΏΡ€ΠΎΡΡŒΠ±Π΅ создатСля языка Python Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россума.

Запустим ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° нашСм ΠΊΠΎΠ΄Π΅:

$ python3 -m pycodestyle example.py 
example.py:4:1: E302 expected 2 blank lines, found 1
example.py:4:17: E231 missing whitespace after ','
example.py:7:1: E302 expected 2 blank lines, found 1
example.py:10:22: E231 missing whitespace after ','
example.py:11:17: E225 missing whitespace around operator

Π›Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ строки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠΎ мнСнию Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Π΅ΡΡ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ соглашСний PEP8. Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° прост ΠΈ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

<имя Ρ„Π°ΠΉΠ»Π°>: <Π½ΠΎΠΌΠ΅Ρ€ строки> :<ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ символа>: <ΠΊΠΎΠ΄ ΠΈ короткая Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° ошибки>

ВозмоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ соглашСний ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹: Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ имСнования, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ сводится ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π»ΠΈΠ½Ρ‹ docstring. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСльзя Π½Π°Π·Π²Π°Ρ‚ΡŒ β€œΡΠΏΠ°Ρ€Ρ‚Π°Π½ΡΠΊΠΈΠΌβ€, ΠΎΠ½ позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… Π°Π½Π°Π»ΠΈΠ·Π°. Запуск с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ —statistics -qq Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ статистику ΠΏΠΎ ошибкам:

$ python3 -m pycodestyle --statistics -qq example.py 
1 E225 missing whitespace around operator
2 E231 missing whitespace after ','
2 E302 expected 2 blank lines, found 1

Π‘ΠΎΠ»Π΅Π΅ наглядный Π²Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ использовании ΠΊΠ»ΡŽΡ‡Π° —show-source. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сообщСния ΠΎΠ± ошибкС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° строка исходного ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится ошибка.

$ python3 -m pycodestyle --show-source example.py 
example.py:4:1: E302 expected 2 blank lines, found 1
def Function(num,num_two):
^
example.py:4:17: E231 missing whitespace after ','
def Function(num,num_two):
^
example.py:7:1: E302 expected 2 blank lines, found 1
class MyClass:
^
example.py:10:22: E231 missing whitespace after ','
def __init__(self,var):
^
example.py:11:17: E225 missing whitespace around operator
self.var=var
^

Если Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· соглашСний PEP8 Π±Ρ‹Π»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ — show-pep8. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ список всСх ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ с Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ ΠΈΠ· PEP8 для случаСв Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. Pycodestyle позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ настройки поиска Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΊΠ°ΠΊ глобально, Ρ‚Π°ΠΊ ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Pydocstyle

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρƒ pydocstyle ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π Π°Π±ΠΎΡ‚Π° с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ Π² Python: поиск ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ соглашСния. Pydocstyle провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ docstring Ρƒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, классов, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΡ… соотвСтствиС ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ соглашСнию PEP257.

$ python3 -m pydocstyle example.py
example.py:1 at module level:
D100: Missing docstring in public module
example.py:4 in public function `Function`:
D103: Missing docstring in public function
example.py:7 in public class `MyClass`:
D400: First line should end with a period (not 's')
example.py:7 in public class `MyClass`:
D210: No whitespaces allowed surrounding docstring text
example.py:10 in public method `__init__`:
D107: Missing docstring in __init__
example.py:13 in public method `out`:
D102: Missing docstring in public method

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΠ· листинга, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΠΊΠ°Π·Π°Π»Π° Π½Π°ΠΌ Π½Π° отсутствиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² опрСдСлСниях Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса ΠΈ ошибки оформлСния Π² docstring класса. Π’Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ —explain ΠΈ —source ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» pydocstyle практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ описанному Π²Ρ‹ΡˆΠ΅ для pycodestyle, различия ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ лишь Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

Pyflakes

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡƒΠΆΠ΅ рассмотрСнных инструмСнтов для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Python pyflakes Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ стиля. ЦСль этого Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π° β€” поиск логичСских ΠΈ синтаксичСских ошибок. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ pyflakes сдСлали ΡƒΠΏΠΎΡ€ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ простоту. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ данная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ провСряСмый Ρ„Π°ΠΉΠ», ΠΎΠ½Π° прСкрасно справляСтся c поиском синтаксичСских ошибок ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ это быстро. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сильно суТаСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ pyflakes β€” β€œΠ½ΡƒΠ»Π΅Π²Π°Ρβ€, всС Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΡƒΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ β€” это Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π°Π½Π°Π»ΠΈΠ·Π° Π² консоль:

$ python3 -m pyflakes example.py 
example.py:1: 'os' imported but unused

Π’ нашСм тСстовом скриптС, ΠΎΠ½ нашСл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ модуля os. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с запуском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π΅ΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Python Ρ„Π°ΠΉΠ»Π°, содСрТащСго синтаксичСскиС ошибки. Данная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±Π΅ вСрсии Python, Π²Π°ΠΌ придСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· вСрсий.

Pylint

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ рассматривали ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π»ΠΈΠ±ΠΎ стилистичСских, Π»ΠΈΠ±ΠΎ логичСских ошибок. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π² ΠΎΠ±Π·ΠΎΡ€Π΅ статичСский инструмСнт для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Python β€” Pylint, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совмСстил Π² сСбС ΠΎΠ±Π΅ возмоТности. Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ, Π³ΠΈΠ±ΠΊΠΎ настраиваСмый инструмСнт для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Python отличаСтся большим количСством ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ΠΌ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых β€œΠΏΡ€ΠΈΠ΄ΠΈΡ€Ρ‡ΠΈΠ²Ρ‹Ρ…β€ ΠΈ β€œΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½Ρ‹Ρ…β€ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ΄Π°. Анализ нашСго тСстового скрипта Π²Ρ‹Π΄Π°Π΅Ρ‚ вСсьма ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚, состоящий ΠΈΠ· списка Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π² Ρ…ΠΎΠ΄Π΅ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π΅Π΄ΠΎΡ‡Π΅Ρ‚ΠΎΠ², статистичСских ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ², прСдставлСнных Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†, ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΊΠΎΠ΄Π°:

$ python3.6 -m pylint --reports=y text example.py
************* Module text
/home/ququshka77/.local/lib/python3.6/site-packages/pylint/reporters/text.py:79:22: W0212: Access to a protected member _splitstrip of a client class (protected-access)
************* Module example
example.py:4:16: C0326: Exactly one space required after comma
def Function(num,num_two):
                           ^ (bad-whitespace)
example.py:10:21: C0326: Exactly one space required after comma
    def __init__(self,var):
                             ^ (bad-whitespace)
example.py:11:16: C0326: Exactly one space required around assignment
        self.var=var
                    ^ (bad-whitespace)
example.py:1:0: C0111: Missing module docstring (missing-docstring)
example.py:2:0: E0401: Unable to import 'notexistmodule' (import-error)
example.py:4:0: C0103: Function name "Function" doesn't conform to snake_case naming style (invalid-name)
example.py:4:0: C0111: Missing function docstring (missing-docstring)
example.py:4:17: W0613: Unused argument 'num_two' (unused-argument)
example.py:13:4: C0111: Missing method docstring (missing-docstring)
example.py:13:4: E0213: Method should have "self" as first argument (no-self-argument)
example.py:7:0: R0903: Too few public methods (1/2) (too-few-public-methods)
example.py:18:4: C0103: Constant name "my_class" doesn't conform to UPPER_CASE naming style (invalid-name)
example.py:19:4: E1121: Too many positional arguments for method call (too-many-function-args)
example.py:1:0: W0611: Unused import os (unused-import)

Report
======
112 statements analysed.

Statistics by type
+----------+----------+---------------+-------------+-------------------+---------------+
|type     |number      |old number        |difference      |%documented       |%badname |
+======+======+========+========+===========+========+
|module   |2           |2                 |=               |50.00             |0.00            |
+-----------+----------+---------------+-------------+-------------------+---------------+
|class    |5           |5                 |=               |100.00            |0.00            |
+-----------+----------+---------------+-------------+-------------------+---------------+
|method   |11          |11                |=               |90.91             |0.00            |
+-----------+----------+---------------+-------------+-------------------+---------------+
|function |4           |4                 |=               |75.00             |25.00          |
+-----------+----------+---------------+-------------+-------------------+---------------+

External dependencies
::
    pylint 
      \-interfaces (text)
      \-reporters (text)
      | \-ureports 
      |   \-text_writer (text)
      \-utils (text)


Raw metrics
+-------------+----------+-------+-----------+-------------+
|type        |number |%     |previous    |difference |
+=======+======+=====+=====+========+
|code        |128    |48.30 |128         |=               |
+-------------+----------+--------+-----------+------------+
|docstring   |84     |31.70 |84          |=               |
+-------------+----------+--------+-----------+------------+
|comment     |16     |6.04  |16          |=               |
+-------------+----------+--------+-----------+------------+
|empty       |37     |13.96 |37          |=               |
+-------------+----------+--------+-----------+------------+

Duplication
+-------------------------------+------+------------+-------------+
|                            |now      |previous      |difference |
+=================+=====+======+========+
|nb duplicated lines         |0        |0             |=              |
+-------------------------------+-------+------------+------------+
|percent duplicated lines    |0.000    |0.000         |=              |
+-------------------------------+-------+------------+------------+

Messages by category
+--------------+----------+-----------+-------------+
|type            |number |previous |difference |
+========+======+======+========+
|convention      |8       |8       |=               |
+--------------+----------+-----------+-------------+
|refactor        |1       |1       |=               |
+--------------+-----------+----------+-------------+
|warning         |3       |3       |=               |
+--------------+-----------+----------+-------------+
|error           |3       |3       |=               |
+--------------+-----------+----------+-------------+

% errors / warnings by module
+-----------+--------+-----------+----------+--------------+
|module   |error    |warning |refactor |convention   |
+======+=====+======+======+========+
|example  |100.00   |66.67   |100.00   |100.00       |
+-----------+---------+----------+-----------+-------------+
|text     |0.00     |33.33   |0.00     |0.00         |
+-----------+---------+----------+-----------+-------------+

Messages
+-----------------------------+----------------+
|message id                  |occurrences |
+=================+=========+
|missing-docstring           |3                 |
+-----------------------------+----------------+
|bad-whitespace              |3                 |
+------------------------------+---------------+
|invalid-name                |2                 |
+------------------------------+---------------+
|unused-import               |1                 |
+------------------------------+---------------+
|unused-argument             |1                 |
+------------------------------+---------------+
|too-many-function-args      |1                 | 
+------------------------------+---------------+
|too-few-public-methods      |1                 |
+------------------------------+---------------+
|protected-access            |1                 |
+------------------------------+---------------+
|no-self-argument            |1                 |
+------------------------------+---------------+
|import-error                |1                 |
+------------------------------+---------------+

------------------------------------------------------------------------------------------
Your code has been rated at 7.59/10 (previous run: 7.59/10, +0.00)

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ свою Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… мСст Π² ΠΊΠΎΠ΄Π΅:

[R]efactor β€” трСбуСтся Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³,
[C]onvention β€” Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΎ слСдованиС стилистикС ΠΈ соглашСниям,
[W]arning β€” ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ошибка,
[E]rror β€” ошибка,
[F]atal β€” ошибка, которая прСпятствуСт дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΌΡ‹ использовали ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки —reports=y.
Π‘ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Настройки ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ настроСк rcfile. ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ настроСк, для этого Π΅ΡΡ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ докумСнтация β€” https://pylint.readthedocs.io/en/latest/index.html#, остановимся лишь Π½Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсных, с нашСй Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, возмоТностях ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹:

β€” ГСнСрация Ρ„Π°ΠΉΠ»Π° настроСк (—generate-rcfile). ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с нуля. Π’ созданном rcfile содСрТатся всС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ настройки с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ коммСнтариями ΠΊ Π½ΠΈΠΌ, Π²Π°ΠΌ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ΄ собствСнныС трСбования.

β€” ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΊΠΎΠ΄Π΅. ΠŸΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄ сообщСний ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° example.py Π΄ΠΎΠ±Π°Π²ΠΈΠΌ строку:

# pylint: disable=unused-argument

ΠΈ запустим pylint. Из Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ β€œΠΈΡΡ‡Π΅Π·Π»ΠΎβ€ сообщСниС:

example.py:4:17: W0613: Unused argument 'num_two' (unused-argument)

β€” Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ json (—output-format=json). ПолСзно, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сохранСниС ΠΈΠ»ΠΈ дальнСйшая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π»ΠΈΠ½Ρ‚Π΅Ρ€Π°. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ….

β€” ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск (-j 4). Запуск Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… Π½Π° многоядСрных процСссорах сокращаСт врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

β€” ВстроСнная докумСнтация. Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ —help-msg=<key> Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ справку ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову key. Π’ качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ΄ сообщСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: E0401) ΠΈΠ»ΠΈ символичСскоС имя сообщСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: import-error). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ листинг получСния справки ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ import-error:

$ python3.6 -m pylint --help-msg=import-error
:import-error (E0401): *Unable to import %s*
Used when pylint has been unable to import a module. This message belongs to
the imports checker.

β€” БистСма ΠΎΡ†Π΅Π½ΠΊΠΈ сохраняСт послСдний Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… запусках ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ измСнСния, Ρ‡Ρ‚ΠΎ позволяСт количСствСнно ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ прогрСсс исправлСний.

β€” ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ β€” отличная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ pylint. Π˜Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π² случаях, ΠΊΠΎΠ³Π΄Π° pylint Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈ Π΅ΡΡ‚ΡŒ β€œΠ»ΠΎΠΆΠ½Ρ‹Π΅β€ срабатывания, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ стандартного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

Vulture

Vulture β€” нСбольшая ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для поиска β€œΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎβ€ ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Python. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ast стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ создаСт абстрактныС синтаксичСскиС Π΄Π΅Ρ€Π΅Π²ΡŒΡ для всСх Ρ„Π°ΠΉΠ»ΠΎΠ² исходного ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π”Π°Π»Π΅Π΅ осущСствляСтся поиск всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Vulture ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для очистки ΠΈ нахоТдСния ошибок Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ΄Π°Ρ….

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ слСдуСт

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎΠ± инструмСнтах для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Python. Π‘ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ собой Π½Π°Π±ΠΎΡ€Ρ‹ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ посмотрим, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для автоматичСского форматирования ΠΊΠΎΠ΄Π°.

Π•Ρ‰Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ Python

10 ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π° Π½Π° Python / Π₯Π°Π±Ρ€

Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ свой Python ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅

Python – язык программирования ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… вычислСниях, искусствСнном ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π΅, Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, финансовом ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… областях. Основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π΅Π³ΠΎ популярности Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² гибкости – Π΅ΡΡ‚ΡŒ мноТСство Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Однако, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π΅ΡΡ‚ΡŒ всСго лишь ΠΎΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ считаСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ срСди ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Python программистов. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Π·ΠΎΡ€ 10 Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Ρ… для этого языка практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΈ Π²Π·ΡΡ‚ΡŒ Π½Π° Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π° Π½Π° Python.

1. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.: абстракции) списков, словарСй ΠΈ мноТСств

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… измСняСмых (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.: ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹Ρ…) ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² Python: списки, словари ΠΈ мноТСства. Если Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ†ΠΈΠΊΠ»ΠΎΠΌ for, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для создания Π½Π° Π΅Π³ΠΎ основС Π½ΠΎΠ²ΠΎΠ³ΠΎ списка. Однако Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ списка, синтаксис ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: [Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ for x in ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ if условиС]. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ с вычисляСмым условиСм Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

>>> # НачнСм с создания списка чисСл
>>> numbers = list(range(5))
>>> print(numbers)
[0, 1, 2, 3, 4]
>>> 
>>> # ВмСсто этого:
>>> squares0 = []
>>> for number in numbers:
...     if number%2 == 0:
...         squares0.append(number*number)
... 
>>> print(squares0)
[0, 4, 16]
>>> 
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> squares1 = [x*x for x in numbers if x%2 == 0]
>>> print(squares1)
[0, 4, 16]

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ списка

Помимо Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ списка ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для словарСй ΠΈ мноТСств, Ρ‡Ρ‚ΠΎ соотвСтствуСт Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌ Β«Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ словаря» ΠΈ Β«Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ мноТСства». Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ словаря ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синтаксис: {Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅_ΠΊΠ»ΡŽΡ‡Π°: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅_значСния for элСмСнт in ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚}, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ синтаксис Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ мноТСства – {Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ for элСмСнт in ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚}. Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ дСмонстрируСт ΠΈΡ… использованиС:

>>> # Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ словаря
>>> {x: x*x for x in range(5)}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
>>> 
>>> # Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ мноТСства
>>> {x*x for x in range(5)}
{0, 1, 4, 9, 16}

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ словаря ΠΈ мноТСства

2. F-строки

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ – ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв для отобраТСния строковых Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…. МоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² стилС языка C, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ использованиС символа %, Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ format, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ строки Π² Python.

Однако Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½Π΅Π΄Π°Π²Π½ΠΈΡ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² Python Π±Ρ‹Π» прСдставлСн Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ форматирования строк. Он извСстСн ΠΊΠ°ΠΊ Β«f-строки», Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹Β» – Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ форматирования строк. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° сравнСниС этих Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ

>>> # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ коэффициСнт ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ
>>> usd_to_eur = 0.89
>>> 
>>> # ВмСсто этого:
>>> print('1 USD = {rate:.2f} EUR'.format(rate=usd_to_eur))
1 USD = 0.89 EUR
>>> print('1 USD = %.2f EUR' % usd_to_eur)
1 USD = 0.89 EUR
>>> 
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> print(f'1 USD = {usd_to_eur:.2f} EUR')
1 USD = 0.89 EUR

F-строки

ЕстСствСнно, Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ основы использования f-строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² сущности Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всС стили форматирования, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² стилС C ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ str.format. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ большС ΠΎ f-строках Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π² ΠΌΠΎΠ΅ΠΉ Π½Π΅Π΄Π°Π²Π½Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

3. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ присваиваниС ΠΈ распаковка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ строкС – ΡƒΡΡ‚ΠΎΡΠ²ΡˆΠ°ΡΡΡ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Однако ΠΏΡ€ΠΈ объявлСнии Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π° ΠΎΠ΄Π½ΠΎΠΉ строкС. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ допускаСтся ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны ΠΏΠΎ смыслу. Если ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, Ρ‚ΠΎ я Π±Ρ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… мноТСствСнноС присваиваниС. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³:

>>> # ВмСсто этого:
>>> code = 404
>>> message = "Not Found"
>>> 
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> code, message = 404, "Not Found"

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ присваиваниС

Π—Π° кулисами мноТСствСнноС присваиваниС прСдусматриваСт созданиС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с ΠΏΡ€Π°Π²ΠΎΠΉ стороны ΠΈ Π΅Π³ΠΎ распаковку с Π»Π΅Π²ΠΎΠΉ стороны. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, это Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ мноТСствСнноС присваиваниС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ.

>>> # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΈ распаковываСм ΠΊΠΎΡ€Ρ‚Π΅ΠΆ
>>> http_response = (404, "Not Found")
>>> code, message = http_response
>>> print(f'code: {code}; message: {message}')
code: 404; message: Not Found

Распаковка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°

4. Распаковка с Π»ΠΎΠ²ΡƒΡˆΠΊΠ°ΠΌΠΈ

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрСли, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ – количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соотвСтствовало количСству элСмСнтов ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Однако, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ Π΅ΡΡ‚ΡŒ нСсколько элСмСнтов, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.: Π°Π½Π³Π». catch-all method – ΠΏΠΎΠ΄ Π»ΠΎΠ²ΡƒΡˆΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с прСфиксом-Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΎΠΉ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ/Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство элСмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΈ Π΅Π³ΠΎ распаковкС, Ρ‚. Π΅. это Π½Π΅ общСпринятый Ρ‚Π΅Ρ€ΠΌΠΈΠ½, Ρ‚. ΠΊ. общСпринятого Π½Π΅ нашСл, Π½ΠΎ это Π»ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π½Π° ΡƒΠΌ). А ΠΈΠΌΠ΅Π½Π½ΠΎ – всС элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ явно Π½Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с прСфиксом-Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΎΠΉ. Для получСния Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π½Π΅Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ использованиС срСзов, Ρ‡Ρ‚ΠΎ Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ ошибками, Ссли ΠΌΡ‹ Π·Π°Π΄Π°Π΄ΠΈΠΌ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ индСксы.

>>> # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ для распаковки
>>> numbers = tuple(range(8))
>>> numbers
(0, 1, 2, 3, 4, 5, 6, 7)
>>> 
>>> # ВмСсто этого:
>>> first_number0 = numbers[0]
>>> middle_numbers0 = numbers[1:-1]
>>> last_number0 = numbers[-1]
>>> 
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> first_number1, *middle_numbers1, last_number1 = numbers
>>> 
>>> # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹
>>> print(first_number0 == first_number1)
True
>>> print(middle_numbers0 == middle_numbers1)
False
>>> print(last_number0 == last_number1)
True

Распаковка с Π»ΠΎΠ²ΡƒΡˆΠΊΠ°ΠΌΠΈ

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, значСния middle_numbers0 ΠΈ middle_numbers1 Π½Π΅ Ρ€Π°Π²Π½Ρ‹. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ распаковка с Π»ΠΎΠ²ΡƒΡˆΠΊΠ°ΠΌΠΈ (с использованиСм Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΈ) ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ списка. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ распакованных Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π±Ρ‹Π» Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструктор ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

>>> # ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ распакованный список Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ
>>> print(middle_numbers0 == tuple(middle_numbers1))
True

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ

5. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания

Π’ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ присваивания, Π±ΠΎΠ»Π΅Π΅ извСстном ΠΊΠ°ΠΊ Β«ΠΌΠΎΡ€ΠΆΠΎΠ²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Β«ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-ΠΌΠΎΡ€ΠΆΒ» :=, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΌΠΎΡ€ΠΆΠ° с ΠΏΠ°Ρ€ΠΎΠΉ Π³Π»Π°Π· ΠΈ бивнями, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? Как понятно ΠΈΠ· Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания позволяСт ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ, Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано Π² качСствС выраТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΌ, ΠΊΠ°ΠΊ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π²ΡƒΡ‡ΠΈΡ‚ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎ, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π΅Π³ΠΎ использованиС Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π°:

>>> # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
>>> def get_account(social_security_number):
...     pass
... 
>>> def withdraw_money(account_number):
...     pass
... 
>>> def found_no_account():
...     pass
... 
>>> # ВмСсто этого:
>>> account_number = get_account("123-45-6789")
>>> if account_number:
...     withdraw_money(account_number)
... else:
...     found_no_account()
... 
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> if account_number := get_account("123-45-6789"):
...     withdraw_money(account_number)
... else:
...     found_no_account()

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания

Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания, Π½Π°ΠΌ приходится сначала ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ счСта, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ снятия Π΄Π΅Π½Π΅Π³ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.: функция withdraw_money), Ρ‡Ρ‚ΠΎ создаСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этому, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выраТСния присваивания, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ присваиваСт Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Сю Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя вычисляСтся.

НСкоторыС Π±Ρ‹ стали ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ экономия ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π° Π½Π΅ Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½Π°, Π½ΠΎ это Π΄Π΅Π»Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ явным нашС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ – пСрСмСнная account_number Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² области видимости условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ программирования Π½Π° Swift, Ρ‚ΠΎ использованиС выраТСния присваивания Π² условном ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ связывания (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.: ΠΈΠ»ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΈΠ½Π΄ΠΈΠ½Π³), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. По сути врСмСнная пСрСмСнная accountNumber, Ссли ΠΎΠ½Π° содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΈΠ΄ΡƒΡ‰Π΅ΠΉ Π΄Π°Π»Π΅Π΅ области видимости. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π°ΠΌ слСдуСт ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ присваивания, ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

if let accountNumber = getAccount("123-45-6789") {
    withdrawMoney(accountNumber)
} else {
    foundNoAccount()
}

ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ связываниС

6. Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ enumerate

ΠŸΠΎΡ‡Ρ‚ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π°ΠΌ Π½Π΅ΠΌΠΈΠ½ΡƒΠ΅ΠΌΠΎ приходится Π·Π°ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для всСх элСмСнтов Π² спискС, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния этих ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ: for элСмСнт in ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Однако, ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ подсчСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°, Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ enumerate, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для нас счСтчик. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика.

>>> # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ список студСнтов для итСрирования
>>> students = ['John', 'Jack', 'Jennifer', 'June']
>>> 
>>> # ВмСсто этого:
>>> for i in range(len(students)):
...     student = students[i]
...     print(f"# {i+1}: {student}")
... 
# 1: John
# 2: Jack
# 3: Jennifer
# 4: June
>>>
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> for i, student in enumerate(students, 1):
...     print(f"# {i}: {student}")
... 
# 1: John
# 2: Jack
# 3: Jennifer
# 4: June

Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enumerate

7. БвязываниС ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ zip/zip_longest

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ эти Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Ρ‹ элСмСнтов. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ обращСния ΠΏΠΎ индСксу, извлСкая элСмСнты ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΈΡ… для формирования словаря. Однако, Π² Python Π΅ΡΡ‚ΡŒ встроСнная функция zip, которая Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ. Π’ сущности, функция zip ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любоС количСство ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ создаСт ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄Π»ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° списка ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ zip
>>> students = ['John', 'Mike', 'Sam', 'David', 'Danny']
>>> grades = [95, 90, 98, 97]
>>> 
>>> # ВмСсто этого:
>>> grade_tracking0 = {}
>>> for i in range(min(len(students), len(grades))):
...     grade_tracking0[students[i]] = grades[i]
... 
>>> print(grade_tracking0)
{'John': 95, 'Mike': 90, 'Sam': 98, 'David': 97}
>>> 
>>> # ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ:
>>> grade_tracking1 = dict(zip(students, grades))
>>> print(grade_tracking1)
{'John': 95, 'Mike': 90, 'Sam': 98, 'David': 97}
>>>
>>> from itertools import zip_longest
>>> grade_tracking2 = dict(zip_longest(students, grades))
>>> print(grade_tracking2)
{'John': 95, 'Mike': 90, 'Sam': 98, 'David': 97, 'Danny': None}

ИспользованиС zip с ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ

Ѐункция zip создаСт ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса zip, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ прСдставляСт собой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, состоящий ΠΈΠ· элСмСнтов ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π•Ρ‰Π΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ функция zip остановится, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ закончатся элСмСнты. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этому, функция zip_longest Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСимущСство конструктора dict, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса dict. Помимо прСдставлСнного Π²Ρ‹ΡˆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса zip ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΊΠ°ΠΊ это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

>>> for student, grade in zip(students, grades):
...     print(f"{student}: {grade}")
... 
John: 95
Mike: 90
Sam: 98
David: 97

Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ zip

8. ΠšΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.: сцСплСниС) ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ использовали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ zip для поэлСмСнтного объСдинСния ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²? ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ для выполнСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ chain. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Π΅ использования:

>>> # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
>>> from itertools import chain
>>> group0 = ['Jack', 'John', 'David']
>>> group1 = ['Ann', 'Bill', 'Cathy']
>>> 
>>> def present_project(student):
...     pass
... 
>>> # ВмСсто этого:
>>> for group in [group0, group1]:
...     for student in group:
...         present_project(student)
... 
>>> for student in group0 + group1:
...     present_project(student)
... 
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> for student in chain(group0, group1):
...     present_project(student)

Π‘Ρ†Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅, Π½Π΅Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ создания Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… списков β€” Π½Π΅ самый эффСктивный с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния памяти ΠΏΡƒΡ‚ΡŒ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ этого, функция chain создаСт ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Ρ‚Π΅Ρ… ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, функция chain гибкая ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ любого Ρ‚ΠΈΠΏΠ°: словари, мноТСства, списки, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов zip ΠΈ map (посрСдством использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ map), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Python.

9. Π’Π΅Ρ€Π½Π°Ρ€Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π§Ρ‚ΠΎ Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° основС условия Π±Ρ‹Π»ΠΈ присвоСны Ρ€Π°Π·Π½Ρ‹Π΅ значСния? Π’ этом случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ условиС ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ использовано для присваивания. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ нСсколько строк ΠΊΠΎΠ΄Π°. Однако, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этой Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ€Π½Π°Ρ€Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго лишь ΠΎΠ΄Π½Ρƒ строку ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ основным синтаксисом: var = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅_Π²_случаС_true if условиС else Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅_Π²_случаС_false. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

>>> # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
>>> from random import randint
>>> def got_even_number():
...     return randint(1, 10) % 2 == 0
... 
>>> # ВмСсто этого: 
>>> if got_even_number():
...     state = "Even"
... else:
...     state = "Odd"
... 
>>> state = "Odd"
>>> if got_even_number():
...     state = "Even"
... 
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> state = "Even" if got_even_number() else "Odd"

Π’Π΅Ρ€Π½Π°Ρ€Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

10. ИспользованиС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΠ° Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ Π² Python, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ Ρ‚Π°ΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования. Π­Ρ‚ΠΎ Π»ΠΎΠ²ΠΊΠΈΠΉ Ρ‚Ρ€ΡŽΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· нСобходимости ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ создания ΠΏΠΎΡ‚ΠΎΠΊΠ°. ВмСсто этого Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ прСдоставляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΎΠ± этом попросят, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ эффСктивно ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ использованию памяти.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнтарный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ½Π½Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅. ВСорСтичСски, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ вСсь Ρ„Π°ΠΉΠ» Π² список ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Π΄Π°Π½Π½Ρ‹Ρ… Π² спискС. Однако, Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ваш ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ израсходуСт всю ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ссли Ρ„Π°ΠΉΠ» нСвСроятно большой. ВмСсто этого Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ – ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ строку Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запросС.

>>> # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
>>> def process_data(row_data):
...     pass
... 
>>> # ВмСсто этого:
>>> with open('large_file') as file:
...     read_data = file.read().split("\n")
...     for row_data in read_data:
...         process_data(row_data)
...
>>> # Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ:
>>> with open('large_file') as file:
...     for row_data in file:
...         process_data(row_data)

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…, СстСствСнных для Python способов осущСствлСния Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π²Π΅Ρ‰Π΅ΠΉ Π² Python, ΠΈ Ρ‚Π΅ΠΌΡ‹, Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ – лишь Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я счСл ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π² своих повсСднСвных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. НадСюсь, ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° Python ΠΈ Π²Π°ΠΌ. Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ совСт – Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ своСго ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ для Python ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.: ΠΈΠ΄ΠΈΠΎΠΌΡ‹), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΅Ρ‰Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивныС с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° своСго ΠΊΠΎΠ΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ постСпСнно ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ свои Π½Π°Π²Ρ‹ΠΊΠΈ программирования Π½Π° Python.

Бпасибо Π·Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ этого ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΈ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ программирования.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ctypes / Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ OTUS. Онлайн-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ / Π₯Π°Π±Ρ€

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для студСнтов курса Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ PythonΒ».


Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠΎΠ΄ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ GNU AGPLv3.

Π― написал это руководство, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π² сСбС всС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΎ ctypes. НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ сдСлаСт Ρ‡ΡŒΡŽ-Ρ‚ΠΎ Тизнь Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅.

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

  1. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
  2. сtypes
  3. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΠΎΠ΄ Python
  4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π² Python
  5. Π’Ρ‹Π·ΠΎΠ² вашСго ΠΊΠΎΠ΄Π° Π½Π° Π‘
  6. PyPy

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΠ΅Ρ€Π΅Π΄ пСрСписываниСм исходного ΠΊΠΎΠ΄Π° Python Π½Π° Π‘, рассмотрим Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Python.

ВстроСнныС структуры Π΄Π°Π½Π½Ρ‹Ρ…

ВстроСнныС структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² Python, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ set ΠΈ dict, написаны Π½Π° Π‘. Они Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ ваши собствСнныС структуры Π΄Π°Π½Π½Ρ‹Ρ…, написанныС ΠΊΠ°ΠΊ классы Python. Π”Ρ€ΡƒΠ³ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΌΠΈΠΌΠΎ стандартных set, dict, list ΠΈ tuple описаны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ модуля collections.

БписочныС выраТСния

ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты ΠΊ списку стандартным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ списочными выраТСниями.

# Slow
      mapped = []
      for value in originallist:
          mapped.append(myfunc(value))
      
      # Faster
      mapped = [myfunc(value) in originallist]

ctypes

ΠœΠΎΠ΄ΡƒΠ»ΡŒ ctypes позволяСт Π²Π°ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° Π‘ ΠΈΠ· Python Π±Π΅Π· использования модуля subprocess ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ модуля для запуска Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов ΠΈΠ· CLI.

Π’ΡƒΡ‚ всСго Π΄Π²Π΅ части: компиляция ΠΊΠΎΠ΄Π° Π½Π° Π‘ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² качСствС shared object ΠΈ настройка структур Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ΄Π΅ Π½Π° Python для сопоставлСния ΠΈΡ… с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π‘.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π±ΡƒΠ΄Ρƒ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ свой ΠΊΠΎΠ΄ Π½Π° Python с lcs.c, которая Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΡΠ°ΠΌΡƒΡŽ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π΄Π²ΡƒΡ… списках строк. Π― Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Python Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

list1 = ['My', 'name', 'is', 'Sam', 'Stevens', '!']
      list2 = ['My', 'name', 'is', 'Alex', 'Stevens', '.']
      
      common = lcs(list1, list2)
      
      print(common)
      # ['My', 'name', 'is', 'Stevens']

Одна ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эта конкрСтная функция Π½Π° Π‘ β€” это сигнатура Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ списки строк Π² качСствС Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ фиксированной Π΄Π»ΠΈΠ½Ρ‹. Π― Ρ€Π΅ΡˆΠ°ΡŽ эту Π·Π°Π΄Π°Ρ‡Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ структуры ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, содСрТащСй ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ Π΄Π»ΠΈΠ½Ρƒ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° Π‘ ΠΏΠΎΠ΄ Python

Π‘Π½Π°Ρ‡Π°Π»Π°, исходный ΠΊΠΎΠ΄ Π½Π° Π‘ (lcs.c) компилируСтся Π² lcs.so, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² Python.

gcc -c -Wall -Werror -fpic -O3 lcs.c -o lcs.o
      gcc -shared -o lcs.so lcs.o

  • Wall ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ всС прСдупрСТдСния;
  • Werror ΠΎΠ±Π΅Ρ€Π½Π΅Ρ‚ всС прСдупрСТдСния Π² ошибки;
  • fpic сгСнСрируСт нСзависимыС ΠΎΡ‚ полоТСния инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ понадобятся, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² Python;
  • O3 максимизируСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ;

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» shared object.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π² Python

НиТС прСдставлСны Π΄Π²Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π½Π° Π‘.

struct Sequence
      {
          char **items;
          int length;
      };
      
      struct Cell
      {
          int index;
          int length;
          struct Cell *prev;
      };

А Π²ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ этих структур Π½Π° Python.

import ctypes
      class SEQUENCE(ctypes.Structure):
          _fields_ = [('items', ctypes.POINTER(ctypes.c_char_p)),
                      ('length', ctypes.c_int)]
      
      class CELL(ctypes.Structure):
          pass
      
      CELL._fields_ = [('index', ctypes.c_int), ('length', ctypes.c_int),
                       ('prev', ctypes.POINTER(CELL))]

НСсколько Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ:

  • ВсС структуры – это классы, наслСдуСмыС ΠΎΡ‚ ctypes.Structure.
  • ЕдинствСнноС ΠΏΠΎΠ»Π΅ _fields_ прСдставляСт ΠΈΠ· сСбя список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ это (<variable-name>, <ctypes.TYPE>).
  • Π’ ctypes Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ c_char (char) ΠΈ c_char_p (*char).
  • Π’ ctypes Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ POINTER(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ.
  • Если Ρƒ вас Π΅ΡΡ‚ΡŒ рСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π² CELL, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ объявлСниС, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ поля _fields_, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° сСбя ΠΆΠ΅.
  • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я Π½Π΅ использовал CELL Π² своСм ΠΊΠΎΠ΄Π΅ Π½Π° Python, ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ эту структуру, Π½ΠΎ Ρƒ Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ интСрСсноС свойство Π² рСкурсивном ΠΏΠΎΠ»Π΅.

Π’Ρ‹Π·ΠΎΠ² вашСго ΠΊΠΎΠ΄Π° Π½Π° Π‘

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½ Π±Ρ‹Π» ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠ΄ для прСобразования Ρ‚ΠΈΠΏΠΎΠ² Python Π² Π½ΠΎΠ²Ρ‹Π΅ структуры Π½Π° Π‘. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свою Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° Π‘, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠ΄Π° Π½Π° Python.

def list_to_SEQUENCE(strlist: List[str]) -> SEQUENCE:
          bytelist = [bytes(s, 'utf-8') for s in strlist]
          arr = (ctypes.c_char_p * len(bytelist))()
          arr[:] = bytelist
          return SEQUENCE(arr, len(bytelist))
      
      
      def lcs(s1: List[str], s2: List[str]) -> List[str]:
          seq1 = list_to_SEQUENCE(s1)
          seq2 = list_to_SEQUENCE(s2)
      
          # struct Sequence *lcs(struct Sequence *s1, struct Sequence *s2)
          common = lcsmodule.lcs(ctypes.byref(seq1), ctypes.byref(seq2))[0]
      
          ret = []
      
          for i in range(common.length):
              ret.append(common.items[i].decode('utf-8'))
          lcsmodule.freeSequence(common)
      
          return ret
      
      lcsmodule = ctypes.cdll.LoadLibrary('lcsmodule/lcs.so')
      lcsmodule.lcs.restype = ctypes.POINTER(SEQUENCE)
      
      list1 = ['My', 'name', 'is', 'Sam', 'Stevens', '!']
      list2 = ['My', 'name', 'is', 'Alex', 'Stevens', '.']
      
      common = lcs(list1, list2)
      
      print(common)
      # ['My', 'name', 'is', 'Stevens']

НСмного Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ:

  • **char (список строк) ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ сопоставлСниС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² список Π±Π°ΠΉΡ‚ Π² Python.
  • Π’ lcs.c Π΅ΡΡ‚ΡŒ функция lcs() с сигнатурой struct Sequence *lcs(struct Sequence *s1, struct Sequence *s2). Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ lcsmodule.lcs.restype = ctypes.POINTER(SEQUENCE).
  • Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² с ссылкой Π½Π° структуру Sequence, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ctypes.byref(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Β«Π»Π΅Π³ΠΊΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΒ» Π½Π° ваш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (быстрСС, Ρ‡Π΅ΠΌ ctypes.POINTER()).
  • common.items – это список Π±Π°ΠΉΡ‚, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для получСния ret Π² Π²ΠΈΠ΄Π΅ списка str.
  • lcsmodule.freeSequence(common) просто освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с common. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сборчик мусора (AFAIK) Π΅Π³ΠΎ Π½Π΅ собСрСт автоматичСски.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° Python – это ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ написали Π½Π° Π‘ ΠΈ ΠΎΠ±Π΅Ρ€Π½ΡƒΠ»ΠΈ Π² Python.

КоС-Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅: PyPy

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π‘Π°ΠΌ я Π½ΠΈΠΊΠΎΠ³Π΄Π° PyPy Π½Π΅ пользовался.
Одна ΠΈΠ· самых простых ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² запускС Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² срСдС выполнСния PyPy, которая содСрТит Π² сСбС JIT-компилятор (just-in-time), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ускоряСт Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ†ΠΈΠΊΠ»ΠΎΠ², компилируя ΠΈΡ… Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ.

Если Ρƒ вас появятся ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΠ»ΠΈ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ ([email protected]).

На этом всС. Π”ΠΎ встрСчи Π½Π° курсС!

🐍 4 ошибки Π² ΠΊΠΎΠ΄Π΅ Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π΄Π°ΡŽΡ‚ Π² вас Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°

ΠŸΡ€ΠΈΠ²Π΅Ρ‚! МСня Π·ΠΎΠ²ΡƒΡ‚ Маша, я ΡƒΠΆΠ΅ ΡˆΠ΅ΡΡ‚ΡŒ Π»Π΅Ρ‚ занимаюсь коммСрчСской Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π½Π° Python, Π° Π΅Ρ‰Ρ‘ ΠΏΠΈΡˆΡƒ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ объясняю Ρ‚Π΅ΠΎΡ€ΠΈΡŽ для студСнтов курса «Мидл Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΒ» ΠΎΡ‚ ЯндСкс.ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠΌΠ°. По ΠΎΠΏΡ‹Ρ‚Ρƒ знаю, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‡Π°Ρ‰Π΅ всСго Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Π΅Ρ‚ синтаксис языка, Π½ΠΎ Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° разбираСтся с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Python Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ».

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ программист-Π΄ΠΆΡƒΠ½ΠΈΠΎΡ€ допускаСт Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ ошибки: Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, Π΅Π³ΠΎ ΠΊΠΎΠ΄ написан идСально, Π½ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Π—Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΡ… Π½Π΅Π΄ΠΎΡ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Π½ΠΈΠ΅ нюансов Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сСгодня я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ, ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΡƒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

1. ΠŸΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° измСняСмыС Ρ‚ΠΈΠΏΡ‹ Π² значСниях ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Π£ Python Π΅ΡΡ‚ΡŒ прСкрасная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

        def pow(number, mod=2):
    pass

    

Или Ρ‚Π°ΠΊ:

        class Cat:
    legs = 4

    

И Π²Π°ΠΌ Π½Π΅ придётся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ возвСсти число (ΠΏΠΎΠΊΠ° эта ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ – 2), ΠΈΠ»ΠΈ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ количСство Π½ΠΎΠ³ Ρƒ вашСго ΠΊΠΎΡ‚Π°.

Π’ Ρ‡Ρ‘ΠΌ ΠΏΠΎΠ΄Π²ΠΎΡ…? ЗначСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с нСизмСняСмыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ – строками, числами, frozen-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ boolean-Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Если ΠΆΠ΅ Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π² качСствС значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, list, set ΠΈΠ»ΠΈ dict , Ρ‚ΠΎ Python Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΡƒΠ³Π°Ρ‚ΡŒΡΡ, Π½ΠΎ прСподнСсёт Π²Π°ΠΌ нСприятный ΡΡŽΡ€ΠΏΡ€ΠΈΠ·. Π’ΠΎΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²: ΠΊΠΎΡ‚Π° Π·Π°Π²ΠΎΠ΄ΠΈΠ»ΠΈ Π΄ΠΎΠΌΠ°, Π° ΠΎΠ½ посСлился Π΅Ρ‰Ρ‘ ΠΈ Π² офисС:

        class House:
    cats = []

my_house = House()
office = House()

my_house.cats.append('Tom')

print(my_house.cats)  # ["Tom"]
print(office.cats)  # ["Tom"]

    

Π§Π΅ΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ класс, выполнятся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π£ всСх экзСмпляров класса House Π±ΡƒΠ΄Π΅Ρ‚ ссылка Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив – cats.

Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ: Ссли Π²Ρ‹ создали всСго ΠΎΠ΄ΠΈΠ½ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ, скорСС всСго, Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Но ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ с Π½Π΅ΠΉ ΠΏΠΎΠ·ΠΆΠ΅.

Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? ΠŸΡ€ΠΈΠ²Ρ‹ΠΊΠ°ΠΉΡ‚Π΅ вмСсто Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ None:

        class House:
    cats: list = None
    
    def __init__(self):
        self.cats = []

my_house = House()
office = House()

my_house.cats.append('Tom')

print(my_house.cats)  # ["Tom"]
print(office.cats)  # []

    

Π’ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΈ всС ΠΊΠΎΡ‚Ρ‹ останутся Π½Π° своих мСстах!

2. Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠΌΠ°Π³ΠΈΠ΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ – с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ установили Π΄ΠΎΠΌΠ° ΡƒΠΌΠ½ΡƒΡŽ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ ΠΈ настроили Π΅Ρ‘ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° записывала дСйствия всСх, ΠΊΡ‚ΠΎ появляСтся Π² Π΅Ρ‘ ΠΏΠΎΠ»Π΅ зрСния, Π² тСкстовый Ρ„Π°ΠΉΠ». Π’Π°ΡˆΠ° функция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

        from datetime import datetime

def create_log_entry(user, action, time=datetime.now()):
    return f'{time}: {user} {action}'

    

ПослС этого Π²Ρ‹, спокойныС ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ собой, ΡƒΡˆΠ»ΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π’ Ρ‡Ρ‘ΠΌ ΠΏΠΎΠ΄Π²ΠΎΡ…? Π’Π΅Ρ€Π½ΡƒΠ²ΡˆΠΈΡΡŒ Π΄ΠΎΠΌΠΎΠΉ, Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ записалось ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ событиС, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Ρ‚Ρ‹ ΠΈ описания. ОТиданиС:

        create_log_entry('Алла', 'Π²Ρ‹ΡˆΠ»Π° ΠΈΠ· Π΄ΠΎΠΌΠ°')
'2020-09-14 15:20:03.333333: Алла Π²Ρ‹ΡˆΠ»Π° ΠΈΠ· Π΄ΠΎΠΌΠ°'
create_log_entry('Π’ΠΎΠΌ', 'ΠΏΠΎΠΉΠΌΠ°Π» ΠΌΡ‹ΡˆΡŒ')
'2020-09-14 15:25:12.795328: Π’ΠΎΠΌ ΠΏΠΎΠΉΠΌΠ°Π» ΠΌΡ‹ΡˆΡŒ'
create_log_entry('АдорианСц', 'Π·Π°Π²Π°Ρ€ΠΈΠ» ΠΊΠΎΡ„Π΅')
'2020-09-14 15:40:33.173500: АдорианСц Π·Π°Π²Π°Ρ€ΠΈΠ» ΠΊΠΎΡ„Π΅'
create_log_entry('АгСнт КСй', 'ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» Π½Π΅ΠΉΡ€Π°Π»Π°ΠΉΠ·Π΅Ρ€')
'2020-09-14 15:41:48.922357: АгСнт КСй ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» Π½Π΅ΠΉΡ€Π°Π»Π°ΠΉΠ·Π΅Ρ€'

    

Π Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ – всС события ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя:

        create_log_entry('Алла', 'Π²Ρ‹ΡˆΠ»Π° ΠΈΠ· Π΄ΠΎΠΌΠ°')
'2020-09-14 15:20:00.333333: Алла Π²Ρ‹ΡˆΠ»Π° ΠΈΠ· Π΄ΠΎΠΌΠ°'
create_log_entry('Π’ΠΎΠΌ', 'ΠΏΠΎΠΉΠΌΠ°Π» ΠΌΡ‹ΡˆΡŒ')
'2020-09-14 15:20:00.333333: Π’ΠΎΠΌ ΠΏΠΎΠΉΠΌΠ°Π» ΠΌΡ‹ΡˆΡŒ'
create_log_entry('АдорианСц', 'Π·Π°Π²Π°Ρ€ΠΈΠ» ΠΊΠΎΡ„Π΅')
'2020-09-14 15:20:00.333333: АдорианСц Π·Π°Π²Π°Ρ€ΠΈΠ» ΠΊΠΎΡ„Π΅'
create_log_entry('АгСнт КСй', 'ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» Π½Π΅ΠΉΡ€Π°Π»Π°ΠΉΠ·Π΅Ρ€')
'2020-09-14 15:20:00.333333: АгСнт КСй ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» Π½Π΅ΠΉΡ€Π°Π»Π°ΠΉΠ·Π΅Ρ€'

    

Π§Π΅ΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ datetime.now сработал всСго ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· – Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ встрСтил объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ конструкциСй def create_log_entry. Python Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ», какая Π΄Π°Ρ‚Π° ΠΈ врСмя Π±Ρ‹Π»ΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ постоянно использовал это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Как Π΅Ρ‘ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ? Π§Ρ‚ΠΎΠ±Ρ‹ врСмя Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΠ»ΠΎΡΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΡƒΠΆΠ½ΠΎ пСрСнСсти вычислСния Π² Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

        from datetime import datetime

def create_log_entry(user, action, time=None):
    time = datetime.now() if time is None else time
    return f'{time}: {user} {action}'

    

Π’Π°ΠΊ Π²Ρ‹ всё-Ρ‚Π°ΠΊΠΈ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Π²ΠΎ сколько Π’ΠΎΠΌ ΠΈ АдорианСц ΠΏΠΈΠ»ΠΈ ΠΊΠΎΡ„Π΅ ΠΈ ΠΊΠΎΠ³Π΄Π° Π°Π³Π΅Π½Ρ‚ КСй ворвался ΠΊ Π²Π°ΠΌ Π΄ΠΎΠΌΠΎΠΉ со своим Π½Π΅ΠΉΡ€Π°Π»Π°ΠΉΠ·Π΅Ρ€ΠΎΠΌ.

3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ int ΠΈ bool ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ΠΈ dict

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ простой ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ языка Π½Π° чСловСчСский для своСго ΡƒΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ°. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ True ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΎΡΡŒ ΠΊΠ°ΠΊ Β«ΠŸΡ€Π°Π²Π΄Π°Β», False – ΠΊΠ°ΠΊ Β«Π›ΠΎΠΆΡŒΒ», Π° 1 ΠΈ 0 ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ ΠΊΠ°ΠΊ Β«Π•ΡΡ‚ΡŒΒ» ΠΈ «НСт». ЗафиксируСм всС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ Π² словарС:

        vocabulary = {
    True: "ΠŸΡ€Π°Π²Π΄Π°", 
    False: "Π›ΠΎΠΆΡŒ",
    1: "Π•ΡΡ‚ΡŒ",
    0: "НСт"
}

    

Π’ Ρ‡Ρ‘ΠΌ ΠΏΠΎΠ΄Π²ΠΎΡ…? Π’ этом словарС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ:

        print(vocabulary[True])     # 'Π•ΡΡ‚ΡŒ'
print(vocabulary[False])    # 'НСт'
print(vocabulary[1])        # 'Π•ΡΡ‚ΡŒ'
print(vocabulary[0])        # 'НСт'

    

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ. Π”Π°Π²Π°ΠΉΡ‚Π΅ заглянСм Π² сам ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

        print(vocabulary)           # {True: 'Π•ΡΡ‚ΡŒ', False: 'НСт'}

    

Из Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΏΠ°Π»ΠΈ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ – Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅.

Π§Π΅ΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΌ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ класс bool ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

  1. Класс bool, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² Python 2.3, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ наслСдник класса int. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ True ΠΈ False – всСго лишь Π΄Π²Π° экзСмпляра класса bool, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ собой 1 ΠΈ 0. Π’ этом классС ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ __repr__ ΠΈ __str__, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ экзСмпляра, Π½ΠΎ Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ» ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ простыми Ρ†ΠΈΡ„Ρ€Π°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, сравнив True ΠΈ число. Зная это, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ boolean-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² матСматичСских выраТСниях. Но я Ρ‚Π°ΠΊ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ: ΠΊΠ°ΠΊ сказано Π² Π΄Π·Π΅Π½Π΅ Python (Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ввСдя Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ import this), Β«Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β». ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ boolean ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² PEP-0285.
  2. Π’Π°ΠΊΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ словаря находится hash-Ρ‚Π°Π±Π»ΠΈΡ†Π°: Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всС Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, проходят Ρ‡Π΅Ρ€Π΅Π· hash-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° опрСдСляСт, Π³Π΄Π΅ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ элСмСнт Π² памяти. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, поиск ΠΈ вставка Π΄Π°Π½Π½Ρ‹Ρ… становятся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ массивС. Если хочСтся ΡƒΠ·Π½Π°Ρ‚ΡŒ большС подробностСй ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ словарСй Π² Python, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° stackowerflow.

Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ° слСдуСт привСсти всС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ… – str.

        vocabulary = {
    "True": "ΠŸΡ€Π°Π²Π΄Π°", 
    "False": "Π›ΠΎΠΆΡŒ",
    "1": "Π•ΡΡ‚ΡŒ",
    "0": "НСт"
}

    

Hash-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ пСрСстанут ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ, ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ словаря Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ, – ΠΎΠ±Ρ‰ΠΈΠΉ язык с ΡƒΠΌΠ½Ρ‹ΠΌ Π΄ΠΎΠΌΠΎΠΌ всё-Ρ‚Π°ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½:

        vocabulary[str(True)]   # "ΠŸΡ€Π°Π²Π΄Π°"

    

4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ set для ускорСния вычислСний

Π‘Ρ€Π΅Π΄ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π±Ρ‹Ρ‚ΡƒΠ΅Ρ‚ распространённоС ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ поиск элСмСнта Π² set Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ Π² list. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ΄Π°:

        animals = ['cat', 'dog', 'bird', 'mouse', 'rat', 'elephant']

# <ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄, Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ список>
if 'dog' in set(animals):
    # <дальнСйшиС вычислСния>

    

Π’ Ρ‡Ρ‘ΠΌ ΠΏΠΎΠ΄Π²ΠΎΡ…? Рассмотрим ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°:

        animals = ['cat', 'dog', 'bird', 'mouse', 'rat', 'elephant']

animals_set = set(animals)  
# НуТно ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСм элСмСнтам list ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π² set (cΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: O(n))
if 'dog' in animals_set:  # НуТно Π½Π°ΠΉΡ‚ΠΈ элСмСнт Π²ΠΎ мноТСствС O(1)
    # <дальнСйшиС вычислСния>

    

Π‘Π΅Π· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ остановил Π±Ρ‹ поиск Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ элСмСнтС, Π½ΠΎ ΠΊΠΎΠ΄ заставил Π΅Π³ΠΎ сначала ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСму списку, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ дСйствиС с set. Π’ ΠΈΡ‚ΠΎΠ³Π΅ вмСсто Π΄Π²ΡƒΡ… шагов ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ сСмь – Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ускорСния, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ расходы Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ!

Π§Π΅ΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго – Ρ€Π°Π·Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄ΠΎΠΉ list ΠΈ set. ΠŸΡ€ΠΈ объявлСнии Ρ‚ΠΈΠΏΠ° list рСзСрвируСтся участок памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти. Бписок ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылки Π½Π° Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹: строки, числа, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ массивы ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° самого сСбя. ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² спискС хранятся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΉ элСмСнт, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ΄Ρ‘Ρ‚ ΠΏΠΎ ссылкам, начиная с ΠΏΠ΅Ρ€Π²ΠΎΠΉ, ΠΈ сравниваСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с искомым: найдя Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ½ останавливаСт поиск. Π§Π΅ΠΌ Π΄Π»ΠΈΠ½Π½Π΅Π΅ список, Ρ‚Π΅ΠΌ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ процСсс. Π’ O-Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ это записываСтся ΠΊΠ°ΠΊ O(n).

set, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ list, Ρ…Ρ€Π°Π½ΠΈΡ‚ элСмСнты, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ½Π°Ρ‡Π΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ½ содСрТит Π² сСбС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π² Π½Ρ‘ΠΌ нСльзя Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ измСняСмыС структуры, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π½Π΅ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π²Π°ΠΌΠΈ порядкС, Π° Π² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для Python.

Π’Π°ΠΊ ΠΊΠ°ΠΊ располоТСниС Π² мноТСствС опрСдСляСтся содСрТимым элСмСнта, поиск ΠΏΠΎ set ΠΈ ΠΏΡ€Π°Π²Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС. Выполняя ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ x in set_y, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ hash-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ x ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² set_y Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ адрСсу. Никакого ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ просмотра элСмСнтов ΠΈ Π½ΡƒΠ΄Π½ΠΎΠ³ΠΎ сравнСния!

O-нотация Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(1): Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² мноТСства поиск Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? Π—Π²ΡƒΡ‡ΠΈΡ‚ банально, Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ ΠΌΡƒΠ΄Ρ€ΠΈΡ‚ΡŒ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ поиском.

        animals = ['cat', 'dog', 'bird', 'mouse', 'rat', 'elephant']

if 'dog' in animals: 
    # <дальнСйшиС вычислСния>

    

Как говорится Π² Π΄Π·Π΅Π½Π΅ Python, «простоС Π»ΡƒΡ‡ΡˆΠ΅ слоТного».

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² Python

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, самый Π³Π»Π°Π²Π½Ρ‹ΠΉ совСт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит Π΄Π°Ρ‚ΡŒ спСциалистам-Π΄ΠΆΡƒΠ½ΠΈΠΎΡ€Π°ΠΌ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ свою ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ Π² Python, – это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·ΡƒΠ±Ρ€ΠΈΡ‚ΡŒ основы, Π½ΠΎ ΠΈ Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ инструмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌ самым Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠΌ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, я ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ:

  1. ΠŸΡ€ΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° сСбС Π΄Π·Π΅Π½ Python. Мало ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ «простоС Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ слоТноС»: Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ сСбС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… трудностСй.
  2. Π—Ρ€ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π΅Π½ΡŒ. ΠŸΡ€ΠΎ Ρ‚ΠΈΠΏΡ‹, классы, структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π½ΠΈΠΌΠΈ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΡƒΡ€ΠΎΠΊΠ°Ρ… ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π’Π°ΡˆΠ° Π·Π°Π΄Π°Ρ‡Π° – Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡΒ» ΠΈ Β«Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚Β», Π½ΠΎ ΠΈ Β«ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚Β».
  3. НС ΡΠΎΠ±Π»Π°Π·Π½ΡΡ‚ΡŒΡΡ фрилансом. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ Π²Π°ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ стоит ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² компаниях с высокой ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠΉ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€ΠΎΠΉ. Π’Π°ΠΊ Π²Ρ‹ смоТСтС ΠΏΠ΅Ρ€Π΅Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ ΠΎΡ‚ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΌΠ΅ΡŽΡ‚ ΠΈ Π»ΡŽΠ±ΡΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΊΠΎΠ΄, Π° Π½Π΅ Π½Π°Π±ΠΈΠ²Π°Ρ‚ΡŒ шишки ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Анализ кода в Python

Анализ ΠΊΠΎΠ΄Π° Π² Python ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. БущСствуСт нСсколько Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ΄Π° для Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ своСго ΠΊΠΎΠ΄Π° ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, соотвСтствуСт Π»ΠΈ ΠΎΠ½ стандартам. Π‘Π°ΠΌΡ‹ΠΌ популярным ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ pylint. Он ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π² настойках ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ…. Он Ρ‚Π°ΠΊΠΆΠ΅ провСряСт ваш ΠΊΠΎΠ΄ Π½Π° соотвСтствиС с PEP8, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ руководством ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ ядра Python, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ‰Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ошибки. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ pylint провСряСт ваш ΠΊΠΎΠ΄ Π½Π° Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ стандартов PEP8, Π½ΠΎ Π½Π΅ Π½Π° всС. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΡƒΠ΄Π΅Π»ΠΈΠΌ нашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ pyflakes.

НачнСм с pylint

ΠŸΠ°ΠΊΠ΅Ρ‚ pylint Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Python, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ PyPI (Python Package Index), ΠΈΠ»ΠΈ нСпосрСдствСнно сайт ΠΏΠ°ΠΊΠ΅Ρ‚Π° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая сдСлаСт всю Ρ€Π°Π±ΠΎΡ‚Ρƒ Π·Π° вас:

Если всС ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ ΠΏΠ»Π°Π½Ρƒ, Ρ‚ΠΎ pylint установится, ΠΈ ΠΌΡ‹ смоТСм ΠΏΠΎΠΉΡ‚ΠΈ дальшС.

Анализ вашСго кода

ПослС установки pylint Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ… Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚. Если это Π½Π΅ сработало, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

c:\Python34\Scripts\pylint



c:\Python34\Scripts\pylint

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠ΄ для Π°Π½Π°Π»ΠΈΠ·Π°. Π’ΠΎΡ‚ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, которая содСрТит Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ошибки. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Π΅Ρ‘ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ crummy_code.py:

import sys

class CarClass:
«»»»»»

def __init__(self, color, make, model, year):
«»»Constructor»»»
self.color = color
self.make = make
self.model = model
self.year = year

if «Windows» in platform.platform():
print(«You’re using Windows!»)

self.weight = self.getWeight(1, 2, 3)

def getWeight(this):
«»»»»»
return «2000 lbs»


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import sys

Β 

class CarClass:

Β Β Β Β «»»»»»

Β Β Β Β 

Β Β Β Β def __init__(self, color, make, model, year):

Β Β Β Β Β Β Β Β «»»Constructor»»»

Β Β Β Β Β Β Β Β self.color = color

Β Β Β Β Β Β Β Β self.make = make

Β Β Β Β Β Β Β Β self.model = model

Β Β Β Β Β Β Β Β self.year = year

Β Β Β Β 

Β Β Β Β Β Β Β Β if «Windows» in platform.platform():

Β Β Β Β Β Β Β Β Β Β Β Β print(«You’re using Windows!»)

Β Β Β Β Β Β Β Β 

Β Β Β Β Β Β Β Β self.weight = self.getWeight(1, 2, 3)

Β 

Β Β Β Β def getWeight(this):

Β Β Β Β Β Β Β Β «»»»»»

Β Β Β Β Β Β Β Β return «2000 lbs»

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ошибки Π½Π΅ запуская ΠΊΠΎΠ΄? Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ pylint Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ…!

Π•ΡΡ‚ΡŒ вопросы ΠΏΠΎ Python?

На нашСм Ρ„ΠΎΡ€ΡƒΠΌΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ любой вопрос ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ всСго нашСго сообщСства!

Telegram Π§Π°Ρ‚ & Канал

ВступитС Π² наш Π΄Ρ€ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‡Π°Ρ‚ ΠΏΠΎ Python ΠΈ Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ с Π΅Π΄ΠΈΠ½ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌΠΈ! Π‘Ρ‚Π°Π½ΡŒΡ‚Π΅ Ρ‡Π°ΡΡ‚ΡŒΡŽ большого сообщСства!

Паблик VK

Одно ΠΈΠ· самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… сообщСств ΠΏΠΎ Python Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти Π’Πš. Π’ΠΈΠ΄Π΅ΠΎ ΡƒΡ€ΠΎΠΊΠΈ ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ для вас!


ПослС запуска этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π²Ρ‹Π΄Π°Ρ‡Ρƒ Π½Π° вашСм экранС. Π’ΠΎΡ‚ частичный ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

c:\py101>c:\Python34\Scripts\pylint crummy_code.py

No config file found, using default configuration
************* Module crummy_code
C: 2, 0: Trailing whitespace (trailing-whitespace)
C: 5, 0: Trailing whitespace (trailing-whitespace)
C: 12, 0: Trailing whitespace (trailing-whitespace)
C: 15, 0: Trailing whitespace (trailing-whitespace)
C: 17, 0: Trailing whitespace (trailing-whitespace)
C: 1, 0: Missing module docstring (missing-docstring)
C: 3, 0: Empty class docstring (empty-docstring)
C: 3, 0: Old-style class defined. (old-style-class)
E: 13,24: Undefined variable ‘platform’ (undefined-variable)
E: 16,36: Too many positional arguments for function call (too-many-function-args)
C: 18, 4: Invalid method name «getWeight» (invalid-name)
C: 18, 4: Empty method docstring (empty-docstring)
E: 18, 4: Method should have «self» as first argument (no-self-argument)
R: 18, 4: Method could be a function (no-self-use)
R: 3, 0: Too few public methods (1/2) (too-few-public-methods)
W: 1, 0: Unused import sys (unused-import)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

c:\py101>c:\Python34\Scripts\pylint crummy_code.py

Β 

No config file found, using default configuration

************* Module crummy_code

C: 2, 0: Trailing whitespace (trailing-whitespace)

C: 5, 0: Trailing whitespace (trailing-whitespace)

C: 12, 0: Trailing whitespace (trailing-whitespace)

C: 15, 0: Trailing whitespace (trailing-whitespace)

C: 17, 0: Trailing whitespace (trailing-whitespace)

C: 1, 0: Missing module docstring (missing-docstring)

C: 3, 0: Empty class docstring (empty-docstring)

C: 3, 0: Old-style class defined. (old-style-class)

E: 13,24: Undefined variable ‘platform’ (undefined-variable)

E: 16,36: Too many positional arguments for function call (too-many-function-args)

C: 18, 4: Invalid method name «getWeight» (invalid-name)

C: 18, 4: Empty method docstring (empty-docstring)

E: 18, 4: Method should have «self» as first argument (no-self-argument)

R: 18, 4: Method could be a function (no-self-use)

R: 3, 0: Too few public methods (1/2) (too-few-public-methods)

W: 1, 0: Unused import sys (unused-import)

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΠΌ ΠΈ разбСрСмся. Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π±ΡƒΠΊΠ²Ρ‹:

  • Π‘ – конвСнция (convention)
  • R – Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ (refactor)
  • W – ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ (warning)
  • E – ошибка (error)

Наш pylint нашСл 3 ошибки, 4 ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠ΅ΠΉ, 2 строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΠΈ ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ 3 ошибки – это ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я искал. ΠœΡ‹ попытаСмся ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π½Π°Π²Π΅Π΄Π΅ΠΌ порядок Π² ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°Ρ…, ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getWeight Π½Π° get_weight, Π² связи с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ camelCase Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² названиях ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Нам Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² get_weight, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π» ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ β€œself” выступал Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ВзглянСм Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄:

# crummy_code_fixed.py
import platform

class CarClass:
«»»»»»

def __init__(self, color, make, model, year):
«»»Constructor»»»
self.color = color
self.make = make
self.model = model
self.year = year

if «Windows» in platform.platform():
print(«You’re using Windows!»)

self.weight = self.get_weight(3)

def get_weight(self, this):
«»»»»»
return «2000 lbs»


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# crummy_code_fixed.py

import platform

Β 

class CarClass:

Β Β Β Β «»»»»»

Β Β Β Β 

Β Β Β Β def __init__(self, color, make, model, year):

Β Β Β Β Β Β Β Β «»»Constructor»»»

Β Β Β Β Β Β Β Β self.color = color

Β Β Β Β Β Β Β Β self.make = make

Β Β Β Β Β Β Β Β self.model = model

Β Β Β Β Β Β Β Β self.year = year

Β Β Β Β 

Β Β Β Β Β Β Β Β if «Windows» in platform.platform():

Β Β Β Β Β Β Β Β Β Β Β Β print(«You’re using Windows!»)

Β Β Β Β Β Β Β Β 

Β Β Β Β Β Β Β Β self.weight = self.get_weight(3)

Β 

Β Β Β Β def get_weight(self, this):

Β Β Β Β Β Β Β Β «»»»»»

Β Β Β Β Β Β Β Β return «2000 lbs»

Π”Π°Π²Π°ΠΉΡ‚Π΅ запустим Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ с pylint ΠΈ посмотрим, насколько ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Для краткости, ΠΌΡ‹ Π΅Ρ‰Π΅ Ρ€Π°Π· рассмотрим ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ:

c:\py101>c:\Python34\Scripts\pylint crummy_code_fixed.py

No config file found, using default configuration
************* Module crummy_code_fixed
C: 1,0: Missing docstring
C: 4,0: CarClass: Empty docstring
C: 21,4: CarClass.get_weight: Empty docstring
W: 21,25: CarClass.get_weight: Unused argument ‘this’
R: 21,4: CarClass.get_weight: Method could be a function
R: 4,0: CarClass: Too few public methods (1/2)



c:\py101>c:\Python34\Scripts\pylint crummy_code_fixed.py

Β 

No config file found, using default configuration

************* Module crummy_code_fixed

C: 1,0: Missing docstring

C: 4,0: CarClass: Empty docstring

C: 21,4: CarClass.get_weight: Empty docstring

W: 21,25: CarClass.get_weight: Unused argument ‘this’

R: 21,4: CarClass.get_weight: Method could be a function

R: 4,0: CarClass: Too few public methods (1/2)

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ. Если ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ docstrings, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ количСство ошибок Π²Π΄Π²ΠΎΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ pyflakes!

Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с pyflakes

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ pyflakes это Ρ‡Π°ΡΡ‚ΡŒ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ называСтся Divmod Project. Pyflakes Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ выполняСт провСряСмый ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ pylint. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ pyflakes ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ pip, easy_install, ΠΈΠ»ΠΈ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ источника.

Π”Π°Π½Π½Ρ‹ΠΉ сСрвис ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π’Π°ΠΌ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ условия ΠΏΡ€ΠΈ Π·Π°ΠΊΠ°Π·Π΅ классов Π½Π° посты ΠΈ Ρ„ΠΎΡ‚ΠΎ Π² Одноклассники. ΠŸΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°ΠΉΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ рСсурс Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со скидками, Π½ΠΎ ΠΈ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π΅ качСство ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ поступлСния.

ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с запуска pyflakes Π² ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии Ρ‚ΠΎΠΉ ΠΆΠ΅ части ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ использовали для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ pylint. Π’ΠΎΡ‚ ΠΈ ΠΎΠ½:

import sys

class CarClass:
«»»»»»

def __init__(self, color, make, model, year):
«»»Constructor»»»
self.color = color
self.make = make
self.model = model
self.year = year

if «Windows» in platform.platform():
print(«You’re using Windows!»)

self.weight = self.getWeight(1, 2, 3)

def getWeight(this):
«»»»»»
return «2000 lbs»


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import sys

Β 

class CarClass:

Β Β Β Β «»»»»»

Β Β Β Β 

Β Β Β Β def __init__(self, color, make, model, year):

Β Β Β Β Β Β Β Β «»»Constructor»»»

Β Β Β Β Β Β Β Β self.color = color

Β Β Β Β Β Β Β Β self.make = make

Β Β Β Β Β Β Β Β self.model = model

Β Β Β Β Β Β Β Β self.year = year

Β Β Β Β 

Β Β Β Β Β Β Β Β if «Windows» in platform.platform():

Β Β Β Β Β Β Β Β Β Β Β Β print(«You’re using Windows!»)

Β Β Β Β Β Β Β Β 

Β Β Β Β Β Β Β Β self.weight = self.getWeight(1, 2, 3)

Β 

Β Β Β Β def getWeight(this):

Β Β Β Β Β Β Β Β «»»»»»

Β Β Β Β Β Β Β Β return «2000 lbs»

Как ΠΌΡ‹ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, Π² этом ΠΏΠΎΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ошибки, Ρ‚Ρ€ΠΈ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ pyflakes ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ. ΠŸΠΎΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

c:\py101>c:\Python34\Scripts\pyflakes.exe crummy_code.py
crummy_code.py:1: ‘sys’ imported but unused
crummy_code.py:13: undefined name ‘platform’



c:\py101>c:\Python34\Scripts\pyflakes.exe crummy_code.py

crummy_code.py:1: ‘sys’ imported but unused

crummy_code.py:13: undefined name ‘platform’

НСсмотря Π½Π° супСрски Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π²Ρ‹Π΄Π°Ρ‡ΠΈ, pyflakes Π½Π΅ нашСл всС ошибки. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getWeight ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ getWeight сам ΠΏΠΎ сСбС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° self. Π§Ρ‚ΠΎ-ΠΆΠ΅, Π²Ρ‹, собствСнно, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Π°ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Π² ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ ΠΎΠ½ всСгда называСтся self. Если Π²Ρ‹ исправили ΠΊΠΎΠ΄, опСрируя Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ сказал pyflakes, ΠΊΠΎΠ΄ Π½Π΅ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, нСсмотря Π½Π° это.

ПодвСдСм ΠΈΡ‚ΠΎΠ³ΠΈ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° запуска pylint ΠΈ pyflakes Π² вашСм собствСнном ΠΊΠΎΠ΄Π΅, Π»ΠΈΠ±ΠΎ ΠΆΠ΅ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Python, Π²Ρ€ΠΎΠ΄Π΅ SQLAlchemy, послС Ρ‡Π΅Π³ΠΎ слСдуСт ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π² Π²Ρ‹Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ своСм ΠΊΠΎΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½Ρ‹Π΅ инструмСнты. pylint ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ с Wingware, Editra, ΠΈ PyDev. НСкоторыС прСдупрСТдСния pylint ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π²Π°ΠΌ Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΈΠ»ΠΈ Π½Π΅ особо умСстными. БущСствуСт нСсколько способов ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΡ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ прСдупрСТдСния ΠΎΠ± устарСвании, Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ -generate-rcfile для создания ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π° config, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ pylint. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ pylint ΠΈ pyflakes Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ ваш ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктах.

ГСнСрация ΠΊΠΎΠ΄Π° Π½Π° Python ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Hy / Π₯Π°Π±Ρ€

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Hy

Hy β€” Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ Лиспа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ встроСн Π² ΠΏΠΈΡ‚ΠΎΠ½.

Благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Hy трансформируСт свой Лиспоподобный ΠΊΠΎΠ΄ Π² АбстрактноС БинтаксичСскоС Π”Π΅Ρ€Π΅Π²ΠΎ (AST) ΠΏΠΈΡ‚ΠΎΠ½Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Hy вСсь прСкрасный ΠΌΠΈΡ€ ΠΏΠΈΡ‚ΠΎΠ½Π° β€” Π½Π° ΠΊΠΎΠ½Ρ‡ΠΈΠΊΠ°Ρ… ΠΏΠ°Π»ΡŒΡ†Π΅Π² ΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Лиспа.

2. О синтаксисС Hy, ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ

Hy β€” своСобразный язык, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· своих Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ (большС, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π° Лисп). Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ с синтаксисом Лиспа, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ.

  1. ΠžΡ‚ΡΡ‚ΡƒΠΏ Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΠΈ. ВмСсто этого β€” ΡƒΡ€ΠΎΠ²Π½ΠΈ влоТСнности Π² выраТСния ΠΈΠ· ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобочСк.
  2. Π’ΠΎ всСх Π²Ρ‹Π·ΠΎΠ²Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² скобки со списком Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ мСсто; запятыС Π² спискС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.
  3. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  4. ДвоСточия Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.
  5. Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ для строк ΠΈ словарСй Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅; строки Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ выглядят ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «,».

Π₯ΠΎΡ‚ΡŒ это сначала ΠΈ каТСтся Π½Π΅ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ благодаря простотС этого синтаксиса (Ρ‡Ρ‚ΠΎ достигаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов) ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ быстро.

3. ВСрминологичСскиС замСчания

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π½Π° английском β€” quoting, unquoting, quaziquoting, splicing, macro expansion. Π’ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ ΠΊΠ½ΠΈΠ³ΠΈ Practical Common Lisp Π½Π° русский язык для Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ слова Β«Ρ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β», «расцитированиС», Β«ΠΊΠ²Π°Π·ΠΈΡ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» β€” ΠΈ для послСднСго ΠΈΠ· Π½ΠΈΡ… β€” «раскрытиС макросов». Π― Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² качСствС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² «скрытиС» для quoting, «раскрытиС» для unquoting, «квазискрытиС» для quaziquoting, «структурноС раскрытиС» для splicing, Β«Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ макроса» для macro expansion.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΊΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ синтаксис этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

  • ' :: скрытиС; примСняСтся ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Hy; вмСсто Π΅Ρ‘ выполнСния ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π°ΠΊΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅.
  • ` :: квазискрытиС; Π±ΠΎΠ»Π΅Π΅ слоТная Ρ„ΠΎΡ€ΠΌΠ° скрытия, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС синтаксичСскиС структуры.
  • ~ :: раскрытиС; Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ , занята Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ для конструктора ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ символ отличаСтся ΠΎΡ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ для Лиспа запятой. УпотрСбляСтся Π² квазискрытой Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² Π½Π΅Ρ‘ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° Π½Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹.
  • ~@ :: структурноС раскрытиС; Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ΠΌ: Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ†Π΅Π½ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ списком, ΠΈ Π΅Π³ΠΎ элСмСнты ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰ΡƒΡŽ ΠΊΠ²Π°Π·ΠΈΡΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ссли Ρ„ΠΎΡ€ΠΌΠ° β€” список, ΠΈ доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ символа Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС; Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ сами собой.

4. Π‘ΡƒΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈΠ· hy ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ манипуляции, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ скрытия. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ макросов само ΠΏΠΎ сСбС Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ β€” ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ°ΠΊΡ€ΠΎΡ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ сразу выполняСтся. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°ΠΆΠ΅ просто ΠΏΡ€ΠΎΠΈΠ½ΡΠΏΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±Π΅Π· скрытия Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

(macroexpand '(my-macro param1 param2 (do (print "hello!"))))

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ сразу ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ конструкций β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, гСнСрируя ΠΈΡ… функциями Π½Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΡƒΡ‚ нас ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ нСсколько слоТностСй, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… нСльзя Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ.

  1. Бкрытая конструкция сама ΠΏΠΎ сСбС Π½Π΅ обязана Π±Ρ‹Ρ‚ΡŒ синтаксичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ для самого hy. Π’ нашСм случаС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°.
  2. НС всС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ конструкции hy ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ транслированы Π² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅. Π’ частности, это относится ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° ΠΈΠΌΠ΅Π½Π° символов Π² hy Π³ΠΎΡ€Π°Π·Π΄ΠΎ расслаблСннСС.

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ сгСнСрированной ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ конструкции Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

(with [fd (open "some/python/file.py" "a")]
      (.write fd "\n")
      (.write fd (disassemble code True)))

5. ГСнСрация ΠΈΠΌΡ‘Π½

ΠŸΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ написания макросов, для нас являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ названия носят Π½ΠΎΠ²Ρ‹Π΅ символы, Ρ‚.Π΅. Π² случаС ΠΏΠΈΡ‚ΠΎΠ½Π° β€” ΠΈΠΌΠ΅Π½Π° вновь сгСнСрированных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, классов, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, стандартный способ Π² ЛиспС ((gensym)) Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚. Π’Π°ΠΊΠΆΠ΅ Π² hy Π½Π΅Ρ‚ стандартного для ΠΌΠ½ΠΎΠ³ΠΈΡ… лиспов (intern), слуТащСго для прСвращСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ строки (с ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° ограничСния ΠΏΠΎ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅) Π² символ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, вся Π±Π°Π·Π° ΠΊΠΎΠ΄Π° hy доступна, ΠΈ быстрым поиском ΠΌΡ‹ убСТдаСмся, Ρ‡Ρ‚ΠΎ (gensym) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, создавая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ HySymbol. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΈ ΠΌΡ‹.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, нСсмотря Π½Π° сказанноС Ρ€Π°Π½Π΅Π΅ β€” макрос.

(defmacro make-vars [data]
  (setv res '())
  (for [element data]
    (setv varname (HySymbol (+ "var" (str element))))
    (setv res (cons `(setv ~varname 0) res)))
  `(do ~@res))

Помимо Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ названия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π² Π½Ρ‘ΠΌ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° полСзная Π΄Π΅Ρ‚Π°Π»ΡŒ. Π­Ρ‚ΠΎ β€” сбор Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ AST ΠΈΠ· Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡƒΡ‚Ρ‘ΠΈ составлСния списка этих Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ раскрытия этого списка Π² Π½ΡƒΠΆΠ½ΠΎΠΌ ΠΎΠ±Ρ€Π°ΠΌΠ»Π΅Π½ΠΈΠΈ.

6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ замСчания

ΠŸΡ€ΠΈ использовании hy для ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ просто Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Π½Ρ‘ΠΌ), Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ аспСкты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ скрытыми.

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ это касаСтся Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² контСкстС AST ΠΈ контСкстС выполнСния ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ выраТСния ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ.

  • [ ] Π½Π΅ просто список ΠΏΠΈΡ‚ΠΎΠ½Π°, Π° HyList;
  • { } ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠΈΡ‚ΠΎΠ½Π°, Π° HyDict, ΠΈ Π² Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ hy прСдставлСн ΠΊΠ°ΠΊ список;
  • "" Π½Π΅ просто строковая пСрСмСнная, Π° HyString.

ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Основной Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ²: пСрСчислСнныС (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅) конструкции, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ скрытыми, ΠΏΡ€ΠΈ дизассСмблировании Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ python.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ статичСски Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ списки ΠΈΠ»ΠΈ словари Π² ΠΊΠΎΠ΄Π΅ python, потрСбуСтся использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ структурного раскрытия.

(setv class-def [`(defclass ~class-name [~(HySymbol (. meta-base __name__))]
                    [army_name ~army-name
                     faction_base ~(HyString faction)
                     alternate_factions [~@(map HyString alternate-fac-list)]
                     army_id ~army-id
                     army-factions [~@(map HyString army-factions)]]
                    (defn --init-- [self &optional [parent None]]
                      (apply .--init-- [(super ~class-name self)]
                             {~@(interleave (map HyString class-grouping)
                                            (repeat 'True))
                              "parent" parent})
                      ~@(map (fn [key]
                               `(.add-classes (. self ~(HySymbol key))
                                              [~@(genexpr (HySymbol (. ut __name__))
                                                          [ut (get class-grouping key)])]))
                             class-grouping)))]))))

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ производится Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ списков Π² полях alternate_factions ΠΈ army-factions объявляСмого класса. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² питоновском ΠΊΠΎΠ΄Π΅ ΠΎΠ±Π° этих поля Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π½ΠΈΠΆΠ½Π΅Π΅ ΠΏΠΎΠ΄Ρ‡Ρ‘Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅. Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ производится Π½Π° основС списков строк, поэтому примСняСтся структурноС раскрытиС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° прСобразования находящихся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… строк python Π² HyString.

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° Π½Π° hy ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅:

class DetachPatrol_adeptus_ministorum(DetachPatrol):
    army_name = u'Adeptus Ministorum (Patrol detachment)'
    faction_base = u'ADEPTUS MINISTORUM'
    alternate_factions = []
    army_id = u'patrol_adeptus_ministorum'
    army_factions = [u'IMPERIUM', u'ADEPTA SORORITAS', u'<ORDER>', u'ADEPTUS MINISTORUM']

    def __init__(self, parent=None):
        super(DetachPatrol_adeptus_ministorum, self).__init__(*[], **{u'heavy': True, u'troops': True, u'transports': True, u'hq': True, u'fast': True, u'elite': True, u'parent': parent, })
        self.heavy.add_classes([Exorcist, Retributors, PenitentEngines])
        self.troops.add_classes([BattleSisters])
        self.transports.add_classes([ASRhino, Immolator])
        self.hq.add_classes([Celestine, Canoness, Jacobus])
        self.fast.add_classes([Dominions, Seraphims])
        self.elite.add_classes([ArcoFlagellants, Assassins, Celestians, Dialogus, Hospitaller, Imagifier, Mistress, Priest, Repentia, PriestV2, Crusaders])
        return None

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ описан Π²Ρ‹Π·ΠΎΠ² конструктора Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

  • Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· класса (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π° .), apply Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π΅ΠΌΡƒ прСдоставлСнный (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π΅Π³ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ) ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вызываСтся;
  • МоТно ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ словаря ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ структурного раскрытия;
  • Для сопоставлСния ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ (строкС, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² HyString) значСния, примСняСтся interleave, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ Π΄Π²ΡƒΠΌ спискам, пСрСмСТая ΠΈΡ… элСмСнты;
  • Π‘ΠΈΠΌΠ²ΠΎΠ» True ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹ΠΉ ΡΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ, Π² ΠΊΠΎΠ΄Π΅ python Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² сСбя;
  • Π’ скрытой конструкции ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ (свободныС) символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ; Ρ…ΠΎΡ‚ΡŒ Π² скрытой конструкции ΠΈ находится объявлСниС символа parent ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса, Π²ΠΎ врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ ΡΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, Ρ‚Π°ΠΊΠΎΠ³ΠΎ символа Π½Π΅ сущСствуСт;
  • МоТно Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрии ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ· списков, производя структурноС раскрытиС списка скрытых конструкций hy (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ· исходного списка).

7. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

ΠŸΡ€ΠΈ написании Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Hy ΠΈ русского ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Practical Common Lisp.

Python Π² Visual Studio Code

Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Python Π² Visual Studio Code с использованиСм Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Microsoft Python просто, вСсСло ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ VS Code ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ Python ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² любой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Python. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всю ΠΌΠΎΡ‰ΡŒ VS Code для обСспСчСния автозаполнСния ΠΈ IntelliSense, Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³Π°, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования, Π° Ρ‚Π°ΠΊΠΆΠ΅ возмоТности Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ срСдами Python, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ срСды ΠΈ срСды conda.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ прСдставлСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π·ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… возмоТностСй Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python для VS Code. Для пошагового руководства ΠΏΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, запуску ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½ΠΈΠΆΠ΅.

Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС Python Hello World

УстановитС Python ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Ρ‚ вас Ρ‡Π΅Ρ€Π΅Π· установку Python ΠΈ использованиС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Для быстрой установки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Python 3.7 ΠΈΠ· python.org ΠΈ установитС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈΠ· VS Code Marketplace.

ПослС установки вСрсии Python Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Python: Select Interpreter . Если VS Code Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ автоматичСски искомый ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ Β«Π‘Ρ€Π΅Π΄Ρ‹ — ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽΒ».

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python Ρ‡Π΅Ρ€Π΅Π· настройки. Π‘ΠΌ. Π‘ΠΏΡ€Π°Π²ΠΊΡƒ ΠΏΠΎ настройкам.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° инсайдСров

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ позволяСт Π²Π°ΠΌ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ автоматичСски ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ вСрсии Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python ΠΏΠ΅Ρ€Π΅Π΄ выпуском, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ исправлСния.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ участиС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄ (β‡§βŒ˜P (Windows, Linux Ctrl + Shift + P)) ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Python: Switch to Insiders Daily / Weekly Channel , Π»ΠΈΠ±ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ настройки (⌘, (Windows, Linux Ctrl +,)) ΠΈ Π½Π°ΠΉΡ‚ΠΈ Python: Insiders Channel , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для ΠΊΠ°Π½Π°Π»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΒ» ΠΈΠ»ΠΈ «СТСнСдСльно».

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Python

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚ΡŒ Python, создайтС Ρ„Π°ΠΉΠ» (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊ) с ΠΈΠΌΠ΅Π½Π΅ΠΌ hello.py ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ (ΠΏΡ€ΠΈ условии Python 3):

  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Β«Hello WorldΒ»)  

Π—Π°Ρ‚Π΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python прСдоставляСт ярлыки для запуска ΠΊΠΎΠ΄Π° Python Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ ( Python: Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Interpreter Π² ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄):

  • Π’ тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅: Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² любом мСстС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Python Π² Π’Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ .ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эта Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°.
  • Π’ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠ΅: Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Ρ„Π°ΠΉΠ» Python ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Python Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ .

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Terminal: Create New Integrated Terminal , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ VS Code автоматичСски Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π‘ΠΌ. Β«Π‘Ρ€Π΅Π΄Ρ‹Β» Π½ΠΈΠΆΠ΅. Python: Start REPL Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ запускаСт Python REPL.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ инструкции ΠΏΠΎ запуску ΠΊΠΎΠ΄Π° см. Π’ руководствС.

АвтозаполнСниС ΠΈ IntelliSense

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ IntelliSense с использованиСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. IntelliSense — это ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для ряда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° (контСкстный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ прСдлоТСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…) для всСх Π²Π°ΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ для встроСнных ΠΈ сторонних ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

IntelliSense быстро ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Π»Π΅Π½Ρ‹ класса ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Π²Π²ΠΎΠ΄Π°, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π² любоС врСмя с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ βŒƒSpace (Windows, Linux Ctrl + Space).Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ навСсти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Π‘ΠΎΠ²Π΅Ρ‚ : ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ IntelliCode для VS Code (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия). IntelliCode прСдоставляСт Π½Π°Π±ΠΎΡ€ возмоТностСй с использованиСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° для IntelliSense Π² Python, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠ·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΉ Π½Π° основС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ контСкста ΠΊΠΎΠ΄Π°.

Π›ΠΈΠ½Ρ‚ΠΈΠ½Π³

Linting Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ваш ΠΊΠΎΠ΄ Python Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок, облСгчая поиск ΠΈ исправлСниС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ряд Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Pylint, pycodestyle, Flake8, mypy, pydocstyle, prospector ΠΈ pylama. Π‘ΠΌ. Π›ΠΈΠ½Ρ‚ΠΈΠ½Π³.

ΠžΡ‚Π»Π°Π΄ΠΊΠ°

НС Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°! УстанавливайтС Ρ‚ΠΎΡ‡ΠΊΠΈ останова, провСряйтС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ консоль ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΈ пошаговом Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΡ‚Π»Π°ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Python, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅, Π²Π΅Π±-прилоТСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ прилоТСния.

Для подробностСй, связанных с Python, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ настройку запуска .json ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ, см. ΠžΡ‚Π»Π°Π΄ΠΊΠ°. ΠžΠ±Ρ‰Π°Ρ отладочная информация VS Code находится Π² ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. Π£Ρ‡Π΅Π±Π½ΠΈΠΊΠΈ Django ΠΈ Flask Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ Π² контСкстС этих Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ шаблонов страниц Django.

Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹

Snippets выводят ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ свои собствСнныС Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, прСдоставляСмыС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΠ·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° βŒƒ ΠŸΡ€ΠΎΠ±Π΅Π» (Windows, Linux Ctrl + ΠŸΡ€ΠΎΠ±Π΅Π»).ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с Python см. Π’ руководствах ΠΏΠΎ Django ΠΈ Flask.

ΠžΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π°Ρ срСда

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python автоматичСски опрСдСляСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Python, установлСнныС Π² стандартных мСстах. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ срСды conda, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ срСды Π² ΠΏΠ°ΠΏΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области. Π‘ΠΌ. Настройка срСд Python. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ python.pythonPath , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π² любом мСстС вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

ВСкущая срСда отобраТаСтся Π² Π»Π΅Π²ΠΎΠΉ части строки состояния VS Code:

Π’ строкС состояния Ρ‚Π°ΠΊΠΆΠ΅ указываСтся, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½:

Выбранная срСда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для IntelliSense, автозаполнСния, Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³Π°, форматирования ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… связанных с языком Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.Он Ρ‚Π°ΠΊΠΆΠ΅ активируСтся, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС Python Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° conda ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ срСды, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ имя ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π² строкС состояния ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Python: Select Interpreter .

VS Code ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π²Π°ΠΌ список ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… срСд, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π² свои ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ настройки (см. Настройка срСд Python).

Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹

ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Π½Π΅Π»ΠΈ Terminal ΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠ°ΠΊ pip install <имя_ΠΏΠ°ΠΊΠ΅Ρ‚Π°> (Windows) ΠΈ pip3 install (macOS / Linux).VS Code устанавливаСт этот ΠΏΠ°ΠΊΠ΅Ρ‚ Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ вмСстС с Π΅Π³ΠΎ зависимостями. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅ Python, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² руководствах ΠΏΠΎ Django ΠΈ Flask.

Ноутбуки Jupyter

Если Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» записной ΠΊΠ½ΠΈΠΆΠΊΠΈ Jupyter ( .ipynb ) Π² VS Code, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Jupyter Notebook Editor для нСпосрСдствСнного просмотра, измСнСния ΠΈ запуска ячССк ΠΊΠΎΠ΄Π°.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠΈΡΠ½ΡƒΡŽ ΠΊΠ½ΠΈΠΆΠΊΡƒ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ΄Π° Python. Π―Ρ‡Π΅ΠΉΠΊΠΈ записной ΠΊΠ½ΠΈΠΆΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ Python коммСнтариями # %% , Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Run Cell ΠΈΠ»ΠΈ Run All Cells CodeLens.Π’Ρ‹Π±ΠΎΡ€ CodeLens запускаСт сСрвСр Jupyter ΠΈ запускаСт ячСйку (я) Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Python:

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ записной ΠΊΠ½ΠΈΠΆΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»Π° Python позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС возмоТности ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ VS Code. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» записной ΠΊΠ½ΠΈΠΆΠΊΠΈ ΠΈ снова ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΠ½ΡƒΡŽ ΠΊΠ½ΠΈΠΆΠΊΡƒ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ записных ΠΊΠ½ΠΈΠΆΠ΅ΠΊ, Jupyter ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ‚Π°ΠΊΡƒΡŽ ​​слуТбу, ΠΊΠ°ΠΊ Azure Notebooks.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ любой ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ записной ΠΊΠ½ΠΈΠΆΠΊΠΈ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» Python, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ сСрвСру Jupyter для выполнСния ΠΊΠΎΠ΄Π°.Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Jupyter.

ВСстированиС

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ тСстированиС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² unittest, pytest ΠΈ носового тСстирования.

Для запуска тСстов Π²Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² Π² настройках. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ настройки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΡƒΡ‚ΠΈ ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ для обнаруТСния тСстов.

ПослС обнаруТСния VS Code прСдоставляСт мноТСство ΠΊΠΎΠΌΠ°Π½Π΄ (Π² строкС состояния, ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… мСстах) для запуска ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ тСстов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ тСстов ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python прСдоставляСт ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ настроСк для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Они описаны Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π΅ΠΌΠ°Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π›ΠΈΠ½Ρ‚ΠΈΠ½Π³, ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ ВСстированиС. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² справкС ΠΏΠΎ настройкам.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ популярныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Microsoft Python прСдоставляСт всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, описанныС Ρ€Π°Π½Π΅Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ языка Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² VS Code, установив Π΄Ρ€ΡƒΠ³ΠΈΠ΅ популярныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python.

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ прСдставлСниС Extensions (β‡§βŒ˜X (Windows, Linux Ctrl + Shift + X)).
  2. ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ список Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ, Π½Π°Π±Ρ€Π°Π² Β«pythonΒ».

ΠŸΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ динамичСски. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠ»ΠΈΡ‚ΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ описаниС ΠΈ ΠΎΡ‚Π·Ρ‹Π²Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вас. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ большС Π½Π° Ρ‚ΠΎΡ€Π³ΠΎΠ²ΠΎΠΉ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

07.03.2019

.

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Python Π² Visual Studio Code

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python прСдоставляСт мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для рСдактирования исходного ΠΊΠΎΠ΄Π° Python Π² Visual Studio Код:

Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Linting ΠΈ Jupyter.

АвтозаполнСниС ΠΈ IntelliSense

АвтозаполнСниС

ΠΈ IntelliSense прСдусмотрСны для всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΈ для ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Python, установлСнных Π² стандартных мСстах.

Π’ΠΎ врСмя рСдактирования Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСсколькими ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ.

  • ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ (F12) ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· вашСго ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ΄, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ.

  • Peek Definition (βŒ₯F12 (Windows Alt + F12, Linux Ctrl + Shift + F10)), Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ нСпосрСдствСнно Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ (освобоТдая мСсто Π² ΠΎΠΊΠ½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ скрытия ΠΊΠΎΠ΄Π°). НаТмитС Escape, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ Peek, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ x Π² ΠΏΡ€Π°Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ.

  • ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ объявлСнию выполняСт ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ пСрСмСнная ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ объявлСн Π² вашСм ΠΊΠΎΠ΄Π΅.

  • Peek Declaration Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½, Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ объявлСниС прямо Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅. Π‘Π½ΠΎΠ²Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Escape ΠΈΠ»ΠΈ x Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ Peek.

ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ IntelliSense

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π°Π½Π°Π»ΠΈΠ·Π°, просмотритС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ автозаполнСния.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ автозаполнСния ΠΈ IntelliSense, Π΄Π°ΠΆΠ΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Π‘ΠΌ. Π Π°Π·Π΄Π΅Π» Настройка IntelliSense.

Π‘ΠΎΠ²Π΅Ρ‚ : ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ IntelliCode для VS Code (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия). IntelliCode прСдоставляСт Π½Π°Π±ΠΎΡ€ возмоТностСй с использованиСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° для IntelliSense Π² Python, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠ·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΉ Π½Π° основС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ контСкста ΠΊΠΎΠ΄Π°. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… вопросов ΠΎ IntelliCode для VS Code.

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ IntelliSense для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… располоТСний ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ IntelliSense для ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², установлСнных Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… нСстандартных мСстах, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ эти мСста Π² Python .ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ autoComplete.extraPaths Π² Ρ„Π°ΠΉΠ»Π΅ настроСк (коллСкция ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ пуста). НапримСр, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Google App Engine Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… мСстах, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² app.yaml , Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Flask. Π’ этом случаС Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ эти мСстополоТСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Окна:

  "python.autoComplete.extraPaths": [
    "C: / Program Files (x86) / Google / google_appengine",
    "C: / Program Files (x86) / Google / google_appengine / lib / flask-0.12 "]  

macOS / Linux:

  "python.autoComplete.extraPaths": [
    "~ / .local / lib / Google / google_appengine",
    "~ / .local / lib / Google / google_appengine / lib / flask-0.12"]  

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ python.autocomplete.addBrackets (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ false ) Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ VS Code автоматичСски Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ( () ) ΠΏΡ€ΠΈ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, Ссли Π²Ρ‹ установитС addBrackets Π½Π° true :

  "ΠΏΠΈΡ‚ΠΎΠ½.autoComplete.addBrackets ": true,  

, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ import os , Π° Π·Π°Ρ‚Π΅ΠΌ os.getc , Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ для os.getcwd . Π’Ρ‹Π±ΠΎΡ€ этого автозаполнСния добавляСт os.getcwd () ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ исходному ΠΊΠΎΠ΄Ρƒ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ курсор Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ€Π°Π²Π½ΠΎ false, Π² Ρ„Π°ΠΉΠ» добавляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ os.getcwd .

Для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ IntelliSense Π² Ρ†Π΅Π»ΠΎΠΌ см. IntelliSense.

Поиск ΠΈ устранСниС нСисправностСй

Если Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ IntelliSense Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ для настраиваСмого модуля, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
НСвСрный ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ настройку pythonPath .Если Π²Ρ‹ внСсСтС исправлСния, пСрСзапуститС VS Code.
ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ находится Π² нСстандартном мСстС (Π½Π΅ устанавливаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pip). Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ мСстополоТСниС Π² настройку python.autoComplete.extraPaths ΠΈ пСрСзапуститС VS Code.

БыстрыС исправлСния

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Quick Fix позволяСт быстро Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НачнитС с Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, ΠΈ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ доступно дСйствиС ΠΊΠΎΠ΄Π° для автоматичСского Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ строки исходного ΠΊΠΎΠ΄Π° (Ссли Ρƒ вас установлСн ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² срСдС).НавСдитС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π½Π° тСкст (ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ волнистой Π»ΠΈΠ½ΠΈΠ΅ΠΉ), Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π»Π°ΠΌΠΏΠΎΡ‡ΠΊΡƒ Code Action, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° появится. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· списка ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Code Action Ρ‚Π°ΠΊΠΆΠ΅ распознаСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ популярныС сокращСния для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… распространСнных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Python: numpy ΠΊΠ°ΠΊ np, tensorflow ΠΊΠ°ΠΊ tf, pandas ΠΊΠ°ΠΊ pd, matplotlib.pyplot ΠΊΠ°ΠΊ plt, matplotlib , ΠΊΠ°ΠΊ mpl, math ΠΊΠ°ΠΊ m, scipi.io ΠΊΠ°ΠΊ spio ΠΈ scipy ΠΊΠ°ΠΊ sp.

Бписок ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° упорядочСн с инструкциями ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° для ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ) Π²Π²Π΅Ρ€Ρ…Ρƒ, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ инструкции для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ / ΠΈΠ»ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² (классов, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ‚. Π”.) Из ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ : Π­Ρ‚Π° функция Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования Microsoft Python Language Server. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ языковой сСрвСр, установитС python.jediEnabled Π½Π° false Π² своих настройках.json Ρ„Π°ΠΉΠ». ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΎΡ‚ΠΊΡ€Ρ‹Π² ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄ ( View> Command Palette … ΠΈΠ»ΠΈ β‡§βŒ˜P (Windows, Linux Ctrl + Shift + P)) ΠΈ запустив Python: Enable Команда Linting (Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Π² появившСмся Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡΡ мСню).

Π’Ρ‹Π±ΠΎΡ€ запуска / Линия Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ (REPL)

Команда Python: Run Selection / Line in Python Terminal (Shift + Enter) — это простой способ Π²Π·ΡΡ‚ΡŒ любой Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строкС, Ссли Π½Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€Π°, ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Python .Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Run Selection / Line Π² Python Terminal Ρ‚Π°ΠΊΠΆΠ΅ доступна Π² контСкстном мСню для Π²Ρ‹Π±ΠΎΡ€Π° Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅.

VS Code автоматичСски удаляСт отступы Π½Π° основС ΠΏΠ΅Ρ€Π²ΠΎΠΉ нСпустой строки выдСлСния, соотвСтствСнно сдвигая всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ строки Π²Π»Π΅Π²ΠΎ.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, выполняСмый Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ / REPL, накапливаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ экзСмпляр Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚.

Команда ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Python ΠΏΡ€ΠΈ нСобходимости; Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ срСду REPL Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Python: Start REPL .(ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ запуск ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, особСнно Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запускаСмый Π²Π°ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ — это import .)

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Python: Run Selection / Line in Python Terminal VS Code ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ тСкст Π² REPL Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ эта срСда Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Π°, ΠΈ Π² этом случаС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ строка Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹. Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Ρ‚Π°ΠΊΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π΅Ρ‰Π΅ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° REPL Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° людьми Π·Π° счСт примСнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ соглашСний для мСТстрочного ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°, отступов, ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ Ρ‚. Π”. (Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° страницС autopep8).Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ влияСт Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ самого ΠΊΠΎΠ΄Π°. (Π›ΠΈΠ½Ρ‚ΠΈΠ½Π³, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΡ… синтаксичСских, стилистичСских ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ошибок, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ошибкам. Π₯отя Π΅ΡΡ‚ΡŒ нСбольшоС совпадСниС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³ΠΎΠΌ, эти Π΄Π²Π΅ возмоТности Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.)

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ исходного ΠΊΠΎΠ΄Π° с использованиСм autopep8 (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ yapf.

ΠžΠ±Ρ‰ΠΈΠ΅ настройки форматирования

Настройка
(python.Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.)
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ОписаниС
ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ "autopep8" Π—Π°Π΄Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ: autopep8, yapf ΠΈΠ»ΠΈ black.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, относящиСся ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€Ρƒ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ настройки ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ модулям форматирования. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python ΠΈΡ‰Π΅Ρ‚ срСдство форматирования Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ pythonPath . Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСдство форматирования Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ это мСсто Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ настройкС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ.ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ pip install ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€Π°Π².

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ шаги Настройка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
(python.formatting.)
Настройка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ
(python.formatting.)
autopep8 pip install pep8
pip install —upgrade autopep8
autopep8Args autopep8 ΠŸΡƒΡ‚ΡŒ
Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅) pip install Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Args Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠŸΡƒΡ‚ΡŒ
япф pip install yapf yapfArgs yapfPath

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ : По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Black formatter Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн, ΠΊΠΎΠ³Π΄Π° Π°ΠΊΡ‚ΠΈΠ²Π½Π° срСда Python 2.ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ сообщСниС Β«Formatter black Π½Π΅ установлСн. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ?Β». Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Black Π² ΠΎΡ‚Π²Π΅Ρ‚, появится Π΄Ρ€ΡƒΠ³ΠΎΠ΅ сообщСниС: «НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Π²Π΅Ρ€ΡΠΈΡŽ, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΡƒΡŽ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ blackΒ» Для Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ подходящСго распрСдСлСния Β».

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСдство форматирования Black с Python 2, сначала установитС Black Π² срСдС Python 3. Π—Π°Ρ‚Π΅ΠΌ установитС для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° python.formatting.blackPath это мСсто установки.

ΠŸΡ€ΠΈ использовании настраиваСмых Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня строки Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом Π² спискС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².НапримСр:

  "python.formatting.autopep8Args": ["--max-line-length", "120", "--experimental"],
"python.formatting.yapfArgs": ["--style", "{based_on_style: chromium, indent_width: 20}"],
"python.formatting.blackArgs": ["--line-length", "100"]  

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ элСмСнт Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня {based_on_style: chromium, indent_width: 20} являСтся СдинствСнным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, поэтому ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого значСния Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт.

Поиск ΠΈ устранСниС нСисправностСй

Если Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
НСвСрный ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ python. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ настройку pythonPath .
Π€ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€ Π½Π΅ установлСн Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ срСдС. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² располоТСниС, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² настройкС pythonPath , ΠΈ запуститС pip install для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€Π°.
НСвСрный ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€Ρƒ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° python.formatting. Path .
ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для модуля форматирования Π½Π΅Π²Π΅Ρ€Π½Ρ‹. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ python.formatting. Path Π½Π΅ содСрТит Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ‡Ρ‚ΠΎ python.formatting. Args содСрТит список ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ "python.formatting.yapfArgs ": [" --style "," {based_on_style: chromium, indent_width: 20} "] .

ΠŸΡ€ΠΈ использовании Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ срСдства форматирования VS Code Π²Ρ‹Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ вставкС исходного ΠΊΠΎΠ΄Π° Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€: Π§Π΅Ρ€Π½Ρ‹ΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«Π’Ρ‹Π±ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Β».

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ появлСниС этого прСдупрСТдСния, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ запись Π² настройки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ вставкС для Ρ„Π°ΠΉΠ»ΠΎΠ² Python:

  "[ΠΏΠΈΡ‚ΠΎΠ½]": {
    "Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.formatOnPaste ": false
}  

Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python добавляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°: Extract Variable , Extract Method ΠΈ Sort Imports .

Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ всС ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ вхоТдСния Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ тСкста Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области ΠΈ замСняСт ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Новому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ присвоСно имя newvariableNNN , Π³Π΄Π΅ NNN — случайноС число.

Π’Ρ‹Π·Π²Π°Π½ΠΎ:

  • ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½ΠΎΠ΅ мСню: Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π˜Π·Π²Π»Π΅Ρ‡ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ .
  • Command Palette (β‡§βŒ˜P (Windows, Linux Ctrl + Shift + P)), Π·Π°Ρ‚Π΅ΠΌ Python Refactor: Extract Variable .
  • ΠΠ°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ сочСтаниС клавиш для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ python.refactorExtractVariable .

Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ всС ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ вхоТдСния Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ выраТСния ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области ΠΈ замСняСт ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Новому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ присвоСно имя newmethodNNN , Π³Π΄Π΅ NNN — случайноС число.

Π’Ρ‹Π·Π²Π°Π½ΠΎ:

  • ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½ΠΎΠ΅ мСню: Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Extract Method .
  • Command Palette (β‡§βŒ˜P (Windows, Linux Ctrl + Shift + P)), Π·Π°Ρ‚Π΅ΠΌ Python Refactor: Extract Method .
  • ΠΠ°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ сочСтаниС клавиш для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ python.refactorExtractMethod .

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

Sort Imports ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ isort для объСдинСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ модуля Π² ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ import ΠΈ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° import Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС.

Π’Ρ‹Π·Π²Π°Π½ΠΎ:

  • Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° (Π²Ρ‹Π±ΠΎΡ€ Π½Π΅ трСбуСтся)
  • ΠŸΠ°Π»ΠΈΡ‚Ρ€Π° ΠΊΠΎΠΌΠ°Π½Π΄

  • (β‡§βŒ˜P (Windows, Linux Ctrl + Shift + P)), Π·Π°Ρ‚Π΅ΠΌ Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ Python: Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
  • ΠΠ°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ сочСтаниС клавиш для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ python.sortImports

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для isort ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² настройкС python.sortImports.args , Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, являСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом Π² массивС:

  "ΠΏΠΈΡ‚ΠΎΠ½.sortImports.args ": [" -rc "," --atomic "],  

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ настраиваСмый сцСнарий isort, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ python.sortImports.path , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сохранСны Π² Ρ„Π°ΠΉΠ»Π΅ .isort.cfg , ΠΊΠ°ΠΊ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ isortΒ».

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ : Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ с isort4 Π½Π° isort5, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹, см. Руководство ΠΏΠΎ обновлСнию isort5 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

  • Π›ΠΈΠ½Ρ‚ΠΈΠ½Π³ — Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, настройка ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠ² Python.
  • Debugging — ΠΠ°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ Python ΠΊΠ°ΠΊ локально, Ρ‚Π°ΠΊ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ.
  • ВСстированиС — настройка тСстовых срСд ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, запуск ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° тСстов.
  • Basic Editing — Π£Π·Π½Π°ΠΉΡ‚Π΅ ΠΎ ΠΌΠΎΡ‰Π½ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ VS Code.
  • Навигация ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ — быстроС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ исходному ΠΊΠΎΠ΄Ρƒ.
  • IntelliSense — ΡƒΠ·Π½Π°ΠΉΡ‚Π΅ ΠΎ функциях IntelliSense.

29.01.2019

.ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠ΄Π°

— докумСнтация Python 3.9.0

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ Π΄Π΅Ρ‚Π°Π»ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CPython.
ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… прСдставляСт собой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ исполняСмого ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»
связаны с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

PyCodeObject

C-структура ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠ΄Π°. Π’
поля этого Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π² любоС врСмя.

PyTypeObject PyCode_Type

Π­Ρ‚ΠΎ экзСмпляр PyTypeObject , ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Python
ΠΊΠΎΠ΄ Ρ‚ΠΈΠΏ.

int PyCode_Check (PyObject * co )

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ true, Ссли co являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ с ΠΊΠΎΠ΄ΠΎΠΌ .

ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» PyCode_GetNumFree (PyCodeObject * co )

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ количСство свободных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² co .

PyCodeObject * PyCode_New (int argcount , int kwonlyargcount , int nlocals , int stacksize , int flags , PyObject * ΠΊΠΎΠ΄ , PyObject * consts , ΠΈΠΌΠ΅Π½Π° PyObject * varnames , PyObject * freevars , PyObject * cellvars , PyObject * имя Ρ„Π°ΠΉΠ»Π° , PyObject * имя , int firstlineno , PyObject * lnotab )
Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Новая ссылка.

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ΄Π°. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ΄Π° для создания Ρ„Ρ€Π΅ΠΉΠΌΠ°,
вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ PyCode_NewEmpty () . Π’Ρ‹Π·ΠΎΠ² PyCode_New () Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ
ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ вас ΠΊ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ вСрсии Python, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°
часто мСняСтся.

PyCodeObject * PyCode_NewWithPosOnlyArgs (int argcount , int posonlyargcount , int kwonlyargcount , int nlocals , int stacksize , int flags , PyObject , int flags , PyObject * ΠΈΠΌΠ΅Π½Π° , PyObject * varnames , PyObject * freevars , PyObject * cellvars , PyObject * filename ,

.

1. Командная строка ΠΈ срСда — докумСнтация Python 3.9.0

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ CPython сканируСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку ΠΈ срСду Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ…
настройки.

Π”Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CPython: Π‘Ρ…Π΅ΠΌΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Π’ΠΈΠ΄Π΅Ρ‚ΡŒ
ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов.

1.1. Командная строка

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· этих ΠΎΠΏΡ†ΠΈΠΉ:

 python [-bBdEhiIOqsSuvVWx?] [-C ΠΊΠΎΠΌΠ°Π½Π΄Π° | -m имя-модуля | сцСнарий | -] [Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹]
 

Π‘Π°ΠΌΡ‹ΠΉ распространСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования — это, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, простой Π²Ρ‹Π·ΠΎΠ² скрипта:

1.1.1. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ интСрфСйса

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΡ…ΠΎΠΆ Π½Π° интСрфСйс ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ UNIX, Π½ΠΎ прСдоставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π°:

  • ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ со стандартным Π²Ρ…ΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊ tty-устройству, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ
    ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ выполняСт ΠΈΡ… Π΄ΠΎ EOF (символа ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅
    произвСсти, Ρ‡Ρ‚ΠΎ с Ctrl-D Π² UNIX ΠΈΠ»ΠΈ Ctrl-Z, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² Windows) читаСтся.

  • ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠΌ Π² качСствС стандартного Π²Π²ΠΎΠ΄Π°
    Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈ выполняСт сцСнарий ΠΈΠ· этого Ρ„Π°ΠΉΠ»Π°.

  • Когда вызываСтся с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΎΠ½ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈ выполняСт
    сцСнарий с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ· этого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

  • ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ -c ΠΎΠ½ выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (Ρ‹) Python, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ
    ΠΊΠΎΠΌΠ°Π½Π΄Π° . Π—Π΄Π΅ΡΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ…
    Π½ΠΎΠ²Ρ‹Π΅ строки. Π’Π΅Π΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²Π°ΠΆΠ½Ρ‹ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… Python!

  • ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ с -m имя-модуля , Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ находится Π½Π°
    ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Python ΠΈ выполняСтся ΠΊΠ°ΠΊ скрипт.

Π’ Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ вСсь Π²Π²ΠΎΠ΄ анализируСтся ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ.

ΠžΠΏΡ†ΠΈΡ интСрфСйса Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ список ΠΎΠΏΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ,
всС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π² sys.argv — ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ
элСмСнт, Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ индСкс ( sys.argv [0] ), прСдставляСт собой строку, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΡƒΡŽ
источник.

-c <ΠΊΠΎΠΌΠ°Π½Π΄Π°>

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Python Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ . ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСсколькими
ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ символами Π½ΠΎΠ²ΠΎΠΉ строки, со Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, ΠΊΠ°ΠΊ Π²
Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ модуля.

Если Π·Π°Π΄Π°Π½Π° эта опция, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт sys.argv Π±ΡƒΠ΄Π΅Ρ‚
"-c" ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Π½Π°Ρ‡Π°Π»ΠΎ
sys.path (позволяСт ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΊΠ°ΠΊ Π²Π΅Ρ€Ρ…Π½ΠΈΠ΅
ΠΌΠΎΠ΄ΡƒΠ»ΠΈ уровня).

Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ событиС Π°ΡƒΠ΄ΠΈΡ‚Π° cpython.run_command с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ command .

-m <имя-модуля>

НайдитС sys.path для Π½Π°Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ модуля ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ содСрТимоС ΠΊΠ°ΠΊ
ΠΌΠΎΠ΄ΡƒΠ»ΡŒ __main__ .

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ являСтся имя модуля , Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°
(

.

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

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