Python 包

  包 定义

    为了组织好模块,会将多个模块分为包。Python 处理包也是相当方便的。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件

    常见的包结构如下:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQMAAABkCAIAAAANNcLKAAAEtklEQVR4nO2a3dKrIAxFff+XzrlgxuEIxNBSzeZb66oixvxtBaeHAYDZ8bYDAClACQBmKAGggBIAzFACQAElAJihBIACSgAwQwkABZQAYIYSAAooAcDs7yjhOI7j+CvBwgf8oeZACeDwh5oDJYDDH2oOlAAO2ZvjXN93F/pHxehUPeKc6to5/idyXycK9iqZEShM3UDdzvZPtdc6F46mBe878n9qPryCQFVuG/fyuB212vluGZ117IxeCLwWtkGgKh8/+1s7IzHcNr3jTwTnlQJJEKhKZPXijMcvnLUThNWRBAJV+WC9fvuuiNtpXwvsE7ZEoCrOCttZsreL/np1NJp8mXa5V8Sl2xDiV8GTCJTkrb7hWf6nyF7ddx+i8ad4+9Tn2a+FZKnoMFiOZEuhBFiOZEuhBFiOZEtto4TZvQR7j98hmdZtugEl5EEyrXRDCzn5Esn0UfUWcvIlkulzPt6PTq2a/4so2sHu2ZEbDzhpzcLscrsf3f1JJF2XzviFUWePJoxi/11OLh0/65gKkt6rJ72mq4T44e349zgOdBUiimQAG+T9BCUkQTKADfJ+soES9iiHZAx7pL6QRwmjLa+zN3CukkMyhk1S3/vm4xzefiP6sil9sxGdSCMZxjbZl8DP9ja1kAwjYfaPSVT8GU14LJDHkIxkpwJAEiRbCiXAciRbCiXAciRbaj8lRNbczyzN98ttEMmwt6xWMKjfxb7fJngKybC3rNbrSnjGflokw96yWijhXSTDdj6Kz35En50/5VL3rHOhNRuG9pKuG0Eng/7ELYwcPkemvHoXARdbcma2Ln/9w2nl7m+/9W979zY5s/YdO12fPzb4LhpeXsiZ3FklzI53D633Ogp6250/pYTR4SiWzMg4WpMzvy8q4WNXI/YjRkY2c1aqi4yjNTnzq6KEhauj0WE38OQo+XqSM8Xf7BOcNffr+4TRist5sThXpUXJ15OEKa7X3PWPy1mnYy5i6Fob2XHs+962N2rtOEpwbpqwRj5i7hbksrwlfhXkaiTmbkEuy8/TPvXjb4wp+8Hx/Oh5bCgBfoBkS6EEWI5kS6EEWI5kS+2nhMja+oEl+C92FCpIBrxlneIfQJ9xYMskO0hGu2WRUMK7SEa7ZZFQwrtIRut8LB+dWjV/yqXuWedCazYM7SVdN4JOxuff2vEdPkemvHoXARdbcma2Ln/9w2nl7m+/9bta8id8MD+S4UvHf+xPEjS8vJAzubNKmB3vHtrgT0QRb53XVNDC6HAUS2ZkHK3Jmd8XlfCxqxH7ESMjmzkr1UXG0Zqc+VVRQnC19r2dnGUaoeTrSc4Uf7NPcNbcj+0TnPHbvcRozeZ7kgolX08Sprhec9c/LmedjrmIoWttZMex73vb3qg15SjBuWnCGvmIuVuQy/KW+FWQq5GYuwW5LD9P+4CPvzGm7AfH86PnsaEE+AGSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLeV8LB+dWjUfdoXqApihBIACSgAwQwkABZSwjNGuenYcXoFKLAMlSEMlAMxQAkABJQCYoQSAAkoAMEMJAAWUAGCGEgAKKAHADCUAFFACgBlKACj8A9zJwiqHijmKAAAAAElFTkSuQmCC" alt="" />

    最简单的情况下,只需要一个空的 __init__.py 文件即可。当然它也可以执行包的初始化代码,或者定义稍后介绍的 __all__ 变量。当然包底下也能包含包,这和文件夹一样,还是比较好理解的。

  导入包

    包的导入仍使用 import 、 from ... import 语句,使用 “圆点模块名” 的结构化模块命名空间。 下面来看一个包的例子来了解下具体的运作。(官方文档中的例子)

    假设你现在想要设计一个模块集(一个“包”)来统一处理声音文件和声音数据。存在几种不同的声音格式(通常由它们的扩展名来标识,例如: .wav, .aiff, .au )于是,为了在不同类型的文件格式之间转换,你需要维护一个不断增长的包集合。可能你还想要对声音数据做很多不同的操作(例如混音,添加回声,应用平衡 功能,创建一个人造效果)所以你要加入一个无限流模块来执行这些操作。你的包可能会是这个样子(通过分级的文件体系来进行分组):

      aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAp8AAAF9CAIAAADN7pRLAAAbX0lEQVR4nO3d0ZbiKBQFUP//p50H1xTpADcQEwXc+2GWEiQ3aDgVU13zeAIAa3l8uwAA4GLSHQBWI90BYDXSHQBWI90BYDXSHQBWI90BYDXSHQBWI90BYDXSHQBWI90BYDXSHQBWI90BYDXSHQBWI90BYDXSHQBWI90BYDXSHQBWI90BYDXSHQBWI90BYDVzpPvj8Xg85igVxvcouWkX1w77sfGDnX5yj3DaNJ9UJxVc5e9syh/ctKObfH5ZsBAxi2k+qU4quNzs6SvdoWaaT6qTCi43e/pKd6h565Nau2+XNxY75A/yM+e++4JA8bQKzt/eM7Fr/MOnxfWhsYyg/nj8fO0KNhXHefyrZb/wvvOfqvwTfLq9ePIEj4FLHOZl8TytRVSQhS3jd7XXxq8J6q8NWAv1rsIaFzTrG5e7LN1r7e+kfsvugNPeT98T4x/+KBD/9HCijMP68/Hj9S3YGozTflzwvsu+md827vpc2w5c5Svpftg5WE/aR4t7Hl5Sx/ld7HAY5Ocqh3Mu+4RdnuJOBrjbgOnetaP3072xvf2FvePATS77Zr7rbAm+Aav9HO1kgMudS/fTmRqMf1X/lkpavmusPT43Tvt3nHCVt9K9+Kl9Vj7N2/bay4vnwLb/6WqBneJJ+qynUa1/PHj7+vCshNxhPS0lxTutjRYsUIcl/XWrHWDvlEIXnyrg2OwJ9K36g3SHW/moAQdmv8T8bv2u0fmKKz9tPrsAMALpDgCrke4AsBrpXtB7h8wdNabT+zvnz/vPi67+QeWfPx8nXQE+Vvak8zM76V4g3fkR46T1if7P8F/QdY3zvklXgI+VPen8TE2638ucMLKrPp+XpPIH9nuVfL+TnunSfWHS/V7mhJFJ96v2O+mZLt0XdnG6FwWbrup/x1HkjcWttTI+UOT2QbGYm/bOMu77nF/Vf/eSuP72/RZ33XKmBIPU9t41fryLXWOxQ/4gno3DSvIdHQ5Sm5/apsN5a+nPjmv3strntdahduz3zcnuJO8tDJ73f87fb48LODfO++dL+7z1jl/rf6K95ZBb6uldZ+J5aHxDr32/fpN0L7tvlblKy9m10jvCHe7+nF/YXru86xon3/TI1F4Yjx+nbPv4jUf0Tuq37O5wv39Pd8cV19/+/gbpfuL9+k3SvUy68wumSPfaQn/J+OfOka50PzF4Hl0DpnvXmvN3OPHUFYO8q2D+SPeyBdJ9pbeDm4yf7nfXM2C6t4zz9XTvPd7GAtrH4ZB0Lxsn3WvfPgU/1wevgq2fSveWa83Gs+Z0ut+aptuzvuWau2WVOLxYb+x2bpz88t2lfDvpvvf4164xf1rsnw/4Zj1xncWtp/fIL7j7c35h/0cm6N/YXtvUO4GH89Y7fuM8FNtrL68d8rNhdQqKb5nSoMJ4nPwYW0piS7rP6vCc/FglwKq+tZIE6U6jxdM9/6kwNks9tQ5+pAWu8t315JMr85IWT3cA+EHSHQBWI90BYDULpru7NdCi/ZdO7j6bRjhb71438vE/86sz1sOrTDeHq6X7499/OPHFSmBkj87fSb77bPru2Xr3ulEcP0iLq2qwHl5Iun/ZF3+98yv7hXOk+yf33jv+Hen+SdbDEUj3ufcL53wrb741/nf3Lt35vIvTvSjYdFX/4kuKhe1aao8bx8lfEkzIhVMN78s/k8XP9rZzrUPxEx58+IvnUbCp6/zqOukemWCc7dPGXdTGj19ebP/8ceWDxOPkLzmsMy/gsM68f+PTw+MNDiE4ovY635miE9a/ds9ndvt4+37ED4JxevcLgyguPcWnxZMlbq8NW3xcHCSu53Dw/GnN++tG7/i97d86rqvWw8YiDz8Gu09sS/9gX6c/focdeuu8w6+nezBCsJYdrom1wWFALel4YvV8Vi5rghqCrcE4tTM0P09r3l83esfvbf/WcV21HrZXGNfZUn/j5yE+3sZq3zxfbiXdqyMcfqzj/T7rH30YTe+q1LXaBv23HR6VgD8M8lrndlOke+9OW8b55HrYWGE84Il0P7Hr2rr9frrH419LuldH2D2IP76Hxz7C5MCfq1L8qmuXlmWxa5wu0r22i5vWw8Oep9O9vZKWIg9HO1Fnbw2nSffqCG9+mi+5pICbtKxK28uL3ePiOI0Xc13XW73XQOfOu+nS/WPHdXe612o4l5oXHu+b47+Z+pdYJ90f/6ptijtvW7YPiq8q7qWlHvi6lvPlmZ0FLSdXbRe1E624x+BU2p2Vf31aSjo3D3mdjYMHL+lt/8pxbVu2D4qvKu6lZYqepTc9rrP2quIe24+3ZSrerDMY53LrpDvwed866/MV9itlwLCkO3DSZy5BDvdu5YGcdE9mrx8AXqR7Mnv9APAi3ZPZ6weAF+mezF7/n947ke5cAixGuiez1/9HugP8OOmezF7/HcwJwIykezJ7/XcwJwAzku7JoyLYdFX/O44ibyxurZXxgSKf2U2B3e5u2jvA8qR7Mnv9W7W0rnWoHft9c7JL8d7CAAhI92T2+reK6d7+9LD9fUEBxdQHoJ10T2avf0u6A/wy6Z7MXv/WAum+0tsB8GHSPZm9/q1x0r32a3HBvfbgVQC0kO7J7PW/FH/XPXha7J8P+GY9cZ3Fraf3CIB0T2avfy7xbHsvAN4h3ZMB6390mqWeWoePHQjA2qR7Mnv9APAi3ZPZ6weAF+mezF4/ALxI92T2+j/PPXKAMUn3ZPb6v8KkAQxIuiez1/8VJg1gQNI9mb3+rzBpAAOS7knwj7Z7/5F3b/+4pOfmT69vX5IPEnTIayseeG1CgrlqrL+4x+JTAN4k3ZMB69/mX+1BY/vz34h9c5zi49ohFMcMxgfgTdI9GbD+ljAuXovXOhd3kV/fB+P3pnLLTwkDzjzA1KR7MmD9f19r7/673Ro8bkz3eO8nxgw6SHeAD5DuyYD1B+l+mJr54XSl+4lv7LvGCeoE4E3SPRmz/sYb3qcv09+57777xv5w/OIPHGNOO8DUpHsyZv1xotdumcc9810c3nTPx/+78t49aBy8WCcAl5Duyez1jymeVXMOcAfpnsxe/4AOvy34SlUAy5Puyez1A8CLdE9mrx8AXqR7Mnv9APAi3ZPZ67+cW+MAk5Luyez1X066A0xKuiez1/9J5gpgZNI9mb3+TzJXACOT7kn+p9l2f4it0Yn+cUnPzZ9k374kHyToUBynWHNxqNos1Ta1TPUz+/K/sQYAYtI9GbD+bc7VHrS0xy/fBWpx2FphtZb2gM+L6RoHgJx0TwasvyXU8wvclp8JgkAtFnDYXvw+IBCkeO1gAWgk3ZMB699eee+uwlse7x60jFMsoKW9d/akO8B9pHsyYP1BKh+mY61llnQf8O0AmIV0T8asv+Vi/fBp12tbNrXfd699Sx//eNHy3T4ANdI9GbP+OJVrt7ob0z24U354Ez1+SdAt6BzUD0A76Z7MXv9c4tn2XgC8Q7ons9c/kdpVe3A1D0A76Z7MXj8AvEj3ZPb6AeBFuiez1w8AL9I9ma7++BZ1yy/Df6UwAO4m3ZPp6g9CtPav4+J/NXdtbfcNDkBMuiez17/VkvpfKQCAD5Duyez1b0l3gF8m3ZNHRbDpqv7theWNh0cRtNceB/sN2uNNebftg+JBtU8RAFvSPRmz/jxZg6fn2neBGu8oKKD2uFZJcczGAwQgIN2TkesPLqNr/dvbg8hvv3zvTeWWnxJGfkcARibdk2HrP3Fpe0m6d9Uj3QHGId2TMev/zDfzp0e4L93HfDsApiDdkzHrHyTdu+67776xPxw/71B7FQAtpHsybP3FW+C1m+Jd7bXO+dbDerabig8aB//b2jlJACTSPZm9/rnEs+29AHiHdE9mr38ih98WfKUqgGVI92T2+gHgRbons9cPAC/SPZm9fgB4ke7JdPXHt6hbfuP9jv0C8HXSPZmu/iBld/9K7fDxVfsFYATSPZm9/q2W1P/kfgH4JOmezF7/lnQH+GXSPcn/BNvuD641OtG/vbC88fAogvbtg7hPPk6838P6gyN9Zl/+N9YAwIt0T8asP0/K4Glv+zYv8w67QD2338YXHu60dxyAXybdk5HrDy6La/1b2g/TPainsb34fUAgOMDajxoA7Ej3ZNj6T1zCdqV7/t94kK799s6qdAd4n3RPxqz/A9/Mz5XuY75NAEOR7smY9d+a7s8wzu9I991vxsUj1L7nr1UFwIt0T4atv3jrunYz+0R7/rjWOd607VB7SdAt6FysFoAa6Z7MXv8a4nfBewTQQrons9e/gNpVe3A1D0BOuiez1w8AL9I9mb1+AHiR7sns9QPAi3RPZq//Pu55A8xFuiez138rkwMwEemezF7/rUwOwESkezJ7/bcyOQATke7JoyLYdFX/9sK2LbsO2567x7Vx4vZ4U96tVtiu7JZDBuAd0j0Zs/48ieP2578Re9g/HqdWRrHO4pjB+ADcRLonI9dfvHzfdSg+Lo7Qcvnem8ot9Yw8wwArke7JsPW3JGVLul81/uEgjWMCcBPpnoxZ/5vfqMeN58bvGufv8ZjTC7Ak6Z6MWX9L+ua/y3ZunHzYfPzar8XFBdReBcAdpHsybP21W+bbp3mfWsTmm4IX7sZ/hule2+9z4LkFWJJ0T2av/7vi2TO3AJ8k3ZPZ6/+iw28LvlIVwM+S7sns9QPAi3RPZq8fAF6kezJ7/QDwIt2T2es/za1xgMVI92T2+k+T7gCLke7J7PXfwZwAzEi6J7PXfwdzAjAj6Z4U/9zb9g+0NTrRv72wbcuuw+5BsYxt427weDbieuLKawUf1gDAOdI9GbP+PFmD9nxr8YeAYNh47+0vPNxp7zgAtJPuycj1Fy/fdx2eDekejN/YXvw+IK689rR2LAC8Sbonw9bfkojbdM//W3xJbRdxe+8sSXeAz5PuyZj1n/hmfq50H3PaAaYm3ZMx629J9/fvbb9/3732LX3844VfpgO4g3RPhq2/dqt7+3T7YPvC4gjB4LW9114SdAs65xUCcCHpnsxe/5jiWTXnAHeQ7sns9Q+odtUeXM0D8D7pnsxePwC8SPdk9voB4EW6J7PXDwAv0j2ZvX4AeJHuyez1A8CLdE9mrx8AXqR7Mnv9APAi3ZP8T8Lt/hJcoxP9AeBC0h0AViPdAWA10h0AViPdAWA10n10td+8620H4HdI99FJdwB6SXcAWI10B4DVSHcAWI10B4DVSHcAWM0PpXvtT7v7k+/8pvb/38HdZ8cIZ98C68AlxVsnl/Er6b6treUxrC1fu7v6X+67Z98y68CbxVsnV/KL6d7SftX4MCbpPs7eL3Rhul847OXj0EK6+9Tyi3o/sdJ9CtKdPxene1Gw6ar+eQFBVXF7bZzdptr4wYRcNtFwhdrHu/j0sTkx8w7xydJ4HgWbus6vrpPukQnG2T49vYvD8Xcd8gf5Tk8f8uE8dM1PvulwEuJNvGOda/f8ExM8DdqDF9Ye944DgygutcWnuxW/OELjCVJ8XBwkrudw8PxpTe86UKv2cOTDw2yZ/7ye4EAa64lfbp2c0VLpHv94WHtV4zjx0R1+amFYLctxb/vf08bz6PH/tWltazBOHr21daDmdHqdGDke/9r5L+7XOvkjlkr3E1vbP20nxu9dYuBb7kiX4uM4v4sdDoO81rndfen+rKwDX0z3E1utkzOS7jd+ars6wCfdnS6N7e0v7B2ny63pXhxHup/rQLtl073xQ3/6rD4c/5JLCrhJS1psL6d2j4vjNJ4gxcfnxmm/Jo7dl+7vpHVtzmv1tFz+Wid/xzrp/qyf7V3ttXF2m2p7bxkfvq7l8//cfKp3T4vjxLsonh21PQan0raebZ+Wks7NQ15n4+C94wezUZuubcuz9AbFJR3WeaL+YoV5qYfj86al0h34sG+d9XnSfKUMGJZ0B0767iWXaz4ISPdk9voB4EW6J7PXDwAv0j2ZvX4AeJHuyez1/+m9E+nOJcBipHsye/1/pDvAj5Puyez138GcAMxIuiez138HcwIwI+mePCqCTVf1v+Mo8sbi1loZHyjymd0U2O3upr0DLE+6J7PXv1VL61qH2rHfNye7FO8tDICAdE9mr3+rmO7tTw/b3xcUUEx9ANpJ92T2+rekO8Avk+7J7PVvLZDuK70dAB8m3ZPZ698aJ91rvxYX3GsPXgVAC+mezF7/S/F33YOnxf75gG/WE9dZ3Hp6jwBI92T2+ucSz7b3AuAd0j0ZsP5Hp1nqqXX42IEArE26J7PXDwAv0j2ZvX4AeJHuyez1A8CLdE9mr//pH5IB8Hw+pfvW7PW/rHEUALxDuiez1/+yxlEA8A7pnsxe/8saRwHAO6R7Evyj7d5/5N3bv72w2qZtS7E9Hqc47DO7kb97efshAPBJ0j0Zs/48oePHxbCPx6ntt/ja3nEA+DzpnoxZf+1av1ZtLX1PpHvt6WENAHyXdE/GrL8xxWvt0h3gB0n3ZMz6h033MacLgKd03xqz/hP33Yv9g/bigQf32oNXATAC6Z4MW3/wu+7xL7HXnu6Su5butZ0+B54rAJ7SfWv2+q8Vz4a5AhiZdE9mr/9CjV8VADAm6Z7MXj8AvEj3ZPb6AeBFuiez1w8AL9I9mb1+AHiR7sns9QPAi3RPZq8fAF6kezJ7/QDwIt2TR0Ww6ar+hyU9S//WPB+k8WmxQzx+vN+4/u2DljoBeJN0T4atfxeEuwdvtl81flfxJ8YBoJ10T4atv1jYI5P3Dy7Eg6ANGuNxWoo/rBOA90n3ZNj6u9L3WU/3rvGf9f/rzGHBweDSHeADpHsybP3n0r39q++WAz+dxIfpPuy0A8xLuifD1t+S7odZ3nIN3dI/aD8cp1jVsNMOMC/pngxYf3yHO94Uj3Y4fuOmXWPLTg/rBOBN0j2Zvf4xxbNqzgHuIN2T2esf0OG3Dl+pCmB50j2ZvX4AeJHuyez1A8CLdE9mrx8AXqR7Mnv9APAi3ZPZ6weAF+mezF4/ALxI92T2+gHgRbonj4pg01X9AeBC0h0AViPdAWA10h0AViPdAWA10n10td+8620H4HdI99FJdwB6SXcAWI10B4DVSHcAWI10B4DVSHcAWM2C6Z7/Cffir5H7M+/8uPb/38HdZ8oIZ+Ld/+sH6xIftlq6b2uIz6K8P/yO3Sf/8ES4+0z57plYXDfuHt+6xK1WTvd3+o9wLHAf6f7JvVuX+Dzp7iziF111plxFurf0ty7R7uJ0Lwo2XdW/+JJde63m+Chqm/LB85cEQ8HX1T78xafbD3neofgJDz78xZMl2HR4Prb0r01C+zjbp427qI0fvzyezGAeTtfJelZ7y9vPlt72/IzaPn78uwjG/WEQxagoPi1+yOP22rDFx40nzuG+zp1375/vveNf1X5tnaxktbf81rOo9uNzcRCnE7NoScfe9r+n+WVlUEOwNRgnj7TieRroTc2WMePxr2rvXZf4Hau9/R/7GblxkK4lBr7ldIo3pmBLutcC/jDIa53bTZ3uvTvlR6z29g97FjnTGMpVKf5me/sLe8fpIt1Zz2pv/8fOosOz/ZJLCrhJS2pur4x3j4vjBCdF1zV9+ziHX0c3nnfLpPubdbKSdd7+x79Ot+861HZxOMjh+PBFLR/d5+Ys2D0tjhPvonj21fZY7LzrtttXS0nn5iGvs3Hw4CW97bsOl9fJerzxwHnfCo8g3YGndAdO++7VoctTCDgrEmsEAGuQZ4l0B2AN8iyR7gCsQZ4ly6R7751Idy4BFmNNT5ZJOOkO8OOs6YmEy5kTgBlZuxNJljMnADOydiePimDTVf3vOIq8sbi1VsYHinxmNwV2u7tp7wDLs24mK6VILa1rHWrHft+c7FK8tzAAApbOZKUgKaZ7+9PD9vcFBRRTH4B2Vs9kpSyR7gC/zOqZrJQlC6T7Sm8HwIdZQJOV4mScdK/9Wlxwrz14FQAtLKDJGnFS/F334Onh78a/GbTxsC3ZD0Ava2giUT4pnm3vBcA7rKHJgIny6DRLPbUOHzsQgLVZRhOhAsAa5Fki3QFYgzxLpDsAa5BnyW+me/yL6785JwCzs3Ynv5xk0h1gJdbu5JeT7JePHWA91vTklxPul48dYD3W9CT4R9u9/8i7t397YfGmXZ/i09o4tZEPZykYvzgnh0caVB7XBsCL9TEZMy12Ve0yL39c6x+Mkz8N2g8LKG6qlVHcY7FzY8EAPKX71piBUbtWPp3ixQvf9nRvGTm/8q4N0jJs/njMdwpgHFbJZMzMaMzdlnQ/cSl87pq+fdNhZ+kOcIJVMhkzM65K96u+ma+1fyzdx3ybAIZioUzGjI137ru3fJNffBq3d93vDwZpH/zwVQBsWSiTYWOjdrO8tmnbsgv4/NZ43lLsXGuvbYoHeYbpXjvY58DvEcBQrJXJ1MkxdfFb8YEsc5gAt7JWJvMmR3CxO5fagSxzgACfYblMhAcAa5BniXQHYA3yLJHuAKxBniXS3b1tgDVYyhPB9jQJAEuwlCeC7WkSAJZgKU8E29MkACzBUp7kf4Xt7z50bdNV/Q9Lip/mgxTbW/pvN+WNxWM8rP+Z3dGPjwuAN1lPkzHTJU/ouL32+Nr+tW7F+oudg/EBeJMlNRk2YLrSsXYUvT8lPDK1oRqLDw5h2JkHmJRVNRk2Y76V7of1tJDuAJ9nVU2GzZi/W9d5Y/50unQfdtoB5mVhTUaOmby2O+67BzfUD7+Zr/1aXPxCv0wHcAcLazJyzASBWgzIYvth/2cW8Lv+tTvxzzDdazutHRcAb7K2JpLmDvGsmnOAO1hbE0lzua6vFgC4iuU1ETYArEGeJdIdgDXIs0S6A7AGeZYMmO7fujntpjjA1KzgyZh59q2qxpwNAFpYwZMx80y6A9DLCp6MmWfSHYBeVvDkURFsuqp/XNWuvGLBeZ+W/kF7137jKX1mN/KDsgF4n/U0GTNdthFYbM+f7oIz7n/Y3r7fWv3FoXrHAaCdJTUZM2D+rn1rW4PL7pb+cbrnQz0yLfUXn9ZqAOBNVtVkzIzZfrmdbzp8fNg/SPfifntnSboDfJ5VNRkzY859Mx+M0zhs434PHdY55rQDTM3CmowZM40X6Pele+N+a9/Sx4W1fLcPQC8LazJgzGzvbRfvr8dqo+06BC2H+901BofQ8jMHAJewtiaS5g7xrJpzgDtYWxNJc7nDbxG+UhXA8iyvibABYA3yLJHuAKxBniXSHYA1yLNEugOwBnmWSHcA1iDPEukOwBrkWSLdAViDPEuCv/hW23RVfwC4kGgBgNVIdwBYjXQHgNVIdwBYjXQfXe0373rbAfgdYmB00h2AXmIAAFYj3QFgNdIdAFYj3QFgNdIdAFYj3QFgNdIdAFYj3QFgNdIdAFYj3QFgNdIdAFYj3QFgNf8BRMOvsqvuefIAAAAASUVORK5CYII=" alt="" />

    用户可以每次只导入包里的特定模块,例如: import sound.efforts.echo   这样就导入了 sound.effects.echo 子模块。它必须通过完整的名称来引用:

     sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

    导入包时有一个可以选择的方式: from sound.effects import echo   这样就加载了 echo 子模块,并且使得它在没有包前缀的情况下也可以使用,所以它可以如下方式调用:

     echo.echofilter(input, output, delay=0.7, atten=4)

    还有另一种变体用于直接导入函数或变量: from sound.effects.echo import echofilter   这样就又一次加载了 echo 字模块,但这样就可以直接调用它的 echofilter() 函数:

     echo.echofilter(input, output, delay=0.7, atten=4)

    需要注意的是  from package import item    方式导入包时,这个子项(item)既可以是子包也可以是其他命名,如函数、类、变量等。若无,会引发ImportError异常。

    而用类似 import item.subitem.subsubitem 这样的语法时,这些子项必须是包,最后的子项可以是包或模块,但不能是类、函数、变量等。

    从 * 导入包

    import * 这样的语句理论上是希望文件系统找出包中所有的子模块,然后导入它们。这可能会花长时间,并出现边界效应等。Python 解决方案是提供一个明确的包索引。

    这个索引由 __init__.py  定义 __all__ 变量,该变量为一列表,如上例 sound/effects 下的 __init__.py 中,可定义  __all__ = ["echo","surround","reverse"]

    这意味着,  from sound.effects import *   会从对应的包中导入以上三个子模块; 尽管提供 import * 的方法,仍不建议在生产代码中使用这种写法。

    包内引用

    如果是子包内的引用,可以按相对位置引入子模块 以 echo 模块为例,可以引用如下:

 from . import reverse              # 同级目录 导入 reverse
from .. import frormats # 上级目录 导入 frormats
from ..filters import equalizer # 上级目录的filters模块下 导入 equalizer

    多重目录包搜索

    包支持一个更为特殊的特性, __path__  在包的 __init__.py 文件代码执行前,该变量初始化一个目录名列表。作用于子包和模块的搜索功能。
    该功能可以用于扩展包中的模块集,不过不常用。

    

Python学习(六)模块 —— 包的更多相关文章

  1. python学习之模块&包的引用

    名词解释: 模块:一个程序文件 包:相当于一个类库,打包发布后相当于c#中的dll, 包中可包括若干个模块,比如main.py就是一个模块,对于test2文件下的所有模块组成一个包 对于一个包而言,注 ...

  2. Python第八天 模块 包 全局变量和内置变量__name__ Python path

    Python第八天  模块   包   全局变量和内置变量__name__    Python path 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Pyt ...

  3. Python学习--Selenium模块

    1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台

  4. Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制 ...

  5. Python学习---重点模块的学习【all】

    time     [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...

  6. python学习笔记-模块和包

    模块导入方法 1.import 语句 import module1[,module2[,...moduleN]] 当我们使用import语句的时候,Python解释器是怎么找到对应对文件对呢?答案是解 ...

  7. python学习——常用模块

    在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在python中的几个常用模块. 一.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文 ...

  8. Python学习之模块基础

    模块就是程序 编写以下简单代码 print('hello python') 并将py文件保存在c盘的python(假设新建)文件下,通过pycharm的Terminal 或者windom命令窗口调出p ...

  9. Python学习之模块进程函数详解

    今天在看<Beginning Linux Programming>中的进程相关部分,讲到Linux几个进程相关的系统函数: system , exec , fork ,wait . Pyt ...

  10. python学习日记(包——package)

    简述——包 包是一种通过使用‘.模块名’来组织python模块名称空间的方式. 注意: 1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都 ...

随机推荐

  1. C# 6.0 新特性 (一)

    概述 尽管 C# 6.0 尚未完成,但现在这些功能正处于接近完成的关键时刻.自 2014 年 5 月发布文章“C# 6.0 语言预览版”(msdn.microsoft.com/magazine/dn6 ...

  2. 【LOJ】#2085. 「NOI2016」循环之美

    题解 我们要求的其实是这个东西= = \(\sum_{i = 1}^{n}\sum_{j = 1}^{n}[(i,j) == 1][(j,k) == 1]\) 然后变一下形 \(\sum_{j = 1 ...

  3. NOIP2012 D2 T2借教室

    先上题目 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息 ...

  4. React篇章-React 组件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  5. ssm demo,用户角色权限管理

    SSM框架整合 Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspectwea ...

  6. 【BZOJ 2839】 2839: 集合计数 (容斥原理)

    2839: 集合计数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 399  Solved: 217 Description 一个有N个元素的集合有2 ...

  7. 【UOJ 80】 二分图最大权匹配

    [分析] 之前打的那种KM会TLE... why??明明说n^3的啊? #include<cstdio> #include<cstdlib> #include<cstri ...

  8. luoguP4284 [SHOI2014]概率充电器 概率期望树形DP

    这是一道告诉我概率没有想象中那么难的题..... 首先,用期望的线性性质,那么答案为所有点有电的概率和 发现一个点的有电的概率来源形成了一个"或"关系,在概率中,这并不好计算... ...

  9. bzoj 1004 Cards 组合计数

    这道题考察的是组合计数(用Burnside,当然也可以认为是Polya的变形,毕竟Polya是Burnside推导出来的). 这一类问题的本质是计算置换群(A,P)中不动点个数!(所谓不动点,是一个二 ...

  10. Media Queries之Respond.js

    一.stackoverflow上面对css3-mediaqueries.js与respond.js的比较 css3-mediaqueries.js Pros Supports min, max and ...