分类目录归档:解决方案

Python moviepy 一个快速视频剪辑编辑神器

你知道吗,用moviepy一行代码就能够快速剪辑视频中某个区间的片段:

clip = VideoFileClip("videoplayback.mp4").subclip(50,60)

这一段代码,能够在3秒内将videoplayback.mp4的50秒-60秒的视频片段提取出来,非常方便。

https://pythondict-1252734158.file.myqcloud.com/home/www/pythondict/wp-content/uploads/2020/06/2020062216500711.webm

不仅如此,moviepy还支持添加字幕、调整音量、片段链接等功能。下面看看详细的操作方法。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

在终端输入以下命令安装我们所需要的依赖模块:

pip install moviepy

看到 Successfully installed xxx 则说明安装成功。

2.视频剪辑

剪辑个视频,多大点事,比起下载PR,用Python 写3行代码,3秒剪辑不香吗?

from moviepy.editor import *

# 剪辑50-60秒的音乐 00:00:50 - 00:00:60
video = CompositeVideoClip([VideoFileClip("videoplayback.mp4").subclip(50,60)])

# 写入剪辑完成的音乐
video.write_videofile("done.mp4")

3.视频拼接

“哦?Python?哼,那你肯定很难进行拼接工作吧,PR多方便,拖拽即可完成拼接。”

那你可真是太小看Python了,moviepy几行代码随随便便就能拼接许多片段:

from moviepy.editor import VideoFileClip, concatenate_videoclips
clip1 = VideoFileClip("myvideo.mp4")

# 结合剪辑,你甚至能够完全自动化剪辑拼接视频的操作
clip2 = VideoFileClip("myvideo2.mp4").subclip(50,60)

clip3 = VideoFileClip("myvideo3.mp4")
final_clip = concatenate_videoclips([clip1,clip2,clip3])
final_clip.write_videofile("my_concatenation.mp4")

结合剪辑,你甚至能够完全自动化剪辑拼接视频的操作。

4.逐帧变化

“那你能完成针对每一帧图像的快速图像处理吗?PR可是做得到的哦”

我擦,你简直是在侮辱Python,教你如何反转视频每一帧的绿色和蓝色通道:

from moviepy.editor import VideoFileClip
my_clip = VideoFileClip("videoplayback.mp4")

def scroll(get_frame, t):
    """
    处理每一帧图像
    """
    frame = get_frame(t)
    frame_region = frame[:,:,[0,2,1]]
    return frame_region

modifiedClip = my_clip.fl(scroll)
modifiedClip.write_videofile("test.mp4")

5.导出GIF

哇,听起来好像挺牛逼的,那用来导出到GIF吗

当然可以:

from moviepy.editor import *

# 剪辑50-60秒的音乐 00:00:50 - 00:00:60
video = CompositeVideoClip([VideoFileClip("videoplayback.mp4").subclip(50,60)])

my_clip.write_gif('test.gif', fps=12)

扫描下方二维码,可以加入我们的Python互助群哦:

我们的文章到此就结束啦,如果你喜欢我们今天的Python 实战教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

这10篇Python实战教程,你不学可能会后悔

1.Python 一键生成漂亮的生日快乐词云!

2.比PS还好用!Python实战20行代码批量抠图

3.Python实战教程 自动提取电影中所有人脸

4.Python实战教程 一键转化代码为流程图

5.手把手教你树莓派人脸识别开机的Python实战教程

6.人人都能懂的 Python 自动发送邮件实战教程

7.Python 五分钟绘制漂亮的系统架构图实战教程

8.瑞幸VS星巴克,谁的门店最多?Python实战教程告诉你

9.剪辑音乐要很久?3行语句Python实战瞬间搞定

10.Python 多种音乐格式批量转换实战教程

其实还有好多实战教程就不一一列出来了,毕竟Python实用宝典的原创数其实已经快300了。

大家可以在公众号历史页或者下方阅读原文访问Python实用宝典网。搜索自己想要阅读的关键词。


对了,如果你在实战的过程中有任何疑问,可以加我们的讨论群,里面有许多同学都能提供帮助:

我们的文章到此就结束啦,如果你喜欢我们今天的Python 实战教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 能用来干嘛?

Python 能用来干嘛?经常能遇到小伙伴在知乎上问这个问题,而每个这样的问题我都想回答,最终落得个重复答案被删除的下场。

我看到许多人只是千篇一律地回答:Web开发、自动化运维、网络爬虫、数据分析…等等。个人觉得这样的回答太过于抽象,也太敷衍了,没有抓到问题的关键点。

我今年写了许多有趣的小玩意儿,从web开发数据分析,从数据分析到量化投资,甚至还送特朗普上了太阳。但实际上,这些文章都围绕着一个主题:Python 是一个用来解决问题的好工具

学Python,学的可不止是编程语言,更重要的是学会使用这个解决问题的好工具,下面就是一系列解决问题的Python 实战教程。希望能帮你养成用Python解决问题的思维。

数据相关:

1.Python 多项式预测2019年天猫销售额

2.Python 百度指数突变值检测

3.Python 制作音乐高潮副歌提取器

4.Python 来算算一线城市的二手房价格指数相关性

5.Python 20行代码检测人脸是否佩戴口罩

6.比PS还好用!Python 20行代码批量抠图

7.Python 识别文本情感就这么简单

8.Python 计算 瑞幸和星巴克 谁的门店最多

9.Python 短文本自动识别个体是否有自杀倾向

10.如何基于Paddle训练一个98%准确率的抑郁文本预测模型

11.Python 机器学习预测泰坦尼克号存活概率

12.Python 一键吸猫!找出磁盘里所有猫照

13.你的10W块放哪里能赚最多钱?

14.Python 自动提取电影中所有人脸

可视化相关:

1.Python 绘制属于你的世界地图

2.Python 快速绘制画出漂亮的系统架构图

3.7行代码 Python热力图可视化分析缺失数据处理

4.Python 人口出生率数据预测及可视化

5.Python 提取音乐频谱并可视化

6.AO3被封的冤不冤?可视化数据分析《下坠》

7.Python 流程图 — 一键转化代码为流程图

8.Python 批量转化彩色图片为黑白图片

9.Blender, 用Python绘制宇宙飞船的3D建模软件

游戏相关:

1.庆祝胖五发射成功, 来用Python发射火箭!

2.Python 精美俄罗斯方块开源项目

3.Python 小游戏—加农炮送特朗普上太阳

4.快来用Python写一个简单版《我的世界》

树莓派与智能家居:

1.Python 树莓派智能音箱语音控制电脑开关机

2.Python 树莓派语音控制普通风扇实现教程

3.python 树莓派语音控制普通台灯教程

4.python 树莓派人脸识别自动开机教程

量化投资

1.Python 量化投资 原来这么简单(1) — Backtrader 教程

2.Python 量化投资原来这么简单(2) —MACD策略

3.Python 量化投资原来这么简单(3) —A股回测MACD策略

4.Python 量化投资原来这么简单(4) —KDJ 策略

5.Python 量化投资原来这么简单(5) — A股回测KDJ 策略

其他

当然,还有一些有趣的Python教程实例,它不只属于简单的一类,我更倾向于称之为工具,包括数据爬虫、自动化、一键格式化代码等等:

1.Python 8行代码模拟鼠标自动删除微信收藏

2.Python 爬取“微博树洞”详细教程

3.Python 超简单爬取新浪微博数据 (高级版)

4.Python 一个超快的公共情报搜集爬虫

5.Python Black一键格式化美化代码(详细配置教程)

等等…更多的文章大家可以在Python实用宝典公众号历史页里查看,也可以到Python实用宝典网站上进行体验更好的阅读:
https://pythondict.com

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python Black一键格式化美化代码(详细配置教程)

复制别人的代码进行使用的时候,最烦的就是看到编辑器上显示的各种红色的、橙色的线吧?尤其是那些不遵守PEP8规则的代码,等号两边的空格会加到你手软…真希望哪天全世界写Python的小伙伴们都能统一代码规范啊!

没事,现在有black这个神器,我们可以在终端中输入一句命令就自动格式化代码!而且对于初学者来说,用Black来学习代码规范也是一个非常不错的选择。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

在终端输入以下命令安装我们所需要的依赖模块:

pip install black

看到 Successfully installed xxx 则说明安装成功。

安装完成之后,你有两种使用black的方式,一种是直接在命令里输入:

black 你的文件路径.py

它就会自动格式化该Python文件,如果你是使用VSCode,我推荐使用这种方法来格式化。

如果你使用Pycharm,那么需要这么设置:

在PyCharm菜单 File->Setting->Tools->External Tools->单击按钮“+”号:

在弹出窗口里的Name中输入一个名字作为在以后在Pycharm菜单->Tools->External Tools中显示的名字,作为方便的工具入口,例如在此输入名字为BlackFormatter:

在Programs中输入black安装后的black.exe文件所在目录。该目录在Windows的cmd窗口中通过命令where black查找到,在Linux中用命令which black查找。

例如我的路径是:C:\Users\Ckend\Anaconda3\Scripts\black.exe,将此包含balck.exe文件名的全路径填入到Programs框中。在Arguments中填入$FilePath$,在Working Directory中填入$ProjectFileDir$。然后单击OK即可。

2.使用

如前所述,两种使用方法,先介绍Vscode的,比如说下面这个糟糕的格式:

真的各种线条都出现了,不过你只需要在终端中输入:

black test.py

就能一键美化到符合PEP8标准的代码格式:

使用Pycharm的话则更方便了(当然前提是你配置好了),你只需要按 Tools->External Tools -> BlackFormatter(你刚配置时输入的名称) 即可直接格式化当前文件。

Pycharm下方如图所示则说明格式化成功:

当然,Pycharm也可以使用命令的方式格式化,在Terminal里输入即可,因为它其实和Vscode的终端是一个东西,注意black安装的环境和你终端使用的虚拟环境是一致的就行。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 流程图 — 一键转化代码为流程图

Graphviz是一个可以对图进行自动布局的绘图工具,由贝尔实验室开源。我们在上次 Python 快速绘制画出漂亮的系统架构图 提到的diagrams,其内部的编排逻辑就用到了这个开源工具包。

而今天我们要介绍的项目,就是基于Python和Graphviz开发的,能将源代码转化为流程图的工具:pycallgraph

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

输入以下命令安装 pycallgraph 模块。

pip install pycallgraph

看到 Successfully installed xxx 则说明安装成功。除此之外,你还需要安装graphviz

macOS用户请使用brew安装:

brew install graphviz

windows用户请点击链接:graphviz-2.38.msi 下载安装,安装完成后需要将其写入到环境变量中:

2.生成流程图

该模块有两种调用方式,一种是在代码里通过上下文调用:

from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput

with PyCallGraph(output=GraphvizOutput()):
    # 需要绘制流程图的代码,可以是函数
    # ... ...

比如说,绘制一下咱上回的《Python 我的世界》源代码的流程图:

# ...省略大部分代码...
if __name__ == '__main__':
    from pycallgraph import PyCallGraph
    from pycallgraph.output import GraphvizOutput

    with PyCallGraph(output=GraphvizOutput()):
        main()

在运行该Python文件后,会在当前文件夹下产生一个pycallgraph.png的文件,这个就是该代码的流程图:

还有一种是使用命令的方式调用,这个方式必须使用bash才能运行,macOS用户可以忽视这个问题,但如果你是windows用户,请通过以下方式打开bash(以VS Code为例):

然后通过Ctrl + shift + ` 打开一个新的终端,即可看到以bash启动的命令行。

通过输入以下命令生成流程图:

pycallgraph graphviz -- ./你需要生成流程图的.py文件

完成后会在当前文件夹下生成一个pycallgraph.png的文件,这个就是这份代码的流程图。

通过这个方法,你可以清晰地看到这份源代码里面的调用逻辑和其每个模块的运行时间,是一个很方便的小工具,非常适合初学者学习他人的开源模块。大家有需要研究的代码可以用这个工具试一试,说不定有意外的收获呢。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

利用 Python 理解设计模式之委托模式

有时候,我们想通过一个类来调用另一个类里的方法来处理请求,即这两个类对象参与处理同一个请求对象,只不过一个是委托者,一个是处理者

比如我们现在有一个名为Dog的类对象,我们希望通过它调用 voice 类产生“狗吠 ” 声,这时候就可以采用委托模式。下面就用Python来理解这个设计模式。

Python里,在委托者类对象中,需要这么设计:

1. 重写__getattr__方法,使得委托者获得处理者的属性。

2. 判断该属性是否为可调用函数,如果不是则直接返回,如果是,则用 wrapper 封装为可调用对象。

如下所示:

class Dog:
    def __init__(self, voice):
        self.voice = voice

    def __getattr__(self, name):
        """
        重写__getattr__方法
        获得相应的属性

        Arguments:
            name {str} -- 目标变量/函数名
        
        Returns:
            attr -- 处理者的变量/函数
        """

        attr = getattr(self.voice, name)

        if not callable(attr):
            return attr

        def wrapper(*args, **kwargs):
            return attr(*args, **kwargs)
        return wrapper 

这样做的好处是,处理者(被委托者)不需要做太多的更改,一般是一个公用类。我们的处理者如下:

class voice:
    def __init__(self):
        self.p1 = 'test'

    def words(self, something):
        print("voice: %s" % something)
        return "voice: %s" % something

这样就可以通过委托者来调用另一个类的方法来对请求进行处理:

if __name__ == '__main__':
    John = Dog(voice())
    John.words('汪汪')

实际上,如果你不重写__getattr__,一样可以用以下的方式调用到voice类:

if __name__ == '__main__':
    John = Dog(voice())
    John.voice.words('汪汪') 

这两种有什么区别呢?使用委托模式,可以简化代码,优化可读性,你不需要再调用voice对象, 委托者自己会利用 __getattr__ 找到相应的对象里的方法。

不过,在Python里,委托模式这样的写法其实是 un-pythonic 的,因为它将调用的方法隐藏在了执行者中, 可读性比较差。如果不是特殊需要,一般不会这么做,这里只是给大家展示如何用Python来理解这个设计模式。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

网飞公司(Netflix)是怎么用Python的?

本文译自网飞科技博客,原文:
https://netflixtechblog.com/python-at-netflix-bba45dae649e?gi=83b411a8aff

Netflix(网飞)是全球最大的视频流媒体平台,在除中国大陆地区之外的所有国家和地区都提供视频点播服务。Netflix是经营在线业务公司中的一个亮点。它成功地把传统的影像租赁业务和现代化的市场营销手段、先进的IT网络技术结合起来,从而开创了在线影像租赁的新局面。Netflix通过整合其自身的营销手段和最近的IT网络技术,成功地改变了消费习惯和打造了自己的品牌优势。

Netflix的技术本质上就是回答两个问题:

1. 如何提升用户观看体验?

2. 如何在内容上让用户喜欢?

而这两个问题,在Python的帮助之下,交了一份令人满意的答卷,让我们一起来看看 Python 在 Netflix 是如何应用的。

1.加快视频分发速度

为了加快视频的分发速度,网飞开发了一个名为 Open Connect 的内容分发网络(content delivery network,CDN),尽可能靠近用户,为客户改善流媒体体验,加快视频的下载速度。

而设计、构建和运营这个 CDN 基础设置所需的各种软件系统,其中很多都是用 Python 编写的。其有一个配置信息管理系统,里面跟踪网飞的网络设备库存:有哪些设备、哪些型号,用什么硬件组件,都位于什么位置。这些设备的配置由几个其他系统控制,包括数据源、设备配置的应用和备份。用于收集运行状况和其他运营数据的设备交互是另一个 Python 应用程序。

2.快速解决运营需求

网飞还用Python负责处理Netflix云的区域故障转移,流量管理,容量运营管理(管理内容可以维修的限制)等内容,使用的Python模块大致如下:

NumPy和SciPy

NumPy和SciPy是用于科学计算的库。Netflix使用这些Python库来执行数值分析,从而允许管理区域故障转移。

Boto3

Boto3是适用于Python的AWS(Amazon Web Services)的软件开发工具包(SDK)。这有助于Python开发人员将Python集成到AWS中,从而允许在基础架构中进行开发。

RQ(Redis队列)

这是一个Python库,可帮助跟踪队列中存在的任务并允许其执行,从而允许管理异步工作负载。

Flask

最后,Netflix使用Flask(Python Web开发库)API将所有先前的功能绑定在一起。

他们的工具主要是由 Python 构建的。编排故障转移的服务使用 numpy 和 scipy 来执行数值分析,boto3 对 AWS 基础设施进行更改,rq 用于运行异步工作负载,将其打包在一个 Flask API 的简单接口层中。放入 bpython shell 并进行临时制作的能力已经不止一次挽救了局面。

( bpython是一个不错的Python解释器的界面,开发者的目的是提供给用户所有的内置功能,很像现在的IDE(集成开发环境),但是将这些功能封装在在一个简单,轻量级的包里,可以在终端窗口里面运行,弥补原始解释器的不足。)

3.警报与统计、 自动修复

他们还用警报和统计分析工作中使用 Python。警报系统显示问题时,他们使用Python的许多统计和数学库(如 numpy、scipy、ruptures、pandas)来帮助自动分析 1000 多个相关信号。并开发了一个用于团队内外的时间序列相关系统 Spectator Python,以及分布式工作系统,用于并行处理大量的分析工作,以快速交付结果。

除此之外,他们也经常用Python来自动化任务、数据挖掘和清理的工具,也是可视化工作的方便工具。

4.信息安全

网飞信息安全团队使用 Python 为 Netflix 实现了许多高层次目标:安全自动化、风险分类、自动修复和漏洞识别等等。利用 Python 来保护使用 Bless 的 SSH 资源、利用 Python 帮助使用 Repokid 进行 IAM 权限调整、使用 Python 来帮助Lemur 生成 TLS 证书等等。

5.个性化推荐

说起个性化算法,当然少不了机器学习和深度学习。他们使用 Python 来训练一些 Netflix 影响用户体验关键方面的机器学习模型,如决策树、XGBoost等,而且在开发过程中,实现了一套自动化流程。

6.优化Python极限

为了使得生产效率提高,他们还利用机器学习开发了一个叫Metafolw的Python框架。这个框架提升了 Python 的极限,通过良好的设计和对Python代码的部分改造,成功实现了使用Python来获取几十G数据的可能性,大大提升了计算能力。

7.大数据编排

为了更好地编排大数据,他们还构建了一个用Python编写的事件驱动型平台,将许多个系统统一到该工具中,转化成事件流的形式进行调度,并具有模板化的作业类型。

因此,他们能够随时解耦微服务,而且通过这个平台,他们能够了解数据的流动状况,以及发生的所有事情。当然,Netflix 的系统之所以能够如此稳定,还有更多的技术因素在里面,这里就不能够再赘述了。有兴趣可以看看下面这本书。

《 混沌工程:Netflix系统稳定性之道 [Chaos Engineering]


文中涉及到的部分项目、库的官方地址:

Open Connect: https://openconnect.netflix.com/en/

bpython: https://bpython-interpreter.org/

nteract: https://nteract.io/

visualization tools: https://github.com/nteract/nteract/tree/master/packages/data-explorer

Spectator: https://github.com/Netflix/spectator-py

Security Monkey: https://github.com/Netflix/security_monkey

Bless: https://github.com/Netflix/bless

我们的文章到此就结束啦,如果你喜欢我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 编程的最好搭档—VSCode 详细指南

刚学Python的同学可能会觉得每次写Python的时候都得打开Cmd有点烦躁,直接上手Pycharm的同学可能会觉得这软件太笨重了,晦涩难用。那么有没有省去打开CMD的步骤,又能弥补Pycharm笨重的特点的软件呢?——答案是VSCode.

诞生于2015年的VSCode编辑器,现在可以说是目前最强的编辑器之一,在微软的背书下,比各位历史悠久的老大哥成长快得多,不到5年的时间里便坐到了市场占有率第一的位置。这么短的时间里,它是怎么成功的?答案是:简单,可扩展性强

编辑器,简单很重要。还记得我多年前第一次用Vim编辑器时搜索的第一个问题:怎么退出Vim?一个工具的学习曲线会直接影响该工具的受众数量,对于编辑器而言尤其如此。任何使用起来复杂的东西最终都会被更容易使用的东西替代掉,不过Vim有其在运维方面的独特优势,所以它暂时是不可替代的。

Vim的不可替代是在服务器层面,对于我们在桌面端编程而言,越简单好用的编辑器越好,不要搞骚操作,最终烦的是自己。这就是为什么VSCode越来越火爆,而且它不仅简单易用,还能覆盖几乎所有语言的编写,如果我有一个小项目需要涉及到前后端所有代码,用VSCode一个编辑器就能解决了,而不是前端切Webstorm,后端切Pycharm.

好了,接下来就让我们来上手VSCode.

1.安装

毕竟是微软大爷的产品,安装VSCode你几乎不会遇到问题,打开:
https://code.visualstudio.com/

选择适合自己系统的版本下载安装,一路默认即可:

2.使用

如果你看不惯英文版的编辑器,下面教你怎么装中文插件:

2.1 中文插件

1. 点击View – Command Palette (或输入 Ctrl + shift + P) 进入命令面板.

2. 输入 configure language, 选择Configure Display Language (配置显示语言)。

3. 检查有没有zh-cn的选项,如果有,直接选择zh-cn替换。然后按照提示重启vscode就能看到界面变回中文了。

如果没有zh-cn的选项,则选择install additional languages (添加其他语言选项),左边会弹出扩展窗口,扩展窗口找到中文简体,点击 install 安装,重复 第 1, 2 步骤 选择中文即可。

2.2 使用终端(Terminal)

这是用VSCode编写Python最核心的地方,你不用打开丑丑的CMD,直接在VSCode中就可以运行Python。

点击 【查看—终端 】 或直接快捷键 【Ctrl + ` 】 打开终端,会在下方产生一个CMD控制台:

在这里你做的最新修改都可以直接 python xx.py 运行:

不过要注意一下当前的文件夹是否和Python脚本文件处于同一个目录,如果不在同一个目录则要cd进去。

2.3 一键运行

很多同学都想一键运行Python,而非以命令的形式运行,这时候就需要Python扩展了,打开扩展页,输入Python,选择第一个进行安装 install 即可:

重新加载VSCode生效,在这后编辑完代码按F5即可运行(如果你不需要输入参数的话),初次运行可能会让你选环境,选择Python即可。

默认按F5后进入DEBUG模式,需要再按一次F5程序才会运行,如果要按F5马上运行需要将launch.json文件的 “stopOnEntry”: true,改为 “stopOnEntry”: false。 launch.json文件在设置中可以找到,如下图所示:

3.其他扩展

3.1 语法提示,配置flake8

写代码没有语法提示,其实是很难受的一件事情,IDE直接帮你做了这件事,不过VSCode需要你稍微配置一下:

1. 打开终端,输入 pip install flake8 安装flake8,我已经装过了,你的提示应该跟我的不一样:

2. 在settings.json文件中输入”python.linting.flake8Enabled”: true

3.2 自动格式化代码

Yapf是谷歌开源的一个用于格式化Python代码的工具,可以一键美化代码。支持两种规范:PEP8和Google Style,下面的步骤和3.1类似的就不再补图啦:

1. 打开终端

2. 输入 “pip install yapf” 安装yapf

3. 在settings.json文件中输入”python.formatting.provider”: “yapf”

4. 用一个看看, 按下快捷键 Alt+Shift+F 即可自动格式化代码。

3.3 文件及文件夹图标

默认的VSCode图标没有那么详细,只有几个重要文件类型的图标提示,可以安装vscode-icons解决,Mac的有vscode-icons-mac版本。如图所示:

之后的文件显示就详细多了:

3.4 生成注释格式

这个是我强烈推荐的插件,搜索docstring,目前排在第四位,由Nils Werner开发的autoDocstring,优秀的代表:

之后,你只需要在函数名后面输入三个双引号然后回车,即可生成docstring注释:

按Tab可以直接切换需要输入的位置,而不用鼠标去点击,加快了注释效率。不过,我有点不喜欢它comment出现的位置直接在三个双引号的后面,有点不太雅观,可能这就是东西方美感的差异?

3.5 更强大的自动补全

搜索Kite,安装下面这个插件:

然后需要安装一个叫 Kite Engine 的软件,直接前往官网下载对应的系统版本即可:

安装完成后,你可以不注册,一路下一步即可,然后返回VScode体验一下它的强大:

具有丝毫不逊色于Pycharm的代码补全功能。

VsCode系列文章:

Python 使用VS Code进行调试

VSCode 设置中文

Python 编程的最好搭档—VSCode 详细指南

我们的文章到此就结束啦,如果你喜欢我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

编程零基础如何在半年内熟练掌握python?

这个问题是在知乎上遇到的,我觉得特别有意义,所以单独发篇推送来讲讲我的看法。不过这个问题得看我们如何定义熟练掌握了,如果你只是想会写爬虫,独立编写办公小程序,按照我下面的步骤进行学习,半年是有可能的。

如果是想用Python来找工作的话,半年还是有难度的,需要多做点项目,熟练掌握Python的一些特点,尤其是一些面向对象的编程方法。

学Python最重要的就是学会用别人已经造好的轮子进行快速而又高效的开发,可以从应用练习入手,再到一些数据分析的项目,最后如果能自己学会熟练使用TensorFlow或PyTorch或者Web开发框架Django,基本超越了绝大部分人了。

1.基础学习

阅读《Think Python》或者廖雪峰的Python教程。 读完前八章,到面向对象编程即可,后续的知识可以在不断的实操训练中学习。

不过,如果你的目标是找到工作,那建议全部阅读完,而且还要加增学习:《Python核心编程》。如果你访问不了github,可以关注Python实用宝典公众号,后台回复:核心编程

2.应用练习

基础学习完毕后,就要开始练习一些简单的实操性项目巩固学习,Python实用宝典过去的许多文章其实都是这样的简单实操性项目,非常适合大家用来熟练掌握一些包的应用。

比如打水印:超简单Python安全批量打水印教程!

提取音乐高潮:Python 制作音乐高潮副歌提取器

文献搜索工具:你不得不知道的python超级文献搜索工具

向手机发送通知:教你如何使用Python向手机发送通知(IFTTT)

爬虫练习:Python 爬取“微博树洞”详细教程

然后是用微博树洞做数据分析:Python 短文本自动识别个体是否有自杀倾向

哄哄女朋友:Python导出微信聊天记录并生成词云

3.进阶学习

进阶学习,就要深入学习一些框架。深度学习的,有TensorFlow和pyTorch,甚至Keras也是不错的选择。当然,也可以尝试一些更上层的框架,比如paddlehub:

检测人脸是否佩戴口罩:20行代码检测人脸是否佩戴口罩

Web开发,可以考虑Django和Flask框架,我们有用过Django开发一个简单的网站:
Django:Python 快速开发高潮音乐提取网

如果你只是想成为超级极客,可以看看这些文章: 

树莓派+智能音箱:Python声控普通风扇Python声控开机

树莓派+摄像头:Python人脸识别开机

Python 深度学习图像风格迁移

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 优化—算出每条语句执行时间

用Python写的程序,确实在性能上会比其他语言差一些,这是因为Python为了最大化开发效率,牺牲了一定的运行效率。开发效率和运行效率往往是鱼与熊掌不可兼得的关系。

不过,程序性能较差有很多原因,并不能全把锅甩到Python身上,我们应该首先从自己的代码上找原因,找原因最快的方法就是算出自己写的语句或函数的执行时间。这时候,很多人都会选择用以下的形式打印出语句的执行时间:

import time
a = time.time()
temp = [index*index for index in range(1000000)]
b = time.time()
print(b-a) 

这是一种比较低效的做法,如果你有上万条语句要测试,想用这个方法来找到瓶颈简直是大海捞针。幸好,得益于Python强大的社区功能,我们有很多关于效率的模块可以使用,今天要介绍的是 line_profiler , 它可以算出函数里每条语句的占用时间。

我们将使用上次电影人脸识别中的代码进行讲解:Python 识别电影中的人脸,不过要注意,这篇推送里的函数少传递了几个参数,正确参数请点击该推送下方的阅读原文进行查看哦。

1.准备

Python环境当然是必备的,如果你还没有安装Python,可以看这篇文章:超详细Python安装指南

打开cmd/terminal输入以下命令安装line_profile:

 pip install line_profiler

windows机器如果出现 Microsoft Visual C++ 14.0 is required 这样的错误,请前往微软官网,下载vs2015勾选”适用于visual C++2015的公共工具” 进行安装。

如果出现:ModuleNotFoundError: No module named 'skbuild'的情况,请输入以下命令安装scikit-build:

pip install scikit-build

实在还是安装不上的话,可以下载anaconda,输入以下命令安装:

conda install -c anaconda line_profiler

2.使用

使用方式非常简单,比如原来我们在读取人脸的代码中,主函数是这样的:

if __name__ == '__main__':
    sourcePath = 'frames/greenbooks'
    targetPath1 = 'target/test'
    read_pic_save_face(sourcePath, targetPath1, '.jpg', '.JPG', 'png', 'PNG') 

我们要测的是read_pic_save_face函数中所有语句的执行时间,只需要这样调用line_profiler:

if __name__ == '__main__':
    sourcePath = 'frames/test'
    targetPath1 = 'target/test'
    # read_pic_save_face(sourcePath, targetPath1, '.jpg')

    profile = LineProfiler(read_pic_save_face)
    profile.runcall(read_pic_save_face, sourcePath, targetPath1, '.jpg')
    profile.print_stats()

这样就可以获得该函数所有语句的执行时间报表。当然,它还有许多其他的调用方法,具体可以看line_profiler说明文档: https://github.com/rkern/line_profiler

3.阅读报告

line_profiler报告包括几个部分:
Line: 语句位于第几行
Hits: 该行被执行的次数
Time: 该语句运行的总时间
Per Hit: 该语句运行一次的平均耗时
% Time: 该语句占总时间的比重

可以看到,我们的这份代码主要是在face_cascade.detectMultiScale 耗时最久,这是opencv的分类器执行效率问题。知道了是这里的效率问题,优化就有一个目标了。

这一部分的优化,我们可以从硬件方面入手,让OpenCV在GPU上运行算法,这样做性能将远超在CPU上运行的性能,这是绝招。其次就是利用多线程计算(没试过,不确定是否有用,或许下次可以试一下)。

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典