(window.webpackJsonp=window.webpackJsonp||[]).push([[2723],{3131:function(t,a,s){"use strict";s.r(a);var e=s(31),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"importing-modules"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#importing-modules"}},[t._v("#")]),t._v(" Importing modules")]),t._v(" "),s("h2",{attrs:{id:"the-all-special-variable"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#the-all-special-variable"}},[t._v("#")]),t._v(" The "),s("strong",[t._v("all")]),t._v(" special variable")]),t._v(" "),s("p",[t._v("Modules can have a special variable named "),s("code",[t._v("__all__")]),t._v(" to restrict what variables are imported when using "),s("code",[t._v("from mymodule import *")]),t._v(".")]),t._v(" "),s("p",[t._v("Given the following module:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# mymodule.py")]),t._v("\n\n__all__ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'imported_by_star'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nimported_by_star "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),t._v("\nnot_imported_by_star "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21")]),t._v("\n\n")])])]),s("p",[t._v("Only "),s("code",[t._v("imported_by_star")]),t._v(" is imported when using "),s("code",[t._v("from mymodule import *")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" mymodule "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" imported_by_star\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" not_imported_by_star\nTraceback "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("most recent call last"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n File "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" line "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("module"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\nNameError"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" name "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'not_imported_by_star'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("is")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("not")]),t._v(" defined\n\n")])])]),s("p",[t._v("However, "),s("code",[t._v("not_imported_by_star")]),t._v(" can be imported explicitly:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" mymodule "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" not_imported_by_star\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" not_imported_by_star\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21")]),t._v("\n\n")])])]),s("h2",{attrs:{id:"importing-a-module"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#importing-a-module"}},[t._v("#")]),t._v(" Importing a module")]),t._v(" "),s("p",[t._v("Use the "),s("code",[t._v("import")]),t._v(" statement:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" random\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("random"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("randint"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v("\n\n")])])]),s("p",[s("code",[t._v("import module")]),t._v(" will import a module and then allow you to reference its objects -- values, functions and classes, for example -- using the "),s("code",[t._v("module.name")]),t._v(" syntax. In the above example, the "),s("code",[t._v("random")]),t._v(" module is imported, which contains the "),s("code",[t._v("randint")]),t._v(" function. So by importing "),s("code",[t._v("random")]),t._v(" you can call "),s("code",[t._v("randint")]),t._v(" with "),s("code",[t._v("random.randint")]),t._v(".")]),t._v(" "),s("p",[t._v("You can import a module and assign it to a different name:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" random "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" rn\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rn"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("randint"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v("\n\n")])])]),s("p",[t._v("If your python file "),s("code",[t._v("main.py")]),t._v(" is in the same folder as "),s("code",[t._v("custom.py")]),t._v(". You can import it like this:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" custom\n\n")])])]),s("p",[t._v("It is also possible to import a function from a module:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" sin\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" sin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.8414709848078965")]),t._v("\n\n")])])]),s("p",[t._v("To import specific functions deeper down into a module, the dot operator may be used "),s("strong",[t._v("only")]),t._v(" on the left side of the "),s("code",[t._v("import")]),t._v(" keyword:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" urllib"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" urlopen\n\n")])])]),s("p",[t._v("In python, we have two ways to call function from top level. One is "),s("code",[t._v("import")]),t._v(" and another is "),s("code",[t._v("from")]),t._v(". We should use "),s("code",[t._v("import")]),t._v(" when we have a possibility of name collision. Suppose we have "),s("code",[t._v("hello.py")]),t._v(" file and "),s("code",[t._v("world.py")]),t._v(" files having same function named "),s("code",[t._v("function")]),t._v(". Then "),s("code",[t._v("import")]),t._v(" statement will work good.")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" hello "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" function\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" world "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" function\n\nfunction"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#world's function will be invoked. Not hello's ")]),t._v("\n\n")])])]),s("p",[t._v("In general "),s("code",[t._v("import")]),t._v(" will provide you a namespace.")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" hello\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" world\n\nhello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("function"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# exclusively hello's function will be invoked ")]),t._v("\nworld"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("function"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# exclusively world's function will be invoked")]),t._v("\n\n")])])]),s("p",[t._v("But if you are sure enough, in your whole project there is no way having same function name you should use "),s("code",[t._v("from")]),t._v(" statement")]),t._v(" "),s("p",[t._v("Multiple imports can be made on the same line:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Multiple modules")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sockets"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" random\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Multiple functions")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" sin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" cos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tan\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Multiple constants")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" e\n\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.141592653589793")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("45")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5253219888177297")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1482807222.7240417")]),t._v("\n\n")])])]),s("p",[t._v("The keywords and syntax shown above can also be used in combinations:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" urllib"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" urlopen "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" geturl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pathname2url "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" path2url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" getproxies\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" factorial "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" fact"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gamma"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" atan "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" arctan\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" random"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("randint"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sys\n\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1482807222.7240417")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arctan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("60")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.554131203080956")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" filepath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/dogs/jumping poodle (december).png"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("path2url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filepath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("dogs"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("jumping"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v("20poodle"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v("28december"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("29.")]),t._v("png\n\n")])])]),s("h2",{attrs:{id:"import-modules-from-an-arbitrary-filesystem-location"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#import-modules-from-an-arbitrary-filesystem-location"}},[t._v("#")]),t._v(" Import modules from an arbitrary filesystem location")]),t._v(" "),s("p",[t._v("If you want to import a module that doesn't already exist as a built-in module in the "),s("a",{attrs:{href:"https://docs.python.org/3/library/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python Standard Library"),s("OutboundLink")],1),t._v(" nor as a side-package, you can do this by adding the path to the directory where your module is found to "),s("a",{attrs:{href:"https://docs.python.org/3/library/sys.html#sys.path",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("sys.path")]),s("OutboundLink")],1),t._v(". This may be useful where multiple python environments exist on a host.")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" sys\nsys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/path/to/directory/containing/your/module"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" mymodule\n\n")])])]),s("p",[t._v("It is important that you append the path to the "),s("strong",[t._v("directory")]),t._v(" in which "),s("code",[t._v("mymodule")]),t._v(" is found, not the path to the module itself.")]),t._v(" "),s("h2",{attrs:{id:"importing-all-names-from-a-module"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#importing-all-names-from-a-module"}},[t._v("#")]),t._v(" Importing all names from a module")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" module_name "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("\n\n")])])]),s("p",[t._v("for example:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("\nsqrt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# instead of math.sqrt(2)")]),t._v("\nceil"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# instead of math.ceil(2.7)")]),t._v("\n\n")])])]),s("p",[t._v("This will import all names defined in the "),s("code",[t._v("math")]),t._v(" module into the global namespace, other than names that begin with an underscore (which indicates that the writer feels that it is for internal use only).")]),t._v(" "),s("p",[s("strong",[t._v("Warning")]),t._v(": If a function with the same name was already defined or imported, it will be "),s("strong",[t._v("overwritten")]),t._v(". Almost always importing only specific names "),s("code",[t._v("from math import sqrt, ceil")]),t._v(" is the "),s("strong",[t._v("recommended way")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sqrt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("num"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"I don't know what's the square root of {}.\"")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("format")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("num"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nsqrt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Output: I don't know what's the square root of 4.")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" \nsqrt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Output: 2.0")]),t._v("\n\n")])])]),s("p",[t._v("Starred imports are only allowed at the module level. Attempts to perform them in class or function definitions result in a "),s("code",[t._v("SyntaxError")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("f")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("\n\n")])])]),s("p",[t._v("and")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("A")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("\n\n")])])]),s("p",[t._v("both fail with:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("SyntaxError"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" only allowed at module level\n\n")])])]),s("h2",{attrs:{id:"programmatic-importing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#programmatic-importing"}},[t._v("#")]),t._v(" Programmatic importing")]),t._v(" "),s("p",[t._v("To import a module through a function call, use the "),s("code",[t._v("importlib")]),t._v(" module (included in Python starting in version 2.7):")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" importlib\nrandom "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" importlib"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("import_module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"random"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),s("p",[t._v("The "),s("code",[t._v("importlib.import_module()")]),t._v(" function will also import the submodule of a package directly:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("collections_abc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" importlib"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("import_module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"collections.abc"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),s("p",[t._v("For older versions of Python, use the "),s("code",[t._v("imp")]),t._v(" module.")]),t._v(" "),s("p",[t._v("Use the functions "),s("code",[t._v("imp.find_module")]),t._v(" and "),s("code",[t._v("imp.load_module")]),t._v(" to perform a programmatic import.")]),t._v(" "),s("p",[t._v("Taken from "),s("a",{attrs:{href:"https://docs.python.org/2/library/imp.html#examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("standard library documentation"),s("OutboundLink")],1)]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" imp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sys\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("import_module")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n fp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pathname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" description "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" imp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("find_module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" imp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("load_module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pathname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("finally")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" fp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n fp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),s("p",[t._v("Do "),s("strong",[t._v("NOT")]),t._v(" use "),s("code",[t._v("__import__()")]),t._v(" to programmatically import modules! There are subtle details involving "),s("code",[t._v("sys.modules")]),t._v(", the "),s("code",[t._v("fromlist")]),t._v(" argument, etc. that are easy to overlook which "),s("code",[t._v("importlib.import_module()")]),t._v(" handles for you.")]),t._v(" "),s("h2",{attrs:{id:"pep8-rules-for-imports"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#pep8-rules-for-imports"}},[t._v("#")]),t._v(" PEP8 rules for Imports")]),t._v(" "),s("p",[t._v("Some recommended "),s("a",{attrs:{href:"https://www.python.org/dev/peps/pep-0008/#imports",target:"_blank",rel:"noopener noreferrer"}},[t._v("PEP8"),s("OutboundLink")],1),t._v(" style guidelines for imports:")]),t._v(" "),s("li",[t._v("\nImports should be on separate lines:\n"),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" sqrt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ceil "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Not recommended")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" sqrt "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Recommended")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" ceil\n\n")])])])]),t._v(" "),s("li",[t._v("\nOrder imports as follows at the top of the module:\n"),s("blockquote",[s("ul",[t._v("\n1. Standard library imports\n1. Related third party imports\n1. Local application/library specific imports\n")])])]),t._v(" "),s("li",[t._v("\nWildcard imports should be avoided as it leads to confusion in names in the current namespace. If you do `from module import *`, it can be unclear if a specific name in your code comes from `module` or not. This is doubly true if you have multiple `from module import *`-type statements.\n")]),t._v(" "),s("li",[t._v("\nAvoid using relative imports; use explicit imports instead.\n")]),t._v(" "),s("h2",{attrs:{id:"importing-specific-names-from-a-module"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#importing-specific-names-from-a-module"}},[t._v("#")]),t._v(" Importing specific names from a module")]),t._v(" "),s("p",[t._v("Instead of importing the complete module you can import only specified names:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" random "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" randint "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('# Syntax "from MODULENAME import NAME1[, NAME2[, ...]]"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("randint"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Out: 5")]),t._v("\n\n")])])]),s("p",[s("code",[t._v("from random")]),t._v(" is needed, because the python interpreter has to know from which resource it should import a function or class and "),s("code",[t._v("import randint")]),t._v(" specifies the function or class itself.")]),t._v(" "),s("p",[t._v("Another example below (similar to the one above):")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" math "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" pi\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Out: 3.14159265359")]),t._v("\n\n")])])]),s("p",[t._v("The following example will raise an error, because we haven't imported a module:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("random"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("randrange"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('# works only if "import random" has been run before')]),t._v("\n\n")])])]),s("p",[t._v("Outputs:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("NameError"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" name "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'random'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("is")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("not")]),t._v(" defined\n\n")])])]),s("p",[t._v("The python interpreter does not understand what you mean with "),s("code",[t._v("random")]),t._v(". It needs to be declared by adding "),s("code",[t._v("import random")]),t._v(" to the example:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" random\nrandom"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("randrange"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),s("h2",{attrs:{id:"importing-submodules"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#importing-submodules"}},[t._v("#")]),t._v(" Importing submodules")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("submodule "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" function\n\n")])])]),s("p",[t._v("This imports "),s("code",[t._v("function")]),t._v(" from "),s("code",[t._v("module.submodule")]),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"import-function"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#import-function"}},[t._v("#")]),t._v(" "),s("strong",[t._v("import")]),t._v("() function")]),t._v(" "),s("p",[t._v("The "),s("code",[t._v("__import__()")]),t._v(" function can be used to import modules where the name is only known at runtime")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" user_input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"os"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n os "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("__import__")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"os"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# equivalent to import os")]),t._v("\n\n")])])]),s("p",[t._v("This function can also be used to specify the file path to a module")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("mod "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("__import__")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('r"C:/path/to/file/anywhere/on/computer/module.py"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),s("h2",{attrs:{id:"re-importing-a-module"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#re-importing-a-module"}},[t._v("#")]),t._v(" Re-importing a module")]),t._v(" "),s("p",[t._v("When using the interactive interpreter, you might want to reload a module. This can be useful if you're editing a module and want to import the newest version, or if you've monkey-patched an element of an existing module and want to revert your changes.")]),t._v(" "),s("p",[t._v("Note that you "),s("strong",[t._v("can't")]),t._v(" just "),s("code",[t._v("import")]),t._v(" the module again to revert:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" math\nmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" math\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3")]),t._v("\n\n")])])]),s("p",[t._v("This is because the interpreter registers every module you import. And when you try to reimport a module, the interpreter sees it in the register and does nothing. So the hard way to reimport is to use "),s("code",[t._v("import")]),t._v(" after removing the corresponding item from the register:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" sys\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'math'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" sys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("modules"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Is the ``math`` module in the register?")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("del")]),t._v(" sys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("modules"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'math'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# If so, remove it.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" math\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3.141592653589793")]),t._v("\n\n")])])]),s("p",[t._v("But there is more a straightforward and simple way.")]),t._v(" "),s("h3",{attrs:{id:"python-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#python-2"}},[t._v("#")]),t._v(" Python 2")]),t._v(" "),s("p",[t._v("Use the "),s("code",[t._v("reload")]),t._v(" function:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" math\nmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("reload")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3.141592653589793")]),t._v("\n\n")])])]),s("h3",{attrs:{id:"python-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#python-3"}},[t._v("#")]),t._v(" Python 3")]),t._v(" "),s("p",[t._v("The "),s("code",[t._v("reload")]),t._v(" function has moved to "),s("code",[t._v("importlib")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" math\nmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" importlib "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("reload")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("reload")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3.141592653589793")]),t._v("\n\n")])])]),s("h4",{attrs:{id:"syntax"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#syntax"}},[t._v("#")]),t._v(" Syntax")]),t._v(" "),s("ul",[s("li",[t._v("import "),s("strong",[t._v("module_name")])]),t._v(" "),s("li",[t._v("import "),s("strong",[t._v("module_name.submodule_name")])]),t._v(" "),s("li",[t._v("from "),s("strong",[t._v("module_name")]),t._v(" import *")]),t._v(" "),s("li",[t._v("from "),s("strong",[t._v("module_name")]),t._v(" import "),s("strong",[t._v("submodule_name")]),t._v(" [, "),s("strong",[t._v("class_name")]),t._v(", "),s("strong",[t._v("function_name")]),t._v(", ...etc]")]),t._v(" "),s("li",[t._v("from "),s("strong",[t._v("module_name")]),t._v(" import "),s("strong",[t._v("some_name")]),t._v(" as "),s("strong",[t._v("new_name")])]),t._v(" "),s("li",[t._v("from "),s("strong",[t._v("module_name.submodule_name")]),t._v(" import "),s("strong",[t._v("class_name")]),t._v(" [, "),s("strong",[t._v("function_name")]),t._v(", ...etc]")])]),t._v(" "),s("h4",{attrs:{id:"remarks"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#remarks"}},[t._v("#")]),t._v(" Remarks")]),t._v(" "),s("p",[t._v("Importing a module will make Python evaluate all top-level code in this module so it "),s("strong",[t._v("learns")]),t._v(" all the functions, classes, and variables that the module contains. When you want a module of yours to be imported somewhere else, be careful with your top-level code, and encapsulate it into "),s("code",[t._v("if __name__ == '__main__':")]),t._v(" if you don't want it to be executed when the module gets imported.")])])}),[],!1,null,null,null);a.default=n.exports}}]);