Продвинутые советы по Python, о которых следует помнить.

СОВЕТ 1

Если вы хотите напечатать несколько значений с заданным пользователем разделителем, используйте параметр sep.

str1 = 'username'
str2 = 'yourwebsite.com'
print(str1, str2, sep = '@')
# Output: [email protected]

СОВЕТ 2

Для символа новой строки функция печати Python по умолчанию имеет в конце символ \n. Однако иногда вы можете захотеть использовать другой символ в конце функции печати. Параметр end=работает отлично.

print("Dennis" , end =", " )
print("Yancy", end = ' ')
print("Jr", end = '.')
# Output: Dennis, Yancy Jr.

СОВЕТ 3

Если вы хотите напечатать несколько строк, используйте 3 кавычки (работают как одинарные, так и двойные кавычки).

strng = '''Have a nice day.
It is cold outside.
Put on a warm coat.'''
print(strng)

СОВЕТ 4

Понимание списков — это круто, и на самом деле они работают быстрее, если вы обрабатываете несколько элементов. Кроме того, понимание списков является pythonic.

Вот логика понимания списка:

myList = [returned_value  for item in list condition_logic ]

Вот более сложный пример.

# Create a list of numbers from 0 - 99
numbers = range(0, 100)
# Square all number between 0 and 99 inclusive
squares = [num * num for num in numbers] 

СОВЕТ 5

Распаковка списка. Предположим, вы хотите назначить один или несколько элементов специально для списка, а остальные элементы — для другого списка.

a = [1, 2, 3, 4, 5]
d, *f = a
print(d) # 1
print(f) # [2, 3, 4, 5]

Or

mylist = ["yellow", "gray", "blue", "pink", "brown"] 
a, *b, c = mylist
print(a) # yellow
print(b) # ['gray', 'blue', 'oink']
print(c) # brown

СОВЕТ 6

В структуре данных словаря Python по умолчанию нет порядка индексов. Думайте о парах ключ-значение как о мешке беспорядочных товаров. Это делает работу со словарями невероятно эффективной. Однако бывают случаи, когда вам просто нужно заказать словарь.

Не волнуйтесь, OrderedDict — это модуль в библиотеке коллекций Python, который делает именно это.

import collections
d = collections.OrderedDict()
d[0] = 0
d[1] = 100
d[2] = 200
print(d) # OrderedDict([(0, 0), (1, 100), (2, 200)])

СОВЕТ 7

Если вам нужны многочисленные максимальные или минимальные значения из набора переменных, функции max и min могут оказаться недостаточными.

Обратите внимание на библиотеку heapq, которая значительно упрощает получение n наибольших или n наименьших значений по сравнению с традиционными методами.

import heapq  
grades = [1.5, 78, 6, 130, 91, 1005.2, 1741, 1.9, 112, 809.5] 
print(heapq.nlargest(2, grades)) # [1741, 1005.2]
print(heapq.nsmallest(5, grades)) # [1.5, 1.9, 6, 78, 91]

СОВЕТ 8

Тернарный оператор должен сократить оператор if до одной строки.

a= 100  
c = True if a**2 > 10000 else False 
print(c) # False

СОВЕТ 9

Иногда необходимо добавить счетчик в цикл. Существует функция перечисления, которая легко позволяет это сделать.

fruits = ['apples', 'peaches', 'dragon fruit', 'guava']
for f, fruit in enumerate(fruits):
    if f < 3:
        print([f, fruit])
# [0, 'apples']
# [1, 'peaches']
# [2, 'dragon fruit']

СОВЕТ 9

Иногда при написании кода вам нужно настроить диапазоны дат. С python вы можете легко добавлять или вычитать дни или недели.

today = datetime.date.today()
twoWeeksAgo = today + datetime.timedelta(days=-today.weekday(), weeks=-2)
thirteenDaysLater = twoWeeksAgo + timedelta(days = 13)
print('Today is', today) 
print('Two Weeks Ago', twoWeeksAgo)
print('Thirteen days after 2 weeks ago', thirteenDaysLater)
# Today is 2022-01-26
# Two Weeks Ago 2022-01-10
# Thirteen days after 2 weeks ago 2022-01-23

СОВЕТ 10

Оператор yield принадлежит к тому же семейству, что и оператор return. Разница в том, что хотя оператор return возвращает значение и функция завершается, оператор yield может возвращать последовательность значений, то есть имя.

def f1(a):
    yield a
    yield a**2
    yield a**3
    
print (f1(15))
for i in f1(15):
    print (i)
# Output
# <generator object f1 at 0x0000014F81BB2740>
# 15
# 225
# 3375

Бонус

Если вы очищаете веб-страницу с фреймами, вам может потребоваться переключить веб-фреймы, чтобы заставить ее работать. Это работает, когда вы чистите с помощью селена.

driver = webdriver.Firefox() #('geckodriver.exe')
driver.implicitly_wait(1)
NY = 'https://appext20.dos.ny.gov/pls/ucc_public/web_search.main_frame'
driver.get(NY)
# select search by date
iframe = driver.find_element(By.XPATH, '/html/frameset/frame[1]')
driver.switch_to.frame(iframe)
driver.find_element(By.XPATH, '/html/body/center[2]/a[3]').click()
driver.switch_to.default_content()
iframe = driver.find_element(By.XPATH, '/html/frameset/frame[2]')
driver.switch_to.frame(iframe)

И вот оно. Спасибо за чтение.

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.