python编写两式比较的表达式_Python之路【第三篇】:python基础(二)

内置函数 一

4b25400bdd73c717105fccd9eb96414f.png

详细见python文档,猛击这里

文件操作

操作文件时,一般需要经历如下步骤:

打开文件

操作文件

一、打开文件

注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open。

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

r,只读模式(默认)。

w,只写模式。【不可读;不存在则创建;存在则删除内容;】

a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

r+,可读写文件。【可读;可写;可追加】

w+,写读

a+,同a

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

rU

r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

rb

wb

ab

二、操作操作

三、with

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

四、那么问题来了...

1、如何在线上环境优雅的修改配置文件?

8f900a89c6347c561fdf2122f13be562.png 原配置文件

8f900a89c6347c561fdf2122f13be562.png 需求

8f900a89c6347c561fdf2122f13be562.png demo

2、文件处理中xreadlines的内部是如何实现的呢?

自定义函数

一、背景

在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下

腚眼一看上述代码,if条件语句下的内容可以被提取出来公用,如下:

对于上述的两种实现方式,第二次必然比第一次的重用性和可读性要好,其实这就是函数式编程和面向过程编程的区别:

函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

面向对象:对函数进行分类和封装,让开发“更快更好更强...”

函数式编程最重要的是增强代码的重用性和可读性

二、 函数的定义和使用

函数的定义主要有如下要点:

def:表示函数的关键字

函数名:函数的名称,日后根据函数名调用函数

函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...

参数:为函数体提供数据

返回值:当函数执行完毕后,可以给调用者返回数据。

以上要点中,比较重要有参数和返回值:

1、返回值

函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

2、参数

为什么要有参数?

8f900a89c6347c561fdf2122f13be562.png 上例,无参数实现

8f900a89c6347c561fdf2122f13be562.png 上列,有参数实现

函数的有三中不同的参数:

普通参数

默认参数

动态参数

8f900a89c6347c561fdf2122f13be562.png 普通参数

8f900a89c6347c561fdf2122f13be562.png 默认参数

8f900a89c6347c561fdf2122f13be562.png 动态参数一

8f900a89c6347c561fdf2122f13be562.png 动态参数二

8f900a89c6347c561fdf2122f13be562.png 动态参数三

扩展:发送邮件实例

lambda表达式

学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:

对于简单的函数,也存在一种简便的表示方式,即:lambda表达式

lambda存在意义就是对简单函数的简洁表示

内置函数 二

一、map

遍历序列,对序列中每个元素进行操作,最终获取新的序列。

80bd983a4c063939f9af60e02212fad8.png

8f900a89c6347c561fdf2122f13be562.png 每个元素增加100

8f900a89c6347c561fdf2122f13be562.png 两个列表对应元素相加

二、filter

对于序列中的元素进行筛选,最终获取符合条件的序列

d2ff8b2eaf64d165908cb9f5b200eab8.png

8f900a89c6347c561fdf2122f13be562.png 获取列表中大于12的所有元素集合

三、reduce

对于序列内所有元素进行累计操作

e1611c198b4520724d8c238784ea73b5.png

7a8592055ad383513c2517c0f7059a95.png

8f900a89c6347c561fdf2122f13be562.png 获取序列所有元素的和

yield生成器

1、对比range 和 xrange 的区别

如上代码所示,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。

8f900a89c6347c561fdf2122f13be562.png 自定义生成器nrange

2、文件操作的 read 和 xreadlinex 的的区别

8f900a89c6347c561fdf2122f13be562.png 基于next自定义生成器NReadlines

8f900a89c6347c561fdf2122f13be562.png 基于seek和tell自定义生成器NReadlines

装饰器

装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作。

8f900a89c6347c561fdf2122f13be562.png View Code

8f900a89c6347c561fdf2122f13be562.png View Code

冒泡算法

需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序

思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!

8f900a89c6347c561fdf2122f13be562.png 第一步

8f900a89c6347c561fdf2122f13be562.png 第二步

8f900a89c6347c561fdf2122f13be562.png 第三步

递归

利用函数编写如下数列:

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

8f900a89c6347c561fdf2122f13be562.png demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值