Fork me on GitHub
一分钟了解Python3.8新特性

一分钟了解Python3.8新特性

今天Python3.8版本刚刚发布,添加了很多新功能。这里介绍几个我觉得最酷的特性,感受一下小Python的美。 更全面的特性请直接去官网看:https://docs.python.org/3.8/whatsnew/3.8.html 赋值表达式新增一个新的赋值语法:=,它将赋给左边变量并将赋值语句转换成一个表达式。该特性编号为 PEP 572就是赋值表达式,也叫“海象运算符”。 可以看到这个操作符看上去像一只横躺着的海象。 比如下面这个例子中,使用赋值表达式可以防止你调...

每天5分钟玩转Python(19) - 安装虚拟环境

每天5分钟玩转Python(19) - 安装虚拟环境

如果正常使用pip安装会将软件包安装到python系统包目录下面,也就是site-packages目录。 通常我们需要对环境进行隔离以防止别的包影响到。这时候需要安装虚拟环境virtualenv了。 安装virtualenvvirtualenv可用于创建独立的 Python 环境,它会创建一个包含项目所必须要的执行文件。 sudo pip install -U virtualenv 创建虚拟环境如下命令表示在当前目录下创建一个名叫 myenv 的目录(虚拟环境), 该...

每天5分钟玩转Python(18) - 包管理工具pip

每天5分钟玩转Python(18) - 包管理工具pip

安装完python后就已经安装了所有的内置模块,如果只是需要内置模块之间导入即可, 而当我们需要第三方模块的时候就需要自己去安装了。python里面最常用的是使用pip在线安装第三方模块。 其实,pip就是Python标准库中的一个包,这个包比较特殊,用它可以来管理Python标准库中其他的包。 pip支持从PyPI(https://pypi.org/)、版本控制以及直接从分发文件进行安装。 pip是一个命令行程序。安装pip后,会向系统添加一个pip命令,该命令可以从...

每天5分钟玩转Python(17) - 模块和包

每天5分钟玩转Python(17) - 模块和包

模块和包都是用来组织代码用的,在python中一个模块就是一个.py文件, 而一个包就是一个包含了__init__.py的文件夹。 使用模块最大的好处就是提高代码可维护性,我们在编写代码的时候通常会引用内置模块或第三方模块。 引入包是为了解决命名冲突问题,你可以把包当成是命名空间, 比如你写的abc.py模块和其他人写的abc.py模块只要在不同的包中就不会冲突。 只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。 比如我现在有这样一个目录结构: winhong/...

每天5分钟玩转Python(16) - 装饰器

每天5分钟玩转Python(16) - 装饰器

Python有着强大的表达式语法和函数特性,其中一个我的最爱便是装饰器。 在设计模式中,装饰器能够在不使用子类的情况下动态的修改函数、方法或类的功能。 当你需要扩展某个函数的功能却不想直接修改这个函数的时候,装饰器就可以派上用场了。 实现装饰器模式有很多种方法,但是Python通过强大的语法支持来让这个变得相当容易。 本质上来讲,装饰器是以包装器形式工作的,其实就是在执行目标函数之前或之后加入自己的逻辑, 而不需要改变目标函数本身就可以增强它的功能,也就是说装饰了它。 ...

每天5分钟玩转Python(15) - 闭包

每天5分钟玩转Python(15) - 闭包

闭包跟函数式紧密联系在一起的,介绍闭包之前先了解一下python中函数的高阶用法。比如嵌套函数、变量作用域等等。 变量作用域变量作用域是程序运行时变量可被访问的范围,定义在函数内的变量是局部变量, 局部变量的作用范围只能是函数内部范围内,它不能在函数外引用。 def test(): num = 10 # 局部变量 print(num) # NameError: name 'num' is not defined 定义在模块最外层的变量是全局变...

每天5分钟玩转Python(14) - 函数式编程之filter/sorted

每天5分钟玩转Python(14) - 函数式编程之filter/sorted

这一篇再讲两个高阶函数,一个是过滤器函数,一个是排序函数。这些都是使用最频繁的函数,也很具有代表性。 filter()函数filter()函数用于过滤序列,跟map()一样,也是接受一个函数,一个Iterable。 它将传入的函数依次作用于序列每个元素如果函数返回值为True则保留元素,否则丢弃元素。 最终的返回值仍然是一个Iterable。 比如在一个从0到10的列表中,只保留偶数。则正是过滤器函数用武之地: print(list(filter(lambda x: x...

每天5分钟玩转Python(13) - 函数式编程之map/reduce

每天5分钟玩转Python(13) - 函数式编程之map/reduce

函数式(Functional Programming)编程是一种抽象程度非常高的编程范式,纯粹的函数式编程中没有变量。 对于任意一个函数,输入确定则输出也确定,这种纯函数没有任何副作用,非常适合高并发场景。 比如Lisp语言就是一个纯粹的函数式编程语言。 另外函数式编程中,函数可作为参数传入另外一个函数,也可作为返回值,跟变量一样。 由于Python中存在变量,因此并不是纯函数式编程语言。 map/reduce这个东西最初出自于Google的论文《MapReduce: ...

每天5分钟玩转Python(12) - 生成器(下)

每天5分钟玩转Python(12) - 生成器(下)

这一章开始介绍生成器函数和yield关键字,以及Python中的协程的概念。 yield关键字当我们调用一个普通的函数时,执行过程从第一条语句开始,直到碰到一个return语句或者遇到一个异常抛出, 再或者到了函数最后一条语句(实际上相对于一个隐式的return None)的时候结束。 一旦这个函数返回后将控制权交还给它的调用者,它里面所有的局部变量值都消失了,当你重新调用它的时候,一切又将重新开始。 这就是我们通常意义上面所认识的函数(或者说是子程序),但有时候我们需...

每天5分钟玩转Python(11) - 生成器(上)

每天5分钟玩转Python(11) - 生成器(上)

这篇开始要展示python这门语言真正的魅力所在了。python有一些高级功能, 让我们的代码写起来超级爽,所以才会有这么多人喜欢它。 这篇先介绍生成器这个东东,学会你就知道它有多强大了,不过对于生成器的讲解稍微有点长, 可能看完不止5分钟,所以我分了上下两篇。建议读者耐心看完,这是进阶的必经之路。 列表推导在讲生成器之前,先讲讲python里面常用的几个常见的推导式: 列表推导式(list comprehension) my_list = [f(x) for x in...