python的高级特征及用法介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的高级特征及用法介绍相关的知识,希望对你有一定的参考价值。

参考技术A

【导读】Python 是一种美丽的语言,它简单易用却非常强大。任何编程语言的高级特征通常都是通过大量的使用经验才发现的。比如你在编写一个复杂的项目,并在
stackoverflow 上寻找某个问题的答案,然后你突然发现了一个非常优雅的解决方案,它使用了你从不知道的 Python
功能,下面就给大家进行python的高级特征及用法介绍。

1、Map 函数

Map() 是一种内置的 Python
函数,它可以将函数应用于各种数据结构中的元素,如列表或字典。对于这种运算来说,这是一种非常干净而且可读的执行方式。

2、Lambda 函数

Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。

Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda 函数,我们根本没为它命名。这是因为 lambda
函数的功能是执行某种简单的表达式或运算,而无需完全定义函数。

lambda 函数可以使用任意数量的参数,但表达式只能有一个。

3、Generator 函数

Generator 函数是一个类似迭代器的函数,即它也可以用在 for 循环语句中。这大大简化了你的代码,而且相比简单的 for
循环,它节省了很多内存。

4、Filter 函数

filter 内置函数与 map 函数非常相似,它也将函数应用于序列结构(列表、元组、字典)。二者的关键区别在于 filter() 将只返回应用函数返回
True 的元素。

5、Itertools 模块

Python 的 Itertools 模块是处理迭代器的工具集合。迭代器是一种可以在 for 循环语句(包括列表、元组和字典)中使用的数据类型。

使用 Itertools 模块中的函数让你可以执行很多迭代器操作,这些操作通常需要多行函数和复杂的列表理解。

以上就是python的高级特征及用法介绍,希望对于大家的python学习能有所帮助,想要学习更多的python高级技能,希望大家持续关注!

23年二级建造师-新考季备考指导课

精编干货 高效通关

¥1元/科

23年一级建造师-备考资料大礼包

备考提速 精华知识点

¥1元/科

2021一级造价师-密训抢分

密训抢分冲刺

¥0元

2021一消名师100节精品课

超值体验,轻松取证

¥0元

2021年中级经济师-强化进阶体验课

知己知彼,三步破局

¥1元

2022年高级经济师-基础重塑课

基础重塑 高效备考

¥0元

2021健康管理师超值教程大礼包

教程课题一站式配齐

¥39元

四级人力资源管理师-备考指导

轻松入门人力资源师

¥0元

    在线客服官方服务
      官方网站精华资料免费直播课免费领课领优惠券考试日历
参考技术B 第一种:Lambda函数
Python函数一般使用def
a_function_name()样式来定义,但是对于Lambda函数来说,我们其实根本没为它命名。这是因为Lambda函数的功能是执行某种简单的表达式或者运算,而无需完全定义函数。
第二种:Map函数
Map()是一种内置的Python函数,它可以将函数应用于各种数据结构中的元素,如列表或字典。对于这种运算来说,这是一种非常干净而且可读的执行方式。
第三种:Filter函数
Filter内置函数与Map函数非常相似,它也将函数应用于序列结构(列表、元组、字典)。二者的关键区别在于Filter()将只返回应用函数返回True的元素。
第四种:Itertools模块
Python的Itertools模块是处理迭代器的工具集合。迭代器是一种可以在for循环语句中使用的数据类型。使用Itertools模块中的函数让你可以执行很多迭代器操作,这些操作通常需要多行函数和复杂的列表理解。
第五种:Generator函数
其实,Generator函数是一个类似于迭代器的函数,就是它也可以用在for循环语句中,这大大简化了你的代码,而且相比简单的for循环,它节省了很多内存。

fab高级用法

Python远程部署利器Fabric详解

Fabric是一个Python的库,它提供了丰富的同SSH交互的接口,可以用来在本地或远程机器上自动化、流水化地执行Shell命令。因此它非常适合用来做应用的远程部署及系统维护。其上手也极其简单,你需要的只是懂得基本的Shell命令。本文将为大家详细介绍Fabric的使用。

内容索引

安装Fabric

首先Python的版本必须是2.7以上,可以通过下面的命令查看当前Python的版本:

$ python -V

Fabric的官网是www.fabfile.org,源码托管在Github上。你可以clone源码到本地,然后通过下面的命令来安装。

$ python setup.py develop

在执行源码安装前,你必须先将Fabric的依赖包Paramiko装上。所以,个人还是推荐使用pip安装,只需一条命令即可:

$ pip install fabric

第一个例子

万事从Hello World开始,我们创建一个”fabfile.py”文件,然后写个hello函数:

现在,让我们在”fabfile.py”的目录下执行命令:

$ fab hello

你可以在终端看到”Hello Fabric!”字样。

简单解释下,”fabfile.py”文件中每个函数就是一个任务,任务名即函数名,上例中是”hello”。”fab”命令就是用来执行”fabfile.py”中定义的任务,它必须显式地指定任务名。你可以使用参数”-l”来列出当前”fabfile.py”文件中定义了哪些任务:

$ fab -l

任务可以带参数,比如我们将hello函数改为:

此时执行hello任务时,就要传入参数值:

$ fab hello:name=Year,value=2016

Fabric的脚本建议写在”fabfile.py”文件中,如果你想换文件名,那就要在”fab”命令中用”-f”指定。比如我们将脚本放在”script.py”中,就要执行:

$ fab -f script.py hello

执行本地命令

“fabric.api”包里的”local()”方法可以用来执行本地Shell命令,比如让我们列出本地”/home/bjhee”目录下的所有文件及目录:

“local()”方法有一个”capture”参数用来捕获标准输出,比如:

这样,Hello字样不会输出到屏幕上,而是保存在变量output里。”capture”参数的默认值是False。

执行远程命令

Fabric真正强大之处不是在执行本地命令,而是可以方便的执行远程机器上的Shell命令。它通过SSH实现,你需要的是在脚本中配置远程机器地址及登录信息:

“fabric.api”包里的”run()”方法可以用来执行远程Shell命令。上面的任务会分别到两台服务器”example1.com”和”example2.com”上执行”ls -l /home/bjhee/”命令。这里假设两台服务器的用户名都是”bjhee”,密码都是6个1。你也可以把用户直接写在hosts里,比如:

如果你的”env.hosts”里没有配置某个服务器,但是你又想在这个服务器上执行任务,你可以在命令行中通过”-H”指定远程服务器地址,多个服务器地址用逗号分隔:

$ fab -H [email protected],[email protected] hello

另外,多台机器的任务是串行执行的,关于并行任务的执行我们在之后会介绍。

如果对于不同的服务器,我们想执行不同的任务,上面的方法似乎做不到,那怎么办?我们要对服务器定义角色:

现在让我们执行:

$ fab task

这时Fabric会先在一台build服务器上执行build任务,然后在两台staging服务器上分别执行deploy任务。”@roles”装饰器指定了它所装饰的任务会被哪个角色的服务器执行。

如果某一任务上没有指定某个角色,但是你又想让这个角色的服务器也能运行该任务,你可以通过”-R”来指定角色名,多个角色用逗号分隔:

$ fab -R build deploy

这样”build”和”staging”角色的服务器都会运行”deploy”任务了。注:”staging”是装饰器默认的,因此不用通过”-R”指定。

此外,上面的例子中,服务器的登录密码都是明文写在脚本里的。这样做不安全,推荐的方式是设置SSH自动登录,具体方法大家可以去网上搜搜。

SSH功能函数

到目前为止,我们介绍了”local()”和”run()”函数分别用来执行本地和远程Shell命令。Fabric还提供了其他丰富的功能函数来辅助执行命令,这里我们介绍几个常用的:

    1. sudo: 以超级用户权限执行远程命令

功能类似于”run()”方法,区别是它相当于在Shell命令前加上了”sudo”,所以拥有超级用户的权限。使用此功能前,你需要将你的用户设为sudoer,而且无需输密码。具体操作可参见我的这篇文章

 

    1. get(remote, local): 从远程机器上下载文件到本地

它的工作原理是基于scp命令,使用的方法如下:

上述任务将远程机上”/var/log/myapp.log”文件下载到本地当前目录,并命名为”myapp-0301.log”。

    1. put(local, remote): 从本地上传文件到远程机器上

同get一样,put方法也是基于scp命令,使用的方法如下:

上述任务将本地”/tmp/myapp-0301.tar.gz”文件分别上传到两台远程机的”/var/www/”目录下,并命名为”myapp.tar.gz”。如果远程机上的目录需要超级用户权限才能放文件,可以在”put()”方法里加上”use_sudo”参数:

 

    1. prompt: 提示输入

该方法类似于Shell中的”read”命令,它会在终端显示一段文字来提示用户输入,并将用户的输入保存在变量里:

现在下载后的文件名将由用户的输入来决定。我们还可以对用户输入给出默认值及类型检查:

执行任务后,终端会显示:

Please input port number: [8080] 

如果你直接按回车,则port变量即为默认值8080;如果你输入字符串,终端会提醒你类型验证失败,让你重新输入,直到正确为止。

    1. reboot: 重启服务器

看方法名就猜到了,有时候安装好环境后,需要重启服务器,这时就要用到”reboot()”方法,你可以用”wait”参数来控制其等待多少秒后重启,没有此参数则代表立即重启:

上面的restart任务将在一分钟后重启服务器。

上下文管理器

Fabric的上下文管理器是一系列与Python的”with”语句配合使用的方法,它可以在”with”语句块内设置当前工作环境的上下文。让我们介绍几个常用的:

    1. cd: 设置远程机器的当前工作目录

“cd()”方法在之前的范例中出现过,”with cd()”语句块可以用来设置远程机的工作目录:

上例中的文件会上传到远程机的”/var/www/”目录下。出了”with cd()”语句块后,工作目录就回到初始的状态,也就是”bjhee”用户的根目录。

    1. lcd: 设置本地工作目录

“lcd()”就是”local cd”的意思,用法同”cd()”一样,区别是它设置的是本地的工作目录:

这个例子的执行效果跟上个例子一样。

    1. path: 添加远程机的PATH路径

 

假设我们的PATH环境变量默认是”/sbin:/bin”,在上述”with path()”语句块内PATH变量将变为”/sbin:/bin:/home/bjhee/tmp”。出了with语句块后,PATH又回到原来的值。

    1. settings: 设置Fabric环境变量参数

Fabric环境变量即是我们例子中一直出现的”fabric.api.env”,它支持的参数可以从官方文档中查到。

我们将环境参数”warn_only”暂时设为True,这样遇到错误时任务不会退出。

    1. shell_env: 设置Shell环境变量

可以用来临时设置远程和本地机上Shell的环境变量。

 

    1. prefix: 设置命令执行前缀

 

在上述”with prefix()”语句块内,所有的”run()”或”local()”方法的执行都会加上”echo Hi && “前缀,也就是效果等同于:

配合后一节我们会讲到的错误处理,它可以确保在”prefix()”方法上的命令执行成功后才会执行语句块内的命令。

错误处理

默认情况下,Fabric在任务遇到错误时就会退出,如果我们希望捕获这个错误而不是退出任务的话,就要开启”warn_only”参数。在上面介绍”settings()”上下文管理器时,我们已经看到了临时开启”warn_only”的方法了,如果要全局开启,有两个办法:

    1. 在执行”fab”命令时加上”-w”参数
$ fab -w hello
    1. 设置”env.warn_only”环境参数为True

 

现在遇到错误时,控制台会打出一个警告信息,然后继续执行后续任务。那我们怎么捕获错误并处理呢?像”run()”, “local()”, “sudo()”, “get()”, “put()”等SSH功能函数都有返回值。当返回值的”succeeded”属性为True时,说明执行成功,反之就是失败。你也可以检查返回值的”failed”属性,为True时就表示执行失败,有错误发生。在开启”warn_only”后,你可以通过”failed”属性检查捕获错误,并执行相应的操作。

 

并行执行

我们在介绍执行远程命令时曾提到过多台机器的任务默认情况下是串行执行的。Fabric支持并行任务,当服务器的任务之间没有依赖时,并行可以有效的加快执行速度。怎么开启并行执行呢?办法也是两个:

    1. 在执行”fab”命令时加上”-P”参数
$ fab -P hello
    1. 设置”env.parallel”环境参数为True

 

如果,我们只想对某一任务做并行的话,我们可以在任务函数上加上”@parallel”装饰器:

这样即便并行未开启,”runs_in_parallel()”任务也会并行执行。反过来,我们可以在任务函数上加上”@serial”装饰器:

这样即便并行已经开启,”runs_serially()”任务也会串行执行。

补充

这个部分用来补充Fabric的一些特别功能:

    • 终端输出带颜色

我们习惯上认为绿色表示成功,黄色表示警告,而红色表示错误,Fabric支持带这些颜色的输出来提示相应类型的信息:

 

    • 限制任务只能被执行一次

通过”execute()”方法,可以在一个”fab”命令中多次调用同一任务,如果想避免这个发生,就要在任务函数上加上”@runs_once”装饰器。

现在不管我们”execute”多少次hello任务,都只会输出一次”Hello Fabric!”字样

以上是关于python的高级特征及用法介绍的主要内容,如果未能解决你的问题,请参考以下文章

< Python全景系列-3 ; Python控制流程盘点及高级用法神秘技巧大揭秘!

Python装饰器的高级用法(翻译)

fab高级用法

Spring高级特性及用法

python基础 列表 的用法及介绍

零基础学Python--机器学习:数据集及特征工程介绍