1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Почему в данном коде закомментирование строки изменяет переменную находящуюся выше этого...

Тема в разделе "python", создана пользователем searchengines, 22 май 2019.


Поделиться в соц сетях

  1. searchengines

    searchengines Administrator

    Регистрация:
    5 янв 2019
    Сообщения:
    1.653
    Симпатии:
    2
    Баллы:
    38
    Хочу протестировать функцию возвращающую аргументы "охватывающей" функции:

    import inspect
    import unittest


    def outer_func_args() -> dict:
    """Get outer function arguments."""
    currframe = inspect.currentframe()
    callerframe = inspect.getouterframes(currframe, 2)
    args, _, _, values = inspect.getargvalues(callerframe[1][0])
    return values


    class TestOuterFuncArgs(unittest.TestCase):
    def test_(self):
    """Test function outer_func_args()."""
    def func(a, b, c, d):
    args = outer_func_args()
    # See print() result
    print("outer_func_args before assertEqual(): {}".format(args))
    r = {'a': 123, 'b': 45.56, 'c': "adc", "d": 23 + 4j}
    self.assertEqual(args, r)
    func(123, 45.56, "adc", 23 + 4j)
    if __name__ == '__main__':
    unittest.main()


    Запускаем скрипт.

    Тест не пройден. Функция print(), вызванная перед методом assertEqual печатает следующее (обратите внимание на наличие self):

    outer_func_args before assertEqual(): {'a': 123, 'b': 45.56, 'c': 'adc', 'd': (23+4j), 'self': <forstack.TestOuterFuncArgs testMethod=test_>}


    Но если мы закомментируем метод assertEqual():

    class TestOuterFuncArgs(unittest.TestCase):
    def test_(self):
    """Test function outer_func_args()."""
    def func(a, b, c, d):
    args = outer_func_args()
    # See print() result later
    print("outer_func_args before assertEqual(): {}".format(args))
    r = {'a': 123, 'b': 45.56, 'c': "adc", "d": 23 + 4j}
    # self.assertEqual(args, r)
    func(123, 45.56, "adc", 23 + 4j)


    то тогда функция print(), находящаяся на том же месте (перед assertEqual(), напечатает следующее (обратите внимание на отсутствие self):

    outer_func_args before assertEqual(): {}: {'a': 123, 'b': 45.56, 'c': 'adc', 'd': (23+4j)}


    Почему в данном коде закомментирование строки c assertEqual() изменяет переменную args находящуюся выше этого комментария, а именно добавляет/удаляет self из args?
     

Поделиться этой страницей