Python入门(二)

**

Python入门

**

一、控制流语句
在Python中,有三种类型控制流类型:

  • 顺序结构
  • 分支结构
  • 循环结构

    复杂的语句都是由这三个基本控制流组成。

1)顺序结构:普通至上而下的代码结构。

2)分支结构:Python条件语句是通过一条或多条语句的执行结果(True或False)来决定执行的代码块。

这里写图片描述

if语句可以独立使用,也可搭配else\elif使用。

3)循环结构:用来控制一段语句重复执行。

  • while循环

    这里写图片描述

  • for循环

    这里写图片描述

    4)终止语句

  • Break语句:Break语句用来终止最内层循环。

    这里写图片描述

  • Continue语句:用来跳过最内层当前此的循环。

    这里写图片描述

5)占位语句

pass是空语句,为保证程序结构的完整性,在编写预留功能或语句时方便简洁。

这里写图片描述

二、错误和异常

程序中的错误都是有意创建并抛出的,所以错误和异常并不可怕,都是可控的。

1.语法错误
Pyhton的语法错误又称为解析错

这里写图片描述

语法分析器指出了出错的一行,并在最先找到的错误位置标记一个小箭头。

2.异常

即便Python的语法是正确的,运行时,也有可能发生错误。在运行期检测到的错误被称为异常

异常以不同的类型出现,这些类型都作为信息的一部分打印出来。

3.异常处理

用来捕获程序中的异常,保证程序的正常运行

这里写图片描述

注意:如果except后不写异常类型信息,那么该except将捕获所有异常。

如果需要用一个except捕获多个异常,那么异常信息的位置传入包含多个异常的元祖即可

这里写图片描述

三、Python常用函数

1.逻辑判断

1)all(iterable):如果iterable中所有值都为真返回True,如果iterable为空也返回True

这里写图片描述

2)any(iterable):有任意一个为真,返回True;如果iterable为空返回False。

这里写图片描述

3)isinstance():判断参数是否指定类类型。

这里写图片描述

2.数学相关

1)abs(x):返回一个数的绝对值。如果给出复数,返回值就是该复数的模。

2)divmod(x, y):完成除法运算,返回商和余数。

这里写图片描述

3)pow(x, y[,z]):返回以x为底,y为指数的幂。如果给出z值,该函数就计算x的y次幂值被z取模的值。

这里写图片描述

4)round(x[,n]):round()函数返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。

这里写图片描述

5)min(x, y[,z]),max(x, y[,z]):返回给定参数的最小、最大值,参数可以为序列。

这里写图片描述

6)sum(iterable):返回序列或集合中数字的总和。

7)bin(x)、hex(x)、oct(x):将数字x转换为二进制串、十六进制串、八进制串

3.序列相关

1)len(object):返回字符串或序列的长度。

2)range([lower,]stop[,step]):range()函数可按参数生成连续的有序整数列表。

3)filter(func, iterable):filter()函数接收一个函数和一个列表。遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下。

利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:

def is_not_empty(s):
return s and len(s.strip()) > 0

filter(is_not_empty, [‘test’, None, ”, ‘str’, ’ ‘, ‘END’])

结果:[‘test’, ‘str’, ‘END’]

**注意:**s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。
当rm为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ‘),如下:
a = ’ 123’
a.strip()
结果: ‘123’
a=’\t\t123\r\n’
a.strip()
结果:’123’

4)map(func, iterable):接收一个函数和一个list,并通过把函数func依次作用在 list 的每个元素上,得到一个新的 list 并返回。

def f(x):
return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
输出结果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]

注意

  • map()函数不改变原有的 list,而是返回一个新的 list

  • 利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数

  • 由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数func可以处理这种数据类型。

5)reduce(func, iterable):reduce()函数接收的参数和 map()类似,一个函数 func,一个list,但行为和 map()不同。reduce()传入的函数 func 必须接收两个参数reduce()对list的每个元素反复调用函数func,并返回最终结果值

例如,编写一个f函数,接收x和y,返回x和y的和:
def f(x, y):
return x + y

调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25;
由于没有更多的元素了,计算结束,返回结果25。

上述计算实际上是对 list 的所有元素求和。虽然Python内置了求和函数sum(),但是,利用reduce()求和也很简单。

reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:

reduce(f, [1, 3, 5, 7, 9], 100)
结果将变为125,因为第一轮计算是:
计算初始值和第一个元素:f(100, 1),结果为101

6)reversed(sequence):生成一个反转序列的迭代器。

7)sorted():对一个集合进行排序,返回排序后的list。排序本质是比较大小,所以只能同类型之间比较。

sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]

sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

因此,如果我们要实现倒序排序,只需要编写一个reversed_cmp函数:
def reversed_cmp(x, y):
if x > y:
return -1
if x < y:
return 1
return 0
这样,调用 sorted() 并传入 reversed_cmp 就可以实现倒序排序:
sorted([36, 5, 12, 9, 21], reversed_cmp)
[36, 21, 12, 9, 5]

sorted()也可以对字符串进行排序,字符串默认按照ASCII大小来比较
sorted([‘bob’, ‘about’, ‘Zoo’, ‘Credit’])
[‘Credit’, ‘Zoo’, ‘about’, ‘bob’]
‘Zoo’排在’about’之前是因为’Z’的ASCII码比’a’小。

8)zip():拉链形式,将对象中的多个可迭代序列输出成一 一对应的zip对象,参数必须是序列,如字符串、元祖、列表。

这里写图片描述

4.类型转换
1)bool():转换为不二类型。

这里写图片描述

2)int()、float()、str():转换为整形、浮点型、字符串

3)dict(iterable)、list(iterable)、tuple(iterable):转化为字典、列表、元组类型

4)set(iterable):创建一个无序不重复元素的集合

5)complex():创建一个复数

这里写图片描述

6)enumerate():返回一个枚举对象

这里写图片描述

5.系统函数

1)id(obj):返回一个对象的唯一标识值

2)help(obj):调用系统内置的帮助系统

3)type(obj):返回一个对象的数据类型

4)input([提示串]):获取用户输入信息

5)open(file):打开文件

6)print():打印函数

7)eval(‘字符串’):将字符串作为代码运行,较多与input结合
eval(‘2 + 3’)
5

8)chr(x):返回编码为x的字符

9)ord(s):返回1个字符s的编码。chr(ord(‘3’)+1)==>’4’

四、函数的定义

1.函数的定义规则:

  • 函数代码块以def关键词开头,后接函数标识符名称圆括号()

  • 任何传入参数自变量必须放在圆括号中间,括号之间可以用于定义参数

    -函数第一行语句可以选择性地使用文档字符串 ——用于存放函数说明

  • 函数内容以冒号起始,并且缩进

    -return[表达式]结束函数,选择性地返回一个值给调用方。不带return语句相当于返回None

这里写图片描述

注意:当return返回多个值时,实际返回的是一个元组。

2.函数参数传递

1)所有参数在Python里都是按引用传递。意味着:如果在函数中更改参数所指的对象,则更改也会反映在原始参数上。

当传入的参数为可变对象时,在函数内部引用该对象时对该对象的修改会直接指向该对象本身。

这里写图片描述

2)如果在函数内部引用传递的参数在函数内部被覆盖,则不会修改外部的引用

这里写图片描述

从本质上讲,函数内部创建的mylist并不和外部mylist冲突,内部的mylist相当于创建了一个局部变量

3.参数

调用函数时可使用的参数类型:必须参数、命名参数、默认参数、不定长参数、可变关键字参数、命名关键字参数

1)必须参数:又称位置参数,须以正确的顺序传入函数。调用时的数量和位置必须和声明时的一样。

这里写图片描述

2)命名参数:又称关键字参数,和函数的调用关系密切,函数的定义不会改变

这里写图片描述

3)默认参数:又称缺省参数,调用函数时,若没有传递参数,则使用参数的默认值。默认参数的好处是能降低调用函数的难度。

这里写图片描述

注:必选参数在前,默认参数在后

4)不定长参数:又称可变参数。可变参数就是传入的参数个数可变,可以使0个、1个、2个到任意个。

不确定输入参数个数是多少时,可使用不定长参数,加单星号*

这里写图片描述

5)可变关键字参数:又称关键字参数,可将任意数量的关键字参数传递给函数。使用双星号表示传入的参数为命名关键字参数**。

这里写图片描述
这里写图片描述

6)命名关键字参数:对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于传入了哪些,就需要在函数内部通过kw检查。

如果要限制关键字参数的名字,可使用命名关键字参数。

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。

这里写图片描述

命名关键字参数可以有缺省值,从而简化调用

这里写图片描述

注意:当组合使用参数时参数定义顺序为:必须参数、默认参数、不定长参数、命名关键字参数可变关键字参数

4.变量作用域

变量的作用域决定了在哪一部分程序可以访问哪个特定变量名称。Python的作用域包含四种:L(Local)局部作用域、E(Enclosing)闭包函数外的函数中、G(Global)全局作用域、B(Built-in)内建作用域。

L——E——G——B的规则查找,即:在局部找不到,便会去局部外的局部查找,再找不到就到全局找,否则再去内建中找。

这里写图片描述

注意:Python中只要模块(module)、类(class)、及函数(def、lambda)才会引入新的作用域,其它代码块(如if/elif/else、try/except、for/while)等不会引入新的作用域,也就是说这些语句内定义的变量,外部也可以访问。

  • 全局变量和局部变量
    1)定义在函数内部的变量拥有一个局部作用域,定义在函数外部的拥有全局作用域

2)局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

3)当内部作用域想修改外部作用域的变量时,就用到globalnonlocal关键字。

这里写图片描述

4)修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量

这里写图片描述

5.递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数

递归函数的优点定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰

这里写图片描述

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出

6.匿名函数
lambda表示匿名函数,冒号前的x表示函数参数

函数名有个限制,就是只能有一个表达式,不需写return,返回值即表达式的结果

用匿名函数有个好处,因为函数没有名字,不比担心函数名冲突

匿名函数也是一个函数对象,也可把匿名函数赋值给一个变量,再利用变量来调用该函数

这里写图片描述

Python对匿名函数的支持有限,一些简单情况下可使用匿名函数。

7.闭包函数

内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。

这里写图片描述

闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。举例如下:

这里写图片描述

可能认为调用f1(),f2()和f3()结果应该是1,4,9,但实际结果全部都是 9。

原因就是当count()函数返回了3个函数时,这3个函数所引用的变量 i 的值已经变成了3。由于f1、f2、f3并没有被调用,所以,此时他们并未计算 i*i,当 f1 被调用时:
f1()
9 # 因为f1现在才计算i*i,但现在i的值已经变为3

因此,返回函数不要引用任何循环变量,或者后续会发生变化的变量

8.装饰器

定义了一个函数,想在运行时动态增加功能,又不想改动函数本身的代码。Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数

Python装饰器的作用:极大地简化代码,避免每个函数编写重复性代码。

打印日志:@log
检测性能:@performance
数据库事务:@transaction
URL路由:@post(‘/register’)

五、模块

模块是一个包含所有定义的函数和变量的文件,后缀名是.py。模块可以被别的程序引入,以使该模块中的函数等功能。

1.模块导入

1)import module1[, module2[,…moduleN]]

2)from modname import name1[, name2[,…nameN]]

3)from modname import name1 as na

注意:

  • 通常情况下,每个import语句只导入一个包,方便理解和阅读代码。
  • 一个模块只会被导入一次,不管执行多少次import。这样可以防止导入模块被一遍又一遍的执行。

  • 一个包被导入后源文件被修改是不会立即生效的,可以通过重启Python或显示的重载包
    import importlib
    import lib.reload(modulename)

  • 不推荐from modname import *,把一个模块的所有内容都导入当前命名空间,因为不知道哪些包被导入当前空间。

    2.导入自己编写的内容

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

六、IO操作

IO在计算机中指Input/Output操作,即输入、输出
由于程序和运行时数据驻留在内存中,由CPU计算执行,涉及到数据交换的地方,通常是磁盘、网络等。需要IO接口。

1.文件读写

这里写图片描述

1)读文件

这里写图片描述
这里写图片描述
这里写图片描述

2)字符编码

这里写图片描述

3)写文件

这里写图片描述

2.操作文件和目录

这里写图片描述
这里写图片描述

3.JSON数据解析

这里写图片描述
这里写图片描述

七、日期和时间
Python提供了一个timecalendar模块可用于格式化日期和时间。

时间间隔以为单位的浮点小数。

每个时间戳以自1970年1月1日午夜(历元)经过多长时间表示。

1.time

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

2.Calendar

Calendar模块有很广泛的方法处理年历月历,例如打印某月的月历

这里写图片描述

这里写图片描述
这里写图片描述

3.datetime

datetime是处理日期时间标准库

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

八、类和面向对象
面向对象编程(Objcect Oriented Programming, OOP)是一种程序设计思想,把对象作为程序的基本单元,一个对象包含了数据和操作数据的方法

Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类派生类可以覆盖基类中的任何方法方法中可以调用基类中的同名方法

1.类的定义

这里写图片描述

类实例化后,可以使用其属性。实际上,创建一个类之后,可通过类名访问其属性

2.类对象

类对象支持两种操作:属性引用实例化
属性引用:obj.name
类对象创建后,类命名空间中所有的命名都是有效属性名

很多类都倾向于将对象创建为有初始状态的。因此,类可能会定义一个名为init()的特殊方法(构造方法),init方法可以有参数,参数通过init()传递到类的实例化操作上:

这里写图片描述

3.类的方法

在类内部,使用def关键字可为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数

这里写图片描述

九、正则表达式

在编写处理字符串的程序或网页时,经常会有查找符合某些规则字符串的需要。正则表达式即用于描述这些规则的工具。

正则表达式是记录文本规则的代码

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

1.正则表达式基础

1)元字符

这里写图片描述

2)字符转义
反斜杠 : \. \*

3)重复

这里写图片描述

4)字符类

这里写图片描述

5)分支条件

这里写图片描述

6)分组

如果想要重复多个字符,可用小括号来指定子表达式(也叫分组),然后可以指定这个子表达式重复的次数

这里写图片描述

7)反义

有时需要查找不属于某个简单定义字符类的字符,比如想查找除数字以外,其它任意字符的情况,这时需用反义

这里写图片描述

8)贪婪与懒惰

这里写图片描述

2.re模块

Python通过re模块提供对正则表达式的支持。

使用re的一般步骤:首先,将正则表达式的字符串形式编译为Pattern实例;然后Pattern实例处理文本并获得匹配结果(一个Match实例);最后使用Match实例获得信息,进行其它操作

这里写图片描述
这里写图片描述

  • re.compile(strPattern[, flag]):

    这里写图片描述

  • Match对象

    这里写图片描述
    这里写图片描述

  • Pattern

这里写图片描述

3.re模块方法

1)match

这里写图片描述

2)search

这里写图片描述

3)split

这里写图片描述

4)findall

这里写图片描述

5)finditer

这里写图片描述

6)sub

这里写图片描述

7)subn

这里写图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值