为了能在开学后更好地融入实验室,本人计划用一个月的时间进行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 。
……………………………………
使用 def 关键字来实现,具体格式为:
def functioname ( parameterlist):
'''comments'''
functionbody
参数说明:
①functioname——函数名;
②parameterlist——参数列表;
③comments——对函数的功能加以说明,是一个多行备注;
④functionbody——功能主体,即函数内容。
注意:
首先,函数的内容不需要用大括号括起来,逐级用缩进代表即可;
此外,如果想要定义一个什么也不做的空函数,则可以使用pass语句作为占位符。
……………………
python中还有一个“可变参数”,也叫不定长参数:
即
传进来的参数可以是零个、一个、两个到任意个。
定义可变参数时有两种形式:
① *parameter
接收实际参数并将其放到一个元组中。
eg:
def printcoffee ( *coffeename )
print("\n我喜欢的咖啡有: ")
for item in coffeename:
print (item)
调用的时候:
printcoffee('蓝山')
printcoffee('蓝山','巴西','哥伦比亚','美式')
都可以正常输出。
如果想要使用一个列表名作为可变参数,可以直接在列表名前面加上*号然后作为实际参数传出。
eg:
param=['蓝山','巴西','哥伦比亚','美式']
printcoffee(*param)
② **parameter
接收多个实际参数,并将其全部放入一个字典中。
…………………………
python使用return进行计算结果的返回,返回值可以是任意类型。无论程序执行到哪里,只要使用了return,函数就结束执行。
如果返回一个值,得到的结果就是一个值;如果返回多个值,就存入一个元组。
…………………………
指没有名字的函数,一般这样的函数只使用一次。创建函数的方式为:
result = lambda r:math.pi*r*r
匿名函数需要定义一个变量来进行调用,否则会弹出异常。
………………………………………………………………
python是一门面向对象的语言,可以很方便地创建类和对象。
属性——变量;
方法——类/子类中的函数。
类是封装对象的属性和行为的载体,即,对象是类的实例。
使用class关键字来实现类的定义,语法如下:
class ClassName:
'''类的帮助信息'''
body
……………………………………
实例名 = 类名()
class Goose:
'''大雁类'''
pass
wildGoose = Goose()
……………………………………
①每当创建一个新的类的实例时,构造函数都会自动运行;
②构造函数包含一个自带的self参数,这是必须存在的参数,是一个指向实例本身的应用。如果不写构造函数就默认它存在。
③构造函数可以带有多个参数,中间用逗号分隔,但这些参数中必须具有self参数
class Goose:
'''大雁类'''
def __int__(self):
print("我是大雁类!")
pass
……………………………………
通过类的实例名称和点(.)操作符进行访问。
class Goose:
'''大雁类'''
def Gooselike(beak, wing)
print(beak)
print(wing)
#创建一个实例对象
goose1 = Goose()
goose1.Gooselike('喙长而尖', '翅膀洁白') #调用类中的方法
……………………………………
类的属性定义在类中,并且在函数体外的属性。类属性可以在所有实例之间共享值,也就是在所有实例化对象中公用。
(个人理解是相当于一个公共变量)
用类名调用: Goose.wing
此外,可以动态地为类和对象添加属性:
Geese.beak = "喙长而尖"
Geese.neck = "脖颈修长"
…………………………
实例属性:
在实例中定义的属性,用实例名来访问。(且只能通过实例名来访问)
……………………………………
python中没有对属性和方法的访问权限进行限制。它的权限控制是用下划线来完成的
有三种下划线的使用方式,分别代表三种访问限制程度:
①单下划线——代表保护类型 protected
【只允许类本身和子类进行访问】
例如,定义一个swan类,定义保护属性_neck。
②双下划线 ——代表私有类型 private
【只允许定义该方法的类本身进行访问,不能通过类的实例进行访问】
【但可以通过 “类的实例名.类名.__XXX " 的方式进行访问】
③首尾双下划线,一般是系统定义名字。
比如__init__()
……………………………………
在程序设计中实现继承,表示这个类 拥有它继承的所有公有成员或者保护成员。被继承的类成为父类或基类,新的类成为子类或派生类。
形式:
class 新类名(被继承的类名):
'''程序说明'''
pass
注意:
①基类的成员都会被派生类继承,当基类中的某个方法不适用于派生类时,这个方法可以被 重写。
②重写的意思就是在派生类的定义中重新编辑基类方法,并且与基类方法使用同一名称。
③如果要让派生类调用基类的__init__()函数,则需要使用super()函数进行调用,方法如下:
super().__init__()