每天5分钟玩转Python(19) - 安装虚拟环境
如果正常使用pip安装会将软件包安装到python系统包目录下面,也就是site-packages目录。 通常我们需要对环境进行隔离以防止别的包影响到。这时候需要安装虚拟环境virtualenv了。
如果正常使用pip安装会将软件包安装到python系统包目录下面,也就是site-packages目录。 通常我们需要对环境进行隔离以防止别的包影响到。这时候需要安装虚拟环境virtualenv了。
安装完python后就已经安装了所有的内置模块,如果只是需要内置模块之间导入即可, 而当我们需要第三方模块的时候就需要自己去安装了。python里面最常用的是使用pip在线安装第三方模块。
其实,pip就是Python标准库中的一个包,这个包比较特殊,用它可以来管理Python标准库中其他的包。 pip支持从PyPI(https://pypi.org/)、版本控制以及直接从分发文件进行安装。 pip是一个命令行程序。安装pip后,会向系统添加一个pip命令,该命令可以从命令提示符运行。 目前,pip 是The Python Packaging Authority (PyPA) 推荐的 Python 包管理工具!
模块和包都是用来组织代码用的,在python中一个模块就是一个.py文件,
而一个包就是一个包含了__init__.py
的文件夹。
使用模块最大的好处就是提高代码可维护性,我们在编写代码的时候通常会引用内置模块或第三方模块。
引入包是为了解决命名冲突问题,你可以把包当成是命名空间,
比如你写的abc.py
模块和其他人写的abc.py
模块只要在不同的包中就不会冲突。
只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。
Python有着强大的表达式语法和函数特性,其中一个我的最爱便是装饰器。 在设计模式中,装饰器能够在不使用子类的情况下动态的修改函数、方法或类的功能。
当你需要扩展某个函数的功能却不想直接修改这个函数的时候,装饰器就可以派上用场了。 实现装饰器模式有很多种方法,但是Python通过强大的语法支持来让这个变得相当容易。
本质上来讲,装饰器是以包装器形式工作的,其实就是在执行目标函数之前或之后加入自己的逻辑, 而不需要改变目标函数本身就可以增强它的功能,也就是说装饰了它。
在这篇文章中我将深入讲解Python的函数装饰器,并通过一系列的源码示例来彻底讲清楚这个东西。
上一篇讲过闭包的概念,它的一个应用就是构造装饰器。
闭包跟函数式紧密联系在一起的,介绍闭包之前先了解一下python中函数的高阶用法。比如嵌套函数、变量作用域等等。
这一篇再讲两个高阶函数,一个是过滤器函数filter,一个是排序函数sorted。这些都是使用最频繁的函数,也很具有代表性。
函数式(Functional Programming)编程是一种抽象程度非常高的编程范式,纯粹的函数式编程中没有变量。 对于任意一个函数,输入确定则输出也确定,这种纯函数没有任何副作用,非常适合高并发场景。 比如Lisp语言就是一个纯粹的函数式编程语言。
另外函数式编程中,函数可作为参数传入另外一个函数,也可作为返回值,跟变量一样。 由于Python中存在变量,因此并不是纯函数式编程语言。
这一章开始介绍生成器函数和yield
关键字,以及Python中的协程的概念。
当我们调用一个普通的函数时,执行过程从第一条语句开始,直到碰到一个return
语句或者遇到一个异常抛出,
再或者到了函数最后一条语句(实际上相对于一个隐式的return None
)的时候结束。
一旦这个函数返回后将控制权交还给它的调用者,它里面所有的局部变量值都消失了,当你重新调用它的时候,一切又将重新开始。
这就是我们通常意义上面所认识的函数(或者说是子程序),但有时候我们需要创建某个函数,它并不简单的返回一个值, 而是可以不断的释放一个值的序列。那么这个特殊的函数就需要能够”保存”它的状态。
我刚刚用了”释放一个值的序列”这种说法,是因为我刚刚所假定的那个函数并不是普通的返回一个值。
return
表明函数将控制权返回给被调用时的那个点。而yield
表示这个控制权的转义只是暂时的,将来我还可以重获控制权。
在Python中,有这种能力的”函数”被称为生成器,它们相当有用。生成器(yield语句)刚开始被引入进来主要是用来方便的生成序列值。
这篇开始要展示python这门语言真正的魅力所在了。python有一些高级功能, 让我们的代码写起来超级爽,所以才会有这么多人喜欢它。
这篇先介绍生成器这个东东,学会你就知道它有多强大了,不过对于生成器的讲解稍微有点长, 可能看完不止5分钟,所以我分了上下两篇。建议读者耐心看完,这是进阶的必经之路。
迭代(iteration)指的是去获取元素的一种方式,一个接一个。当你显式或隐式的使用循环来遍历某个元素集的时候,那就是迭代。
之前我们学习for循环迭代的时候知道,操作对象可以是list、tuple、dict、set、str类型。 实际上除了这几类内置类型外,for循环还能操作generator类型,也就是迭代器类型。
generator类型包括生成器和带yield的
生成器函数。
在Python里面,可迭代对象(iterable)和迭代器(iterator)有着特殊的含义。
iterable
是实现了__iter__()
方法的对象,该方法会返回一个iterator
对象iterator
是实现了__iter__()
和__next__()
方法的对象,__iter__()
方法返回的是iterator
对象本身