day 5 python 模块于包的引用



一.面向过程编程 函数的参数传入,是函数吃进去的食物,而函数return的返回值,是函数拉出来的结果,面向过程的思路就是,把程序的执行当做一串首尾相连的函数,一个函数吃,拉出的东西给另外一个函数吃,另外一个函数吃了再继续拉给下一个函数吃。。。

面向过程:机械式思维,流水线式编程

例如: 用户登录流程:前端接收处理用户请求-》将用户信息传给逻辑层,逻辑词处理用户信息-》将用户信息写入数据库 验证用户登录流程:数据库查询/处理用户信息-》交给逻辑层,逻辑层处理用户信息-》用户信息交给前端,前端显示用户信息

array=[1,3,4,71,2]
ret=[]
for i in array:
ret.append(i**2)
print(ret)

#如果我们有一万个列表,那么你只能把上面的逻辑定义成函数

def map_test(array):
    ret=[]
    for i in array:
        ret.append(i**2)
    return ret
print(map_test(array))


#如果我们的需求变了,不是把列表中每个元素都平方,还有加1,减一,那么可以这样#可以使用匿名函数 print(map_test(lambda x:x-1,array))

def add_num(x):
    return x+1
def map_test(func,array):
    ret=[]
    for i in array:
        ret.append(func(i))
    return ret

print(map_test(add_num,array))

上面就是map函数的功能,map得到的结果是可迭代对象

print(map(lambda x:x-1,range(5)))

二.包于模块:

1.1模块的使用 import   示例文件:spam.py,文件名spam.py,模块名spam

 #spam.py  print('from the spam.py')    money=1000    def read1():      print('spam->read1->money',money)    def read2():      print('spam->read2 calling read')      read1()    def change():      global money      money=0

执行调用是添加import spam  import spam #只在第一次导入时才执行spam.py内代码,此处的显式效果是只打印一次'from the spam.py',当然其他的顶级代码也都被执行了,只不过没有显示效果.  import spam  import spam  import spam    '''  执行结果:  from the spam.py

1.2 模块请用别名 import spam as sm print(sm.money)

1.3 导入多个模块 import sys,os,re

1.4 * 跟— 的作用  

from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。  

from spam import * #将模块spam中所有的名字都导入到当前名称空间 print(money) print(read1) print(read2) print(change)

''' 执行结果: from the spam.py 1000 <function read1 at 0x1012e8158> <function read2 at 0x1012e81e0> <function change at 0x1012e8268> 1.5把模块当做脚本执行 我们可以通过模块的全局变量__name__来查看模块名: 当做脚本运行: __name__ 等于'__main__'

当做模块导入: __name__=

作用:用来控制.py文件在不同的应用场景下执行不同的逻辑 if __name__ == '__main__'

三.模块加载路径 内存中已经加载的模块->内置模块->sys.path路径中包含的模块

3.1 运行Python应用或引用Python模块,Python解释器要有一个查找的过程。可以通过设置一个环境变量PYTHONPATH为Python增加一个搜索路径,以方便查找到相关Python模块(不同的操作系统环境变量的设置稍有不同,默认以下都是WIndows环境),这与众多应用程序需要设置一个系统环境变量的道理是一样的。在命令行中可以通过以下命令设置:

C:UsersAdministrator>set PYTHONPATH=E:/Project/Python/ModuleAndPackage/

进入Python环境后可以,通过Python的sys.path属性获得当前搜索路径的配置,可以看到之前我们设置的路径已经在当前搜索路径中了。 C:UsersAdministrator>python

Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>> import sys

>>> sys.path

['', 'E:\Project\Python\ModuleAndPackage', 'C:\Windows\system32\python27.zip', 'C:\Python\DLLs', 'C:\Python\lib', 'C:\Python\lib\plat-win', 'C:\Python\lib\lib-tk', 'C:\Python', 'C:\Python\lib\site-packages'] 也可以通过sys模块的append方法在Python环境中增加搜索路径。 >>> sys.path.append("E:\Project\Python\ModuleAndPackage2")

>>> sys.path

['', 'E:\Project\Python\ModuleAndPackage', 'C:\Windows\system32\python27.zip', 'C:\Python\DLLs', 'C:\Python\lib', 'C:\Python\lib\plat-win', 'C:\Python\lib\lib-tk', 'C:\Python', 'C:\Python\lib\site-packages', 'E:\Project\Python\ModuleAndPackage2']

>>> 四、Python中的模块和包 包(package)

为了组织好模块,将多个模块分为一个包。包是python模块文件所在的目录,且该目录下必须存在__init__.py文件。常见的包结构如下:

package_a
├── __init__.py
├── module_a1.py
└── module_a2.py
package_b
├── __init__.py
├── module_b1.py
└── module_b2.py
main.py

•如果main.py想要引用packagea中的模块modulea1,可以使用: from package_a import module_a1 import package_a.module_a1

•如果packagea中的modulea1需要引用packageb,那么默认情况下,python是找不到packageb。我们可以使用sys.path.append('../'),可以在packagea中的__init__.py添加这句话,然后该包下得所有module都添加* import __init_即可。

原文地址:https://www.cnblogs.com/wangshaojie/p/7263854.html