python自学(二)第二章 正则表达式|字符串匹配、函数和面向对象程序设计

为了能在开学后更好地融入实验室,本人计划用一个月的时间进行python3语言入门,该系列笔记适合已经有一门编程语言基础的朋友参考使用,欢迎同道者前来交流 ~

使用教材:
1.《python从入门到精通》清华大学出版社;(自带教学视频【二维码形式】)least 17p/d
2.《机器学习》周志华(西瓜书) 清华大学出版社; least 14p/d;
3. BiliBili 《和美女老师一起学python》视频。

(一)正则表达式/字符串匹配

据我个人理解,正则表达式主要用于字符串匹配,不得不说Python的字符串匹配真的可以提升人生幸福感,毕竟匹配方式是如此简单:

【首先,要在程序头部添加一个 import re

re模块是Python中提供的用于实现正则表达式操作的模块。

在匹配字符串时,有几个常用的函数,分别是 match(), search() 和 findall()
…………………………
match:
从字符串的开始处进行匹配,如果在起始位置匹配成功返回Match对象,否则返回None;
seach:
在整个字符串中搜索第一个匹配的值;
findall:
用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。
…………………………

① match的使用方法:

import re
match = re.match(patten , string , re.I)

第一个参数patten是模式,就是用正则表达式描述的部分,具体构建方式下文会提到;参数string是要进行匹配的字符串(长的那个);re.I则用于确定匹配的规则,这个匹配规则在match,search和findall三个方法中都是通用的【第三个参数是可选参数,不用时可以省略】。

re.I 执行不区分字母大小写的匹配
re.A 对于通配符只进行ASCLL匹配
re.M 将^和$用于包括整个字符串的开始和结尾的每一行,默认情况下仅适用于整个字符串的开始和结尾处
re.S 使用“ . ”字符匹配所有字符,包括换行符
re.X 忽略模式字符串中未转义的空格和注释

注意,如果匹配成功,则返回的是match对象,这个对象具备一些使用的函数功能,比如:

match.start() 获取匹配值的起始位置
match.end() 获取匹配值的结束为止
match.span() 返回匹配值的元组

eg:
print('显示匹配值的起始位置:’, match.start())

search 和findall 的使用方法都一样,需要注意的是,findall如果匹配成功,返回的是一个列表而非match对象。
………………………………

②替换字符串 sub()

sub方法用于字符串替换,具体使用方法为:

import re
re.sub(pattern,repl ,string, count , flags)

参数pattern : 由正则表达式构造的模式;
参数repl: 代表要替换成的字符串;
参数string: 代表要被替换掉的原始字符串;
参数count: 替换的最大次数,默认为零,代表替换所有匹配;
参数flags: 就是上面那个表格,re.I re.A re.M re.X re.S 。

……………………………………

(二)函数

1.创建函数

使用 def 关键字来实现,具体格式为:

def functioname ( parameterlist):
 	'''comments'''
 	functionbody

参数说明:
①functioname——函数名;
②parameterlist——参数列表;
③comments——对函数的功能加以说明,是一个多行备注;
④functionbody——功能主体,即函数内容。

注意:
首先,函数的内容不需要用大括号括起来,逐级用缩进代表即可;
此外,如果想要定义一个什么也不做的空函数,则可以使用pass语句作为占位符。
……………………

2.参数传递

python中还有一个“可变参数”,也叫不定长参数

传进来的参数可以是零个、一个、两个到任意个

定义可变参数时有两种形式:
① *parameter
接收实际参数并将其放到一个元组中。
eg:

def printcoffee ( *coffeename )
	print("\n我喜欢的咖啡有: ")
	for item in coffeename:
		print (item)

调用的时候:

printcoffee('蓝山')
printcoffee('蓝山','巴西','哥伦比亚''美式')

都可以正常输出。
如果想要使用一个列表名作为可变参数,可以直接在列表名前面加上*号然后作为实际参数传出。
eg:

param=['蓝山','巴西','哥伦比亚''美式']
printcoffee(*param)

② **parameter
接收多个实际参数,并将其全部放入一个字典中。

…………………………

3.函数返回值

python使用return进行计算结果的返回,返回值可以是任意类型。无论程序执行到哪里,只要使用了return,函数就结束执行。

如果返回一个值,得到的结果就是一个值;如果返回多个值,就存入一个元组。

…………………………

4.匿名函数 lambda

指没有名字的函数,一般这样的函数只使用一次。创建函数的方式为:

result = lambda r:math.pi*r*r

匿名函数需要定义一个变量来进行调用,否则会弹出异常。

………………………………………………………………

(三)面向对象程序设计

python是一门面向对象的语言,可以很方便地创建类和对象。

属性——变量;
方法——类/子类中的函数。

类是封装对象的属性和行为的载体,即,对象是类的实例

1.类的定义

使用class关键字来实现类的定义,语法如下:

class ClassName:
	'''类的帮助信息'''
	body

……………………………………

2.创建类的实例

实例名 = 类名()

class Goose:
	'''大雁类'''
	pass
wildGoose = Goose()

……………………………………

3.创建__init__方法()(构造函数)

①每当创建一个新的类的实例时,构造函数都会自动运行

②构造函数包含一个自带的self参数,这是必须存在的参数,是一个指向实例本身的应用。如果不写构造函数就默认它存在。

③构造函数可以带有多个参数,中间用逗号分隔,但这些参数中必须具有self参数

class Goose:
	'''大雁类'''
	def __int__(self):
		print("我是大雁类!")
	pass	

……………………………………

4.创建类的成员并访问

通过类的实例名称和点(.)操作符进行访问。

class Goose:
	'''大雁类'''
	def Gooselike(beak, wing)
		print(beak)
		print(wing)
#创建一个实例对象
goose1 = Goose()
goose1.Gooselike('喙长而尖', '翅膀洁白')  #调用类中的方法

……………………………………

5.创建数据成员并访问

类的属性定义在类中,并且在函数体外的属性。类属性可以在所有实例之间共享值,也就是在所有实例化对象中公用
(个人理解是相当于一个公共变量)

用类名调用: Goose.wing

此外,可以动态地为类和对象添加属性:

Geese.beak = "喙长而尖"
Geese.neck = "脖颈修长"

…………………………
实例属性:
在实例中定义的属性,用实例名来访问。(且只能通过实例名来访问)

……………………………………

6.访问限制

python中没有对属性和方法的访问权限进行限制。它的权限控制是用下划线来完成的

有三种下划线的使用方式,分别代表三种访问限制程度:

①单下划线——代表保护类型 protected

【只允许类本身和子类进行访问】

例如,定义一个swan类,定义保护属性_neck。

②双下划线 ——代表私有类型 private
【只允许定义该方法的类本身进行访问,不能通过类的实例进行访问】
【但可以通过 “类的实例名.类名.__XXX " 的方式进行访问】

③首尾双下划线,一般是系统定义名字。

比如__init__()

……………………………………

7.类的继承

在程序设计中实现继承,表示这个类 拥有它继承的所有公有成员或者保护成员。被继承的类成为父类或基类,新的类成为子类或派生类。

形式:

class   新类名(被继承的类名):
	'''程序说明'''
	pass

注意:

①基类的成员都会被派生类继承,当基类中的某个方法不适用于派生类时,这个方法可以被 重写

②重写的意思就是在派生类的定义中重新编辑基类方法,并且与基类方法使用同一名称。

③如果要让派生类调用基类的__init__()函数,则需要使用super()函数进行调用,方法如下:

super().__init__()

你可能感兴趣的:(python,python,编程语言)