Python学习心得——基础知识(七)

一、冒泡排序

1、要求

把列表中无序的字符按小到大排序:[9,6,15,11,36,28]

2、思路

把列表中相邻的字符值进行排序,值的放到右侧,逐个比较直到满足要求,类似水中的气泡朝水面移动。

3、样例

针对列表[9,236,1,7,5,18]按从小到大排序

 1 #!usr/bin/env python
 2 # -*- coding: utf-8
 3
 4 lis=[9,236,1,7,5,18]
 5 for i in range(1,len(lis)):        #判断有几次大循环数据比较
 6     for j in range(len(lis)-i):    #取列表值的索引
 7         if lis[j]>lis[j+1]:
 8             temp=lis[j]
 9             lis[j]=lis[j+1]
10             lis[j+1]=temp
11 print(lis)

二、递归

1、思路

一个函数内部调用自身函数,那这个函数就是递归函数

2、知名样例

斐波那契数列指的是这样一个数列 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...

当某个元素的值大于10000时,结束调用,展示满足条件的斐波那契数列

 1 #!usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 def f1(a1,a2):
 5     if a1>10000:    #若元素大于10000,结束调用
 6         return
 7     print(a1)
 8     a3=a1+a2
 9     f1(a2,a3)
10 r=f1(0,1)

三、装饰器

1、定义

装饰器是函数,它用来装饰其它函数或类,也就是对其它函数或类进行包装;作用是可以不在改变其它函数或类的功能下,添加相应功能。

2、样例

若f1函数的功能是打印‘功能1’,现在要不改变f1函数的前提下,调用f1函数,先打印‘功能2’,然后打印‘功能1’,最后打印‘功能3’

 1 #!usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 def f2(arge):
 5     def inner():
 6         print(‘功能2‘)
 7         arge()
 8         print(‘功能3‘)
 9     return inner
10
11 @f2         #装饰器特有的标示
12 def f1():
13     print(‘功能1‘)
14
15 f1()

内部逻辑是怎么样的呢,请看下面图形分解

第1步:

第2步:

第3步:

第4步:

第5步:

第6步:

第7步:

第8步:

第9步:

第10步:

第11步:

第12步:

 3、被装饰的函数有一个参数

 1 #!usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 def f2(func):
 5     def inner(arge):
 6         print(‘功能2‘)
 7         func(arge)
 8         print(‘功能3‘)
 9     return inner
10
11 @f2         #装饰器特有的标示
12 def f1(arge):
13     print(‘功能1‘)
14
15 arge=‘abc‘
16 f1(arge)

4、动态参数

 1 #!usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 def f2(func):
 5     def inner(*arge,**kwargs):
 6         print(‘功能2‘)
 7         func(*arge,**kwargs)
 8         print(‘功能3‘)
 9     return inner
10
11 @f2         #装饰器特有的标示
12 def f1(arge1,arge2,arge3):
13     print(‘功能1‘)
14
15 arge1=‘abc‘
16 arge2=‘uio‘
17 arge3=‘haoyun‘
18 f1(arge1,arge2,arge3)

5、多个装饰器

 1 #!usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 def f3(func):
 5     def inner(*arge,**kwargs):
 6         print(‘功能5‘)
 7         func(*arge,**kwargs)
 8         print(‘功能4‘)
 9     return inner
10
11
12 def f2(func):
13     def inner(*arge,**kwargs):
14         print(‘功能2‘)
15         func(*arge,**kwargs)
16         print(‘功能3‘)
17     return inner
18 @f3
19 @f2         #装饰器特有的标示
20 def f1(arge1,arge2,arge3):
21     print(‘功能1‘)
22
23 arge1=‘abc‘
24 arge2=‘uio‘
25 arge3=‘haoyun‘
26 f1(arge1,arge2,arge3)

四、正则

说明:正则本着会用即可的原则,此处直接引用了老师的佳作

1、语法


1

2

3

4

5

6

import re #导入模块名

= re.compile("^[0-9]")  #生成要匹配的正则对象 , ^代表从开头匹配,[0-9]代表匹配0至9的任意一个数字, 所以这里的意思是对传进来的字符串进行匹配,如果这个字符串的开头第一个字符是数字,就代表匹配上了

= p.match(‘14534Abc‘)   #按上面生成的正则对象 去匹配 字符串, 如果能匹配成功,这个m就会有值, 否则m为None<br><br>if m: #不为空代表匹配上了

  print(m.group())    #m.group()返回匹配上的结果,此处为1,因为匹配上的是1这个字符<br>else:<br>  print("doesn‘t match.")<br>

上面的第2 和第3行也可以合并成一行来写:


 

= p.match("^[0-9]",‘14534Abc‘

效果是一样的,区别在于,第一种方式是提前对要匹配的格式进行了编译(对匹配公式进行解析),这样再去匹配的时候就不用在编译匹配的格式,第2种简写是每次匹配的时候 都 要进行一次匹配公式的编译,所以,如果你需要从一个5w行的文件中匹配出所有以数字开头的行,建议先把正则公式进行编译再匹配,这样速度会快点。

2、匹配格式

模式 描述
^ 匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...] 用来表示一组字符,单独列出:[amk] 匹配 ‘a‘,‘m‘或‘k‘
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或多个的表达式。
re+ 匹配1个或多个的表达式。
re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n}  
re{ n,} 精确匹配n个前面表达式。
re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a| b 匹配a或b
(re) G匹配括号内的表达式,也表示一个组
(?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re) 类似 (...), 但是不表示一个组
(?imx: re) 在括号中使用i, m, 或 x 可选标志
(?-imx: re) 在括号中不使用i, m, 或 x 可选标志
(?#...) 注释.
(?= re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re) 匹配的独立模式,省去回溯。
\w 匹配字母数字
\W 匹配非字母数字
\s 匹配任意空白字符,等价于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9].
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c
\z 匹配字符串结束
\G 匹配最后匹配完成的位置。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b‘ 可以匹配"never" 中的 ‘er‘,但不能匹配 "verb" 中的 ‘er‘。
\B 匹配非单词边界。‘er\B‘ 能匹配 "verb" 中的 ‘er‘,但不能匹配 "never" 中的 ‘er‘。
\n, \t, 等. 匹配一个换行符。匹配一个制表符。等
\1...\9 匹配第n个分组的子表达式。
\10 匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。

3、正则表达式五种常用操作

re.match(pattern, string)     # 从头匹配

re.search(pattern, string)    # 匹配整个字符串,直到找到一个匹配

re.split()            # 将匹配到的格式当做分割点对字符串分割成列表


1

2

>>>m = re.split("[0-9]""alex1rain2jack3helen rachel8")

>>>print(m)

输出: [‘alex‘, ‘rain‘, ‘jack‘, ‘helen rachel‘, ‘‘]

re.findall()          # 找到所有要匹配的字符并返回列表格式


1

2

>>>m = re.findall("[0-9]""alex1rain2jack3helen rachel8")

>>>print(m)<br>

输出:[‘1‘, ‘2‘, ‘3‘, ‘8‘]

re.sub(pattern, repl, string, count,flag)    # 替换匹配到的字符


1

2

m=re.sub("[0-9]","|""alex1rain2jack3helen rachel8",count=2 )

print(m)

输出:alex|rain|jack3helen rachel8

五、模块

1、概念

模块它是多个功能的集合。

2、模块的分类

A:内置模块——python自带的模块

B:自定义模块——自己写的模块

C:第三方模块

3、模块导入格式

import  ‘模块名‘

如:import re

4、常用的内置模块介绍

time/datetime模块

 1 #_*_coding:utf-8_*_
 2 import time
 3 import datetime
 4
 5 print(time.clock()) #返回处理器时间,3.3开始已废弃
 6 print(time.process_time()) #返回处理器时间,3.3开始已废弃
 7 print(time.time()) #返回当前系统时间戳
 8 print(time.ctime()) #输出Tue Jan 26 18:23:48 2016 ,当前系统时间
 9 print(time.ctime(time.time()-86640)) #将时间戳转为字符串格式
10 print(time.gmtime(time.time()-86640)) #将时间戳转换成struct_time格式
11 print(time.localtime(time.time()-86640)) #将时间戳转换成struct_time格式,但返回 的本地时间
12 print(time.mktime(time.localtime())) #与time.localtime()功能相反,将struct_time格式转回成时间戳格式
13 #time.sleep(4) #sleep
14 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将struct_time格式转成指定的字符串格式
15 print(time.strptime("2016-01-28","%Y-%m-%d") ) #将字符串格式转换成struct_time格式
16
17 #datetime module
18
19 print(datetime.date.today()) #输出格式 2016-01-26
20 print(datetime.date.fromtimestamp(time.time()-864400) ) #2016-01-16 将时间戳转成日期格式
21 current_time = datetime.datetime.now() #
22 print(current_time) #输出2016-01-26 19:04:30.335935
23 print(current_time.timetuple()) #返回struct_time格式
24
25 #datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
26 print(current_time.replace(2014,9,12)) #输出2014-09-12 19:06:24.074900,返回当前时间,但指定的值将被替换
27
28 str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") #将字符串转换成日期格式
29 new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天
30 new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天
31 new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时
32 new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s
33 print(new_date)

sys模块——用于提供对解释器相关的操作

1 sys.argv           命令行参数List,第一个元素是程序本身路径
2 sys.exit(n)        退出程序,正常退出时exit(0)
3 sys.version        获取Python解释程序的版本信息
4 sys.maxint         最大的Int值
5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
6 sys.platform       返回操作系统平台名称
7 sys.stdout.write(‘please:‘)
8 val = sys.stdin.readline()[:-1]

os模块——用于提供系统级别的操作

 1 os.getcwd()                #获取当前工作目录,即当前python脚本工作的目录路径
 2 os.chdir("dirname")        #改变当前脚本工作目录;相当于shell下cd
 3 os.curdir                  #返回当前目录: (‘.‘)
 4 os.pardir                  #获取当前目录的父目录字符串名:(‘..‘)
 5 os.makedirs(‘dirname1/dirname2‘)    #可生成多层递归目录
 6 os.removedirs(‘dirname1‘)           #若目录为空,则删除,并递归到上一级目录,如若也为空,
 7                                      则删除,依此类推
 8 os.mkdir(‘dirname‘)        #生成单级目录;相当于shell中mkdir dirname
 9 os.rmdir(‘dirname‘)        #删除单级空目录,若目录不为空则无法删除,报错;相当于shell
10                             中rmdir dirname
11 os.listdir(‘dirname‘)      #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
12 os.remove()                #删除一个文件
13 os.rename("oldname","newname")      #重命名文件/目录
14 os.stat(‘path/filename‘)            #获取文件/目录信息
15 os.sep                     #输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
16 os.linesep                 #输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
17 os.pathsep                 #输出用于分割文件路径的字符串
18 os.name                    #输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
19 os.system("bash command")           #运行shell命令,直接显示
20 os.environ                          #获取系统环境变量
21 os.path.abspath(path)               #返回path规范化的绝对路径
22 os.path.split(path)                 #将path分割成目录和文件名二元组返回
23 os.path.dirname(path)      #返回path的目录。其实就是os.path.split(path)的第一个元素
24 os.path.basename(path)     #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
25                             即os.path.split(path)的第二个元素
26 os.path.exists(path)       #如果path存在,返回True;如果path不存在,返回False
27 os.path.isabs(path)        #如果path是绝对路径,返回True
28 os.path.isfile(path)       #如果path是一个存在的文件,返回True。否则返回False
29 os.path.isdir(path)        #如果path是一个存在的目录,则返回True。否则返回False
30 os.path.join(path1[, path2[, ...]]) #将多个路径组合后返回,第一个绝对路径之前的参数
31                                      将被忽略
32 os.path.getatime(path)     #返回path所指向的文件或者目录的最后存取时间
33 os.path.getmtime(path)     #返回path所指向的文件或者目录的最后修改时间
时间: 2024-10-25 13:17:44

Python学习心得——基础知识(七)的相关文章

Python学习心得——基础知识(六)

一.lambda表达式 1.定义 针对简单的函数,用lambda表达式来展现更方便. 2.样例 1 #普通函数 2 def f1(a): 3 return a+1 4 print(f1(7)) 5 6 #用lambda表达式来实现 7 8 f2=lambda a: a+1 9 print(f2(7)) 二.python内置函数 1.常见内置函数表 2.需要熟练掌握的内置函数如下 abs(),all(),any(),bin(),bool(),bytes(),chr(),dict(),dir(),d

Python学习心得——基础知识(二)

列表(list)常见几种操作方式 1.在列表末尾插入内容——append a=[1,2,3,4,5,6] a.append(7) 结果:a=[1,2,3,4,5,6,7] 备注:列表内容可以为任何类型 2.在列表指点位置插入内容——insert a=[1,2,3,4,5,6,7] a.insert(3,5) 结果:a=[1,2,3,5,4,5,6,7] 3.把一个列表的元素添加到列表末尾——extend a=[1,2,3,5,4,5,6,7] a.extend([1,2,3]) 结果:a=[1,

Python学习心得——基础知识(四)

数据类型 一.字符串(str) 1.让字符串小写变成大写 a=‘hello' b=a.upper() 2.让字符串大写变成小写 a=‘HELLO’ b=a.lower() 3.快速查看对象的类有哪些方法 a=‘abc' b=dir(a) 也就是快速查看字符串类有哪些方法 4.查看对象的类有哪些详细的方法 a=‘abc' b=help(type(a)) 二.整数(int) 1.bit_length()  获取数字转换成二进制可表示的最短位数 a=4 二进制:00000100 a.bit_lengt

Python学习心得——基础知识(一)

一.登录验证 要求:验证登录的用户名与密码是否正确,且登录三次失败后,锁定登录. 实现方式一: i=0 while i<3: s=input('请输入用户名: ') d=input('请输入密码: ') if s=='dage' and d=='123456': print('恭喜登录成功!') break else: print('用户名或密码错误,请再次输入') i=i+1 else: print('输入超过三次,已停止输入') 实现方式二: for i in range(3): s=inp

Linux学习心得——基础知识(一)

Linux常用命令学习 一.pwd 作用:查看用户当前在什么目录下 二.cd 作用:进入到某目录 1.进入根目录:cd / 2.返回上级目录:cd .. 三.ls 作用:查看当前目录下的文件 1.列出当前目录详细文件信息:ls -l 2.若文件读写权限第一个字符为’d’表示为目录,非’d’为文件 3.人性化的展示文件列表:ls -lh 4.显示隐藏文件:ls -a 四.vim 作用:编辑文件 1.编辑文件:vim 文件名 2.编辑隐藏文件:vim .文件名 五.more 作用:终端下慢慢看文件内

python学习:基础知识

一.编译器和解释器的区别 编译器:编译器是把源程序的每一句代码编译成机器语言,并保存在一个二进制的文件中.当计算机在运行这个程序时就可以直接用这个机器语言运行,速度快. 解释器:解释器是在运行程序的时候,才逐行将源程序解释成机器语言来运行.由于解释器是将源程序解释一行执行一行,所以运行速度比编译器要慢. 编译型优点和缺点: 优点:编译器一般会有一个预编译的过程对代码进行优化,只要编译通过后在运行时就不再需要编译,所以执行效率搞.可以脱离语言环境独立运行. 缺点:编译之后如果发现代码有问题需要修改

Python学习_1_基础知识

1. 命名规则 1> 不以数字开头,不用中文命名 2>不用关键字  int/pass/def/return等 3>使用字母,数字,下划线命名 如class_0622 4>最好能见名知意 str_to_list 2. 变量 x = 1  y = 'hello' #定义一个变量,并且赋值给变量,变量就是一个存储数据的工具,以便于后面的使用 #在引用一个变量时,要确保这个函数被定义 3. 常用数据类型 整型 浮点型 布尔值 字符串 aga = 18 #整型 score = 89.89 #

Android学习之基础知识七—碎片的使用

碎片(Fragment)是一种可以嵌入在活动中的UI片断,它能让程序更加合理和充分地利用大屏幕的空间,它与活动相似,可以简单的理解为一个迷你型的活动,它也有自己的生命周期.碎片在平板的应用非常广泛. 一.碎片的简单用法 需求:在一个活动中添加两个碎片,并让这两个碎片平分活动空间. 第一步:由于碎片通常应用在平板开发中,所以先创建一个平板模拟器,然后新建一个Android项目:FragmentTest 第二步:创建左侧.右侧两个碎片布局     第三步:新建一个LeftFragment类继承Fra

Python网络爬虫基础知识学习

对Python有一些简单了解的朋友都知识Python编程语言有个很强大的功能,那就是Python网络爬虫(http://www.maiziedu.com/course/python/645-9570/),一提到Python,就会想到相关的Python爬虫和scrapy等等,今天就来简单认识学习Python爬虫的基础知识,有了一定的相关爬虫知识,以后学习scrapy.urllib等等知识时,会相对轻松些. 爬虫: 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组