![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 275; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.156.141 (0.01 с.) |