X = 1
a = X # Разделяют тот же самый объект в памяти
a = 2 # Переустанавливает только a, значением X по-прежнему будет 1
print(X)
func(**словарь) передает все пары ключ / значение в словаре как отдельные ключевые аргументы. Неважно, в каком порядке в
dct указаны элементы: функция распределит их поименно. Такой тип сопоставления аргументов называется «ключевое». foo(first = 1, second = 'Текст') # как интерпретатор видит аргументы
Существует также позиционное сопоставление аргументов
foo(arg1, arg2), где аргументы сопоставляются по их положению. Чтобы оно заработало со словарем dct, придется передать их так:foo(dct['first'], dct['second'])
Что выведет код выше?
  Anonymous Quiz
    12%
    <__main__.MyClass object at 0x...>
      
    16%
    <class 'int'>, <class 'list'>
      
    68%
    <class 'tuple'>
      
    4%
    Error
      
    Инструкция return может возвращать объект любого типа, поэтому с ее помощью можно возвращать сразу несколько значений, упаковав их в кортеж или в коллекцию любого другого типа. 
Выглядит так, как будто функция возвращает два значения, но на самом деле – это единственный кортеж, состоящий из двух элементов, а необязательные окружающие скобки просто опущены. После возврата из функции можно использовать операцию присваивания кортежа, чтобы извлечь отдельные элементы. Переменные X и L изменятся после вызова функции, но только потому, что мы явно это предусмотрели.
  def multiple(x, y):
x = 2 # Изменяется только локальное имя
y = [3, 4]
return x, y # Новые значения возвращаются в виде кортежа
X = 1
L = [1, 2]
Z = multiple(X, L) # Результаты присваиваются именам в вызывающей программе
print(Z) # (2, [3, 4]) — это кортеж
Выглядит так, как будто функция возвращает два значения, но на самом деле – это единственный кортеж, состоящий из двух элементов, а необязательные окружающие скобки просто опущены. После возврата из функции можно использовать операцию присваивания кортежа, чтобы извлечь отдельные элементы. Переменные X и L изменятся после вызова функции, но только потому, что мы явно это предусмотрели.
Чем отличается сопоставление аргументов функции func(*arg_obj) от func(**arg_obj)?
  Anonymous Quiz
    12%
    * передает словарь, ** — любой итерируемый объект
      
    80%
    * передает любой итерируемый объект, ** —  словарь
      
    5%
    * позволяет сгенерировать значения аргументов, ** — подставляет везде None
      
    4%
    Ничем
      
    def func(*имя) # *имя собирает любые добавочные не прошедшие сопоставление аргументы в кортеж, а **имя — в словарь.
В версии Python 3.0 и выше любые обычные аргументы или аргументы со значениями по умолчанию, следующие за формой
*имя или за единственным символом *, являются именованными аргументами, которые при вызове функции должны передаваться только по имени.В  каком порядке в функции указываются аргументы?
  Anonymous Quiz
    72%
    Позиционные, ключевые, *итерируемый_объект, **словарь
      
    8%
    Позиционные, ключевые, **словарь, *итерируемый_объект
      
    9%
    Ключевые, позиционные, **словарь, *итерируемый_объект
      
    11%
    Порядок неважен
      
    Ниже приводится несколько правил в языке Python, которым вам необходимо следовать, если у вас появится потребность использовать специальные режимы сопоставления аргументов:
— В вызове функции аргументы должны указываться в следующем порядке: любые позиционные аргументы (значения), за которыми могут следовать
любые именованные аргументы (имя=значение) и аргументы в форме *итерируемый объект, за которыми могут следовать аргументы в форме **словарь.
— В заголовке функции аргументы должны указываться в следующем порядке: любые обычные аргументы (name), за которыми могут следовать аргументы со значениями по умолчанию (name=value), за которыми следуют аргументы в форме *name (или * в 3.0), если имеются, за которыми могут следовать любые имена или пары name=value аргументов, которые передаются только по имени (в 3.0), за которыми могут следовать аргументы в форме **имя.
  — В вызове функции аргументы должны указываться в следующем порядке: любые позиционные аргументы (значения), за которыми могут следовать
любые именованные аргументы (имя=значение) и аргументы в форме *итерируемый объект, за которыми могут следовать аргументы в форме **словарь.
— В заголовке функции аргументы должны указываться в следующем порядке: любые обычные аргументы (name), за которыми могут следовать аргументы со значениями по умолчанию (name=value), за которыми следуют аргументы в форме *name (или * в 3.0), если имеются, за которыми могут следовать любые имена или пары name=value аргументов, которые передаются только по имени (в 3.0), за которыми могут следовать аргументы в форме **имя.
В Python 3. Х обобщены правила упорядочения в заголовках функций, чтобы позволить указывать аргументы с передачей только по ключевым словам — аргументы, которые должны передаваться только по ключевому слову и никогда не будут заполняться позиционными аргументами. Они полезны, когда необходима функция, которая и обрабатывает любое количество аргументов (возможно, конфигурационные параметры).
Синтаксически аргументы с передачей только по ключевым словам записываются как именованные аргументы, которые могут появляться после конструкции
  Синтаксически аргументы с передачей только по ключевым словам записываются как именованные аргументы, которые могут появляться после конструкции
*аргументы в списке аргументов. Значения для таких аргументов должны передаваться в вызове с использованием синтаксиса ключевых аргументов. В задаче выше аргумент а может передаваться по имени или по позиции, b собирает добавочные позиционные аргументы, а с должно передаваться только по ключевому слову.Мы также можем применять в списке аргументов сам по себе символ 
  *, указывая на то, что функция не принимает список аргументов переменной длины, но по-прежнему ожидает передачи всех аргументов, следующих за символом *, по ключевому слову. В показанной в задаче функции kwonly() аргумент а может передаваться по позиции или по имени, но аргументы b и с обязаны передаваться по ключевому слову, и никакие добавочные позиционные аргументы не разрешены.Какой тип данных не поддерживает прямое сравнение (a > b)?
  Anonymous Quiz
    10%
    Строки
      
    42%
    Словари
      
    3%
    Числа
      
    45%
    Все вышеперечисленные типы поддерживают прямое сравнение
      
    — Сравнение строк основывается на их лексикографическом порядке, который определяется значениемUnicode каждого символа в строке ('apple' > 'banana' # False
— Сравнение чисел происходит по правилам математики (3 < 4 # True)
— А вот словари сравниваются (только оператором ==) , если у них одинаковые ключи. Операторами
  — Сравнение чисел происходит по правилам математики (3 < 4 # True)
— А вот словари сравниваются (только оператором ==) , если у них одинаковые ключи. Операторами
> < их не сравнить, получим ошибку:TypeError: '>' not supported between instances of 'dict' and 'dict'