Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Глобальные и локальные переменныеСодержание книги
Поиск на нашем сайте
Листинг 11.25. Глобальные переменные def func(glob2): print("Значение глобальной переменной glob1 =", glob1) glob2 += 10 print("Значение локальной переменной glob2 =", glob2)
glob1, glob2 = 10, 5 func(77) # Вызываем функцию print("Значение глобальной переменной glob2 =", glob2)
Листинг 11.26. Локальные переменные def func(): local1 = 77 # Локальная переменная glob1 = 25 # Локальная переменная print("Значение glob1 внутри функции =", glob1) glob1 = 10 # Глобальная переменная func() # Вызываем функцию print("Значение glob1 вне функции =", glob1) try: print(local1) # Вызовет исключение NameError except NameError: # Обрабатываем исключение print("Переменная local1 не видна вне функции")
Листинг 11.27. Ошибка при обращении к переменной до присваивания значения def func(): # Локальная переменная еще не определена print(glob1) # Эта строка вызовет ошибку!!! glob1 = 25 # Локальная переменная glob1 = 10 # Глобальная переменная func() # Вызываем функцию # Результат выполнения: # UnboundLocalError: local variable 'glob1' referenced before assignment
Листинг 11.28. Использование ключевого слова global def func(): # Объявляем переменную glob1 глобальной global glob1 glob1 = 25 # Изменяем значение глобальной переменной print("Значение glob1 внутри функции =", glob1) glob1 = 10 # Глобальная переменная print("Значение glob1 вне функции =", glob1) func() # Вызываем функцию print("Значение glob1 после функции =", glob1)
x = 5 # Сохраняется ссылка, а не значение переменной x!!! func = lambda: x x = 80 # Изменили значение print(func()) # Выведет: 80, а не 5
Листинг 11.29. Сохранение значения переменной x = 5 # Сохраняется значение переменной x func = (lambda y: lambda: y)(x) x = 80 # Изменили значение print(func()) # Выведет: 5
Листинг 11.30. Сохранение значения с помощью параметра по умолчанию x = 5 # Сохраняется значение переменной x func = lambda x=x: x x = 80 # Изменили значение print(func()) # Выведет: 5
def func(): local1 = 54 glob2 = 25 print("Глобальные идентификаторы внутри функции") print(sorted(globals().keys())) print("Локальные идентификаторы внутри функции") print(sorted(locals().keys())) glob1, glob2 = 10, 88 func() print("Глобальные идентификаторы вне функции") print(sorted(globals().keys()))
def func(): local1 = 54 glob2 = 25 print("Локальные идентификаторы внутри функции") print(sorted(vars().keys())) glob1, glob2 = 10, 88 func() print("Глобальные идентификаторы вне функции") print(sorted(vars().keys())) print("Указание объекта в качестве параметра") print(sorted(vars(dict).keys())) print("Альтернативный вызов") print(sorted(dict.__dict__.keys())) Вложенные функции Листинг 11.31. Вложенные функции def func1(x): def func2(): print(x) return func2
f1 = func1(10) f2 = func1(99) f1() # Выведет: 10 f2() # Выведет: 99
def func1(x): def func2(): print(x) x = 30 return func2
f1 = func1(10) f2 = func1(99) f1() # Выведет: 30 f2() # Выведет: 30
def func1(x): def func2(x=x): # Сохраняем текущее значение, а не ссылку print(x) x = 30 return func2
f1 = func1(10) f2 = func1(99) f1() # Выведет: 10 f2() # Выведет: 99
Листинг 11.32. Ключевое слово nonlocal def func1(a): x = a def func2(b): nonlocal x # Объявляем переменную как nonlocal print(x) x = b # Можем изменить значение x в func1() return func2
f = func1(10) f(5) # Выведет: 10 f(12) # Выведет: 5 f(3) # Выведет: 12 Аннотации функций def func(a: "Параметр1", b: 10 + 5 = 3) -> None: print(a, b)
>>> def func(a: "Параметр1", b: 10 + 5 = 3) -> None: pass
>>> func.__annotations__ {'a': 'Параметр1', 'b': 15, 'return': None} Модули и пакеты print(__name__) # Выведет: __main__
Листинг 12.1. Проверка способа запуска модуля if __name__ == "__main__": print("Это главная программа") else: print("Импортированный модуль") 12.1. Инструкция import import time # Импортируем модуль time print(time.strftime("%d.%m.%Y")) # Выводим текущую дату
Листинг 12.2. Подключение нескольких модулей сразу import time, math # Импортируем несколько модулей сразу print(time.strftime("%d.%m.%Y")) # Текущая дата print(math.pi) # Число pi
math.pi
Листинг 12.3. Пример использования функции getattr() import math print(getattr(math, "pi")) # Число pi print(getattr(math, "x", 50)) # Число 50, т. к. x не существует
Листинг 12.4. Проверка существования атрибута import math def hasattr_math(attr): if hasattr(math, attr): return "Атрибут существует" else: return "Атрибут не существует" print(hasattr_math("pi")) # Атрибут существует print(hasattr_math("x")) # Атрибут не существует
Листинг 12.5. Использование псевдонимов import math as m # Создание псевдонима print(m.pi) # Число pi
Листинг 12.6. Содержимое модуля tests.py # -*- coding: utf-8 -*- x = 50
Листинг 12.7. Содержимое основной программы # -*- coding: utf-8 -*- import tests # Подключаем файл tests.py x = 22 print(tests.x) # Значение переменной x внутри модуля print(x) # Значение переменной x в основной программе input()
Листинг 12.8. Вывод ключей словаря modules # -*- coding: utf-8 -*- import tests, sys # Подключаем модули tests и sys print(sorted(sys.modules.keys())) input()
Листинг 12.9. Использование функции __import__() # -*- coding: utf-8 -*- s = "test" + "s" # Динамическое создание названия модуля m = __import__(s) # Подключение модуля tests print(m.x) # Вывод значения атрибута x input()
Листинг 12.10. Вывод списка всех идентификаторов # -*- coding: utf-8 -*- import tests print(dir(tests)) print(sorted(tests.__dict__.keys())) input() 12.2. Инструкция from Листинг 12.11. Инструкция from # -*- coding: utf-8 -*- from math import pi, floor as f print(pi) # Вывод числа pi # Вызываем функцию floor() через идентификатор f print(f(5.49)) # Выведет: 5 input()
from math import (pi, floor, sin, cos)
Листинг 12.12. Импорт всех идентификаторов из модуля # -*- coding: utf-8 -*- from math import * # Импортируем все идентификаторы из модуля math print(pi) # Вывод числа pi print(floor(5.49)) # Вызываем функцию floor() input()
Листинг 12.13. Содержимое файла module1.py # -*- coding: utf-8 -*- s = "Значение из модуля module1"
Листинг 12.14. Содержимое файла module2.py # -*- coding: utf-8 -*- s = "Значение из модуля module2"
Листинг 12.15. Содержимое основной программы # -*- coding: utf-8 -*- from module1 import * from module2 import * import module1, module2 print(s) # Выведет: "Значение из модуля module2" print(module1.s) # Выведет: "Значение из модуля module1" print(module2.s) # Выведет: "Значение из модуля module2" input()
Листинг 12.16. Использование атрибута __all__ # -*- coding: utf-8 -*- x, y, z, _s = 10, 80, 22, "Строка" __all__ = ["x", "_s"]
Листинг 12.17. Содержимое основной программы # -*- coding: utf-8 -*- from module3 import * print(sorted(vars().keys())) # Получаем список всех идентификаторов input()
Пути поиска модулей >>> import sys # Подключаем модуль sys >>> sys.path # path содержит список путей поиска модулей
# Это комментарий C:\folder1 C:\folder2
Листинг 12.18. Изменение списка путей поиска модулей # -*- coding: utf-8 -*- import sys sys.path.append(r"C:\folder1") # Добавляем в конец списка sys.path.insert(0, r"C:\folder2") # Добавляем в начало списка print(sys.path) input()
sys.path.append("C:\\folder1\\folder2\\folder3") Повторная загрузка модулей from imp import reload reload(<Объект модуля>)
# -*- coding: utf-8 -*- x = 150
>>> import sys >>> sys.path.append(r"C:\book") # Добавляем путь к папке с модулем >>> import tests2 # Подключаем модуль tests2.py >>> print(tests2.x) # Выводим текущее значение
>>> # Изменяем значение в модуле на 800 >>> import tests2 >>> print(tests2.x) # Значение не изменилось
Листинг 12.19. Повторная загрузка модуля >>> from imp import reload >>> reload(tests2) # Перезагружаем модуль <module 'tests2' from 'C:\book\tests2.py'> >>> print(tests2.x) # Значение изменилось Пакеты Листинг 12.20. Содержимое файлов __init__.py # -*- coding: utf-8 -*- print("__init__ из", __name__)
Листинг 12.21. Содержимое модулей module1.py, module2.py и module3.py # -*- coding: utf-8 -*- msg = "Модуль {0}".format(__name__)
Листинг 12.22. Содержимое файла main.py # -*- coding: utf-8 -*-
# Доступ к модулю folder1\module1.py import folder1.module1 as m1 # Выведет: __init__ из folder1 print(m1.msg) # Выведет: Модуль folder1.module1 from folder1 import module1 as m2 print(m2.msg) # Выведет: Модуль folder1.module1 from folder1.module1 import msg print(msg) # Выведет: Модуль folder1.module1
# Доступ к модулю folder1\folder2\module2.py import folder1.folder2.module2 as m3 # Выведет: __init__ из folder1.folder2 print(m3.msg) # Выведет: Модуль folder1.folder2.module2 from folder1.folder2 import module2 as m4 print(m4.msg) # Выведет: Модуль folder1.folder2.module2 from folder1.folder2.module2 import msg print(msg) # Выведет: Модуль folder1.folder2.module2
input()
import folder1.folder2.module2
print(folder1.folder2.module2.msg)
import folder1.folder2.module2 as m print(m.msg)
from folder1.folder2 import module2 print(module2.msg)
from folder1.folder2.module2 import msg print(msg)
from folder1.folder2.module2 import * print(msg)
# -*- coding: utf-8 -*- __all__ = ["module2", "module3"]
Листинг 12.23. Содержимое файла main.py # -*- coding: utf-8 -*- from folder1.folder2 import * print(module2.msg) # Выведет: Модуль folder1.folder2.module2 print(module3.msg) # Выведет: Модуль folder1.folder2.module3 input()
from.module import *
from..module import *
from...module import *
from.. import module
Листинг 12.24. Содержимое модуля module3.py # -*- coding: utf-8 -*-
# Импорт модуля module2.py из текущего каталога from. import module2 as m1 var1 = "Значение из: {0}".format(m1.msg) from.module2 import msg as m2 var2 = "Значение из: {0}".format(m2)
# Импорт модуля module1.py из родительского каталога from.. import module1 as m3 var3 = "Значение из: {0}".format(m3.msg) from..module1 import msg as m4 var4 = "Значение из: {0}".format(m4)
Листинг 12.25. Содержимое файла main.py # -*- coding: utf-8 -*- from folder1.folder2 import module3 as m print(m.var1) # Значение из: Модуль folder1.folder2.module2 print(m.var2) # Значение из: Модуль folder1.folder2.module2 print(m.var3) # Значение из: Модуль folder1.module1 print(m.var4) # Значение из: Модуль folder1.module1 input()
# -*- coding: utf-8 -*- import module2 # Ошибка! Поиск модуля по абсолютному пути var1 = "Значение из: {0}".format(module2.msg) var2 = var3 = var4 = 0
from. import module2
import folder1.folder2.module2 as module2
|
||||
Последнее изменение этой страницы: 2016-06-23; просмотров: 268; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.138.12 (0.01 с.) |