numbers = [1,2,3]
while True:
number = next(numbers)
print(number)
TypeError: list object is not an iterator
squares = map(lambda x: x*x, [0,1,2,3,4])
for x in squares:
for y in squares:
print(x, y)
{42: x for x in [1,2,3]}
def ones():
while True:
yield 1
twos = (2*x for x in ones())
twos = [2*x for x in ones()]
def print_args(a, b, *c):
print(a)
print(b)
print(c)
print_args(*range(4))
.py файл е отделен модулnamespacepython кодът ни се компилира до bytecode.py файловеpython spam.py, той не се компилира.pyPython 3.2 се пазят в __pycache__/{името-на-файла}.cpython-{версия}.pycworld.py:
""" A module for playing with the world. """
def destroy():
"""Destroys the world."""
print("The world was destroyed!")
def save(kind):
"""Saves a kind."""
print("All the", kind, "were saved.")
import world
world.save('women')
world.destroy()
beers.py:
import world
world.save('beers')
world.destroy()
. (точка)world.destroy()destroy е функция и е атрибут на обекта world, който пък е модул>>> world <module 'world' from 'world.py'> >>> world.destroy <function destroy at 0x7f172370b958>
import spam
import egg
def eat():
print("What... more?")
spam.eat()
egg.eat()
eat()
answer = 42answer трябва да се търси по стандартния начин (в разните обхвати)universe.question = 6 * 9question не трябва да се търси в стандартните обхвати, а трябва да се търси в списъка с атрибути на обекта зад името universeuniverse.milkyway.earth.europe.bg.beautify()
bottles = 1
def drink_bottle():
global bottles
bottles += 1
import beer bottles = 5 beer.drink_bottle() print(bottles, beer.bottles)
5 2importС конструкцията import можем да ползваме код от външни файлове.
Ето какво се случва, ако изпълним import beer:
beer се присвоява обекта на изпълнения модул import beer
Всички по реда на претърсване: списъка sys.path
Търси се в:
PYTHONPATH.pth файловеimport, само да дефинираме фукнциите си
def eat(what):
print(what, "was eaten.")
if __name__ == '__main__':
eat('The world as we know it')
[vladimiroff@latitude ~]$ python3 eater.py The world as we know it was eaten. >>> import eater
Представете си, че имаме две отделни системи, в които има модул на име game
system1/
game.py
<други модули>
system2/
game.py
<други модули>
Сега напишете система, която използва модулите game и от двете системи:
import game game.play()
Тук вече имаме малък проблем.
Би било много удобно ако можехме да разделим двата модула game в отделни пакети:
import system1.game import system2.game system1.game.play() system2.game.play()
Това е възможно при няколко условия:
system1 и system2 са някъде из пътя за търсене на python__init__.pyПри import на по-сложно име се извършва следното:
__init__.py в неяТова не ни ли е малко дълго universe.milkyway.earth.europe.bg.beautify()?
from universe.milkyway.earth.europe.bg import beautify beautify()
Или даже:
from universe.milkyway.earth.europe.bg import beautify as b b()
Хубаво ли ви е така:
from mod import a,b,c,d,e,f,g,h,i,j,k,l
И на мен. Затова Python ни позволява да внесем в нашия модул всички имена от някой друг: from mod import *
_име не се внасят__име__ не се внасятmod има списък с име __all__, то се внасят само имената съдържащи се в негоС пакети от модули можем с един замах да import-нем много модули:
name = 'Pooh' pot = 'Full of honey'forest/piglet.py:
name = 'Piglet' baloon = 'Red'
forest/__init__.py:
from . import pooh from . import piglet pot = pooh.pot baloon = piglet.baloon
user.py:
import forest print(forest.pooh.name) print(forest.piglet.name) print(forest.pot) print(forest.baloon)
import mod — намира се модула и обектът му се присвоява на името mod>>> mod = 1 >>> import mod >>> mod <module 'mod' from 'mod.py'> >>>
mod.py import sys >>> import mod >>> mod.sys
import sys as sysmod print(sysmod.path)
Почти същото е като:
import sys sysmod = sys del sys sysmod.path
само че ще загубим старата стойност на sys
import forest.pooh.name as pooh_name import forest.piglet.name as piglet_name
Съществува модул builtins, който съдържа всички вградени функции и други имена:
import builtins builtins.dir = abs print(dir(-3))
Модулите се импортират само веднъж:
>>> import world
>>> world.save('babas')
All the babas were saved.
>>> world.save = 5
>>> import world
>>> world.save
5
За презареждане трябва да се ползва reload():
>>> world.save 5 >>> from imp import reload >>> reload(world) >>> world.save <function save at 0x015001F0>