4.3 Начало работы с языком Python

Автор:Доброта, Создано: 2019-04-28 09:55:02, Обновлено:

Предварительный пух

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

Мы сосредоточимся на Python 3, так как это версия, которую вы должны использовать.

Свойства

Python сильно типируется (т.е. типы применяются), динамически, имплицитно типируется (т.е. вам не нужно декларировать переменные), чувствителен к буквам (т.е. var и VAR - это две разные переменные) и ориентирован на объект (т.е. все является объектом).

Поиск помощи

Помощь в Python всегда доступна прямо в интерпретаторе. Если вы хотите знать, как работает объект, все, что вам нужно сделать, это позвонить help() ! Также полезны dir() , который показывает вам все методы объекта, и .Доктора., который показывает строку документации:

>>> help(5)
Help on int object:
(etc etc)

>>> dir(5)
['__abs__', '__add__', ...]

>>> abs.__doc__
'abs(number) -> number

Return the absolute value of the argument.

Синтаксис

В Python нет обязательных окончательных символов заявления, а блоки определяются вставкой. Ввод для начала блока, вывод для окончания одного. Заявления, которые ожидают уровня вставки, заканчиваются точкой (:). Комментарии начинаются с знака фунта (#) и представляют собой однострочные, многострочные строки используются для многострочных комментариев. Значения присваиваются (на самом деле объекты связаны с именами) знаком равенства (=), а тестирование равенства выполняется с помощью двух знаков равенства (==). Вы можете увеличить / уменьшить значения, используя операторы += и -= соответственно на правой стороне суммы. Это работает на многих типах данных, включая строки.

>>> myvar = 3
>>> myvar += 2
>>> myvar
5
>>> myvar -= 1
>>> myvar
4
"""This is a multiline comment.
The following lines concatenate the two strings."""
>>> mystring = "Hello"
>>> mystring += " world."
>>> print(mystring)
Hello world.
# This swaps the variables in one line(!).
# It doesn't violate strong typing because values aren't
# actually being assigned, but new objects are bound to
# the old names.
>>> myvar, mystring = mystring, myvar

Типы данных

Структуры данных, доступные в Python, это списки, тупли и словари. Набор доступен в библиотеке наборов (но встроен в Python 2.5 и более поздние версии). Списки похожи на одномерные массивы (но вы также можете иметь списки других списков), словари - ассоциативные массивы (также известные как хэш-таблицы), а тупли - неизменные одномерные массивы (Python arrays может быть любого типа, поэтому вы можете смешивать, например, целые числа, строки и т. Д. в списках / словарях / тупли). Индекс первого элемента во всех типах массива составляет 0.

>>> sample = [1, ["another", "list"], ("a", "tuple")]
>>> mylist = ["List item 1", 2, 3.14]
>>> mylist[0] = "List item 1 again" # We're changing the item.
>>> mylist[-1] = 3.21 # Here, we refer to the last item.
>>> mydict = {"Key 1": "Value 1", 2: 3, "pi": 3.14}
>>> mydict["pi"] = 3.15 # This is how you change dictionary values.
>>> mytuple = (1, 2, 3)
>>> myfunction = len
>>> print(myfunction(mylist))
3

Вы можете получить доступ к диапазонам массива с помощью запятой (:). Оставляя начальный индекс пустым, предполагается первый пункт, оставляя конечный индекс, предполагается последний пункт. Индексирование является инклюзивным-эксклюзивным, поэтому указание [2:10] вернет пункты [2] (третий пункт, из-за 0-индексирования) до [9] (десятый пункт), включая (8 пунктов).

>>> mylist = ["List item 1", 2, 3.14]
>>> print(mylist[:])
['List item 1', 2, 3.1400000000000001]
>>> print(mylist[0:2])
['List item 1', 2]
>>> print(mylist[-3:-1])
['List item 1', 2]
>>> print(mylist[1:])
[2, 3.14]
# Adding a third parameter, "step" will have Python step in
# N item increments, rather than 1.
# E.g., this will return the first item, then go to the third and
# return that (so, items 0 and 2 in 0-indexing).
>>> print(mylist[::2])
['List item 1', 3.14]

Струнные

Его строки могут использовать либо одиночные, либо двойные котировочные знаки, и вы можете иметь котировочные знаки одного типа внутри строки, которая использует другой тип (т.е. Он сказал hello. действителен).тройные двойные (или одиночные) котировки(). Строки Python всегда являются Unicode, но есть еще один тип строки, который является чистыми байтами. Они называются bystrings и представлены префиксом b, например b Hello \xce\xb1. Чтобы заполнить строку значениями, вы используете оператор % (modulo) и тупл. Каждый %s заменяется элементом из тупла, слева направо, и вы также можете использовать заменители словаря, например:

>>> print("Name: %s\
Number: %s\
String: %s" % (myclass.name, 3, 3 * "-"))
Name: Stavros
Number: 3
String: ---

strString = """This is
a multiline
string."""

# WARNING: Watch out for the trailing s in "%(key)s".
>>> print("This %(verb)s a %(noun)s." % {"noun": "test", "verb": "is"})
This is a test.

>>> name = "Stavros"
>>> "Hello, {}!".format(name)
Hello, Stavros!
>>> print(f"Hello, {name}!")
Hello, Stavros!

Заявления о контроле потока

Указания управления потоком if, for и while. Нет switch; вместо этого используйте if. Используйте for для перечисления через членов списка. Чтобы получить последовательность чисел, которую вы можете повторять, используйте range() . Синтаксис этих заявлений выглядит следующим образом:

rangelist = list(range(10))
>>> print(rangelist)
range(0, 10)
>>> print(list(rangelist))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for number in rangelist:
    # Check if number is one of
    # the numbers in the tuple.
    if number in (3, 4, 7, 9):
        # "Break" terminates a for without
        # executing the "else" clause.
        break
    else:
        # "Continue" starts the next iteration
        # of the loop. It's rather useless here,
        # as it's the last statement of the loop.
        continue
else:
    # The "else" clause is optional and is
    # executed only if the loop didn't "break".
    pass # Do nothing

if rangelist[1] == 2:
    print("The second item (lists are 0-based) is 2")
elif rangelist[1] == 3:
    print("The second item (lists are 0-based) is 3")
else:
    print("Dunno")

while rangelist[1] == 1:
    print("We are trapped in an infinite loop!")

Функции

Функции декларируются с помощью ключевого слова def. Опциональные аргументы устанавливаются в декларации функции после обязательных аргументов путем присвоения значения по умолчанию. Для названных аргументов имя аргумента присваивается значение. Функции могут возвращать тупл (и с помощью разборки туплов вы можете эффективно возвращать несколько значений). Функции Ламбды - это адхоц-функции, которые состоят из одного заявления. Параметры передаются по ссылке, но неизменные типы (туплы, инты, строки и т. д.) не могут быть изменены в вызову. Это связано с тем, что только местоположение элемента в памяти передается, а связывание другого объекта с переменной отбрасывает старый, поэтому неизменные типы заменяются. Например:

# Same as def funcvar(x): return x + 1
funcvar = lambda x: x + 1
>>> print(funcvar(1))
2

# an_int and a_string are optional, they have default values
# if one is not passed (2 and "A default string", respectively).
def passing_example(a_list, an_int=2, a_string="A default string"):
    a_list.append("A new item")
    an_int = 4
    return a_list, an_int, a_string

>>> my_list = [1, 2, 3]
>>> my_int = 10
>>> print(passing_example(my_list, my_int))
([1, 2, 3, 'A new item'], 4, "A default string")
>>> my_list
[1, 2, 3, 'A new item']
>>> my_int
10

Классы

Python поддерживает ограниченную форму многократного наследования в классах. Частные переменные и методы могут быть объявлены (по обычаю, это не применяется языком) путем добавления ведущего подчеркивания (например, _spam).

class MyClass(object):
    common = 10
    def __init__(self):
        self.myvariable = 3
    def myfunction(self, arg1, arg2):
        return self.myvariable

    # This is the class instantiation

>>> classinstance = MyClass()
>>> classinstance.myfunction(1, 2)
3
# This variable is shared by all instances.
>>> classinstance2 = MyClass()
>>> classinstance.common
10
>>> classinstance2.common
10
# Note how we use the class name
# instead of the instance.
>>> MyClass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# This will not update the variable on the class,
# instead it will bind a new object to the old
# variable name.
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> MyClass.common = 50
# This has not changed, because "common" is
# now an instance variable.
>>> classinstance.common
10
>>> classinstance2.common
50

# This class inherits from MyClass. The example
# class above inherits from "object", which makes
# it what's called a "new-style class".
# Multiple inheritance is declared as:
# class OtherClass(MyClass1, MyClass2, MyClassN)
class OtherClass(MyClass):
    # The "self" argument is passed automatically
    # and refers to the class instance, so you can set
    # instance variables as above, but from inside the class.
    def __init__(self, arg1):
        self.myvariable = 3
        print(arg1)

>>> classinstance = OtherClass("hello")
hello
>>> classinstance.myfunction(1, 2)
3
# This class doesn't have a .test member, but
# we can add one to the instance anyway. Note
# that this will only be a member of classinstance.
>>> classinstance.test = 10
>>> classinstance.test
10

Исключения

Исключения в Python обрабатываются блоками try-except [exceptionname]:

def some_function():
    try:
        # Division by zero raises an exception
        10 / 0
    except ZeroDivisionError:
        print("Oops, invalid.")
    else:
        # Exception didn't occur, we're good.
        pass
    finally:
        # This is executed after the code block is run
        # and all exceptions have been handled, even
        # if a new exception is raised while handling.
        print("We're done with that.")

>>> some_function()
Oops, invalid.
We're done with that.

Импорт

Внешние библиотеки используются с ключевым словом import [libname]. Вы также можете использовать from [libname] import [funcname] для отдельных функций.

import random
from time import clock

randomint = random.randint(1, 100)
>>> print(randomint)
64

Файл I/O

Python имеет широкий спектр встроенных библиотек. В качестве примера приведем, как используется сериализация (конвертация структур данных в строки с использованием библиотеки pickle) с файлом I/O:

import pickle
mylist = ["This", "is", 4, 13327]
# Open the file C:\\binary.dat for writing. The letter r before the
# filename string is used to prevent backslash escaping.
myfile = open(r"C:\\binary.dat", "wb")
pickle.dump(mylist, myfile)
myfile.close()

myfile = open(r"C:\\text.txt", "w")
myfile.write("This is a sample string")
myfile.close()

myfile = open(r"C:\\text.txt")
>>> print(myfile.read())
'This is a sample string'
myfile.close()

# Open the file for reading.
myfile = open(r"C:\\binary.dat", "rb")
loadedlist = pickle.load(myfile)
myfile.close()
>>> print(loadedlist)
['This', 'is', 4, 13327]

Прочие

  • Условия могут быть привязаны: 1 < a < 3 проверяет, что a меньше 3 и больше 1.
  • Вы можете использовать del для удаления переменных или элементов в массивах.
  • Понимание списка обеспечивает мощный способ создания и манипулирования списками. Они состоят из выражения, за которым следует пункт for, за которым следует ноль или более пунктов if или for, например:
>>> lst1 = [1, 2, 3]
>>> lst2 = [3, 4, 5]
>>> print([x * y for x in lst1 for y in lst2])
[3, 4, 5, 6, 8, 10, 9, 12, 15]
>>> print([x for x in lst1 if 4 > x > 1])
[2, 3]
# Check if a condition is true for any items.
# "any" returns true if any item in the list is true.
>>> any([i % 3 for i in [3, 3, 4, 4, 3]])
True
# This is because 4 % 3 = 1, and 1 is true, so any()
# returns True.

# Check for how many items a condition is true.
>>> sum(1 for i in [3, 3, 4, 4, 3] if i == 4)
2
>>> del lst1[0]
>>> print(lst1)
[2, 3]
>>> del lst1
  • Глобальные переменные декларируются вне функций и могут быть прочитаны без каких-либо специальных деклараций, но если вы хотите написать им, вы должны декларировать их в начале функции с ключевым словом global, в противном случае Python свяжет этот объект с новой локальной переменной (осторожно, это небольшой улов, который может вас получить, если вы не знаете его).
number = 5

def myfunc():
    # This will print 5.
    print(number)

def anotherfunc():
    # This raises an exception because the variable has not
    # been bound before printing. Python knows that it an
    # object will be bound to it later and creates a new, local
    # object instead of accessing the global one.
    print(number)
    number = 3

def yetanotherfunc():
    global number
    # This will correctly change the global.
    number = 3

Эпилог

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


Больше