python快速学习笔记

1.基本数据类型
变量不需要声明
基本数据类型
a=10         # int 整数
a=1.3        # float 浮点数
a=True       # 真值 (True/False)
a='Hello!'   # 字符串
以上是最常用的数据类型,对于字符串来说,也可以用双引号。
变量不需要声明,不需要删除,可以直接回收使用。
type(): 查询数据类型
2.序列
序列有两种:tuple(定值表; 也有翻译为元组) 和 list (表)
>>>s1 = (2, 1.3, 'love', 5.6, 9, 12, False)         # s1是一个tuple
>>>s2 = [True, 5, 'smile']                          # s2是一个list
tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更。
序列引用
序列元素的下标从0开始:
>>>print s1[0]
范围引用: 基本样式[下限:上限:步长]
>>>print s1[:5]             # 从开始到下标4 (下标5的元素 不包括在内)
>>>print s1[2:]             # 从下标2到最后
>>>print s1[0:5:2]          # 从下标0到下标4 (下标5不包括在内),每隔2取一个元素 (下标为0,2,4的元素)
>>>print s1[2:0:-1]         # 从下标2到下标1
从上面可以看到,在范围引用的时候,如果写明上限,那么这个上限本身不包括在内。
尾部元素引用
>>>print s1[-1]             # 序列最后一个元素
>>>print s1[-3]             # 序列倒数第三个元素
同样,如果s1[0:-1], 那么最后一个元素不会被引用 (再一次,不包括上限元素本身)
字符串是元组
3.运算
数学 +, -, *, /, **, %
判断 ==, !=, >, >=, <, <=, in
逻辑 and, or, not
4.选择语句IF
if语句之后的冒号
以四个空格的缩进来表示隶属关系, Python中不能随意缩进
if  <条件1>:
    statement
elif <条件2>:
    statement
elif <条件3>:
    statement
else:
    statement
5.循环语句
range()这个函数的功能是新建一个表。这个表的元素都是整数,从0开始,下一个元素比前一个大1, 直到函数中所写的上限 (不包括该上限本身)
for 元素 in 序列:
while 条件:
continue
break
6.函数
def function_name(a,b,c):
    statement
    return something  # return不是必须的return可以返回多个值,以逗号分隔。相当于返回一个tuple(定值表)。
return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None。
函数调用和参数传递
基本数据类型的参数:值传递 (原值不变)
表作为参数:指针传递  (原表中元素发生改变)
7.面向对象
定义类
class Bird(object):
    have_feather = True
    way_of_reproduction = 'egg'
    def move(self, dx, dy):
        position = [0,0]
        position[0] = position[0] + dx
        position[1] = position[1] + dy
        return position
没有父类的类引用object
类中方法的参数中有一个self,它是为了方便我们引用对象自身。方法的第一个参数必须是self,无论是否用到。
创建对象
summer = Bird()
print 'after move:',summer.move(5,8)
继承
class Chicken(Bird):
    way_of_move = 'walk'
    possible_in_KFC = True
Chicken将享有Bird的所有属性。
__init__()方法
特殊方法的特点是名字前后有两个下划线。如果你在类中定义了__init__()这个方法,创建对象时,Python会自动调用这个方法。这个过程也叫初始化。
类和对象属性之间的区别,类属性是所有对象具有的属性,对象属性是特定于某个对象所具有的。
dir()用来查询一个类或者对象所有属性,help()用来查询的说明文档。
8.list类的一些方法
实验一些list的方法:
>>>print nl.count(5)       # 计数,看总共有多少个5
>>>print nl.index(3)       # 查询 nl 的第一个3的下标
>>>nl.append(6)            # 在 nl 的最后增添一个新元素6
>>>nl.sort()               # 对nl的元素排序
>>>print nl.pop()          # 从nl中去除最后一个元素,并将该元素返回。
>>>nl.remove(2)            # 从nl中去除第一个2
>>>nl.insert(0,9)          # 在下标为0的位置插入9
9.字典
dic = {'tom':11, 'sam':57,'lily':100}
与表不同的是,词典的元素没有顺序。你不能通过下标引用元素。词典是通过键来引用dic['tom'] = 11。
词典元素的循环调用
dic = {'lilei': 90, 'lily': 100, 'sam': 57, 'tom': 90}
for key in dic:
    print dic[key]
字典常用方法
>>>print dic.keys()           # 返回dic所有的键
>>>print dic.values()         # 返回dic所有的值
>>>print dic.items()          # 返回dic所有的元素(键值对)
>>>dic.clear()                # 清空dic,dict变为{}
>>>del dic['tom']             # 删除 dic 的‘tom’元素
>>>print(len(dic))            #字典中元素个数
10.文件操作
创建文件对象
f = open(文件名,模式)
最常用的模式有:
"r"     # 只读
"w"     # 写入
读取:
content = f.read(N)          # 读取N bytes的数据
content = f.readline()       # 读取一行
content = f.readlines()      # 读取所有行,储存在列表中,每个元素是一行。\
写入:
f.write('I like apple')      # 将'I like apple'写入文件
关闭文件:
f.close()
11.模块
模块(module)也是为了同样的目的。在Python中,一个.py文件就构成一个模块。通过模块,你可以调用其它文件中的程序。
模块引入
import first              #引入first模块调用模块中对象时first.laugh()
import a as b             # 引入模块a,并将模块a重命名为b
from a import function1   # 从模块a中引入function1对象。调用a中对象时,我们不用再说明模块,即直接使用function1,而不是a.function1。
from a import *           # 从模块a中引入所有对象。调用a中对象时,我们不用再说明模块,即直接使用对象,而不是a.对象。
搜索路径
Python会在以下路径中搜索它想要寻找的模块:
程序所在的文件夹
标准库的安装路径
操作系统环境变量PYTHONPATH所包含的路径
模块包:
可以将功能相似的模块放在同一个文件夹(比如说this_dir)中,构成一个模块包。通过import this_dir.module引入this_dir文件夹中的module模块。
该文件夹中必须包含一个__init__.py的文件,提醒Python,该文件夹为一个模块包。__init__.py可以是一个空文件。
12.函数的参数
函数的参数传递方式有:根据位置传递,根据关键字传递,包裹传递,包裹关键字传递,解包裹传递。
def f(a,b,c):
    return a+b+c
print(f(1,2,3))
print(f(c=3,b=2,a=1))
参数默认值
def f(a,b,c=10):
    return a+b+c


print(f(3,2))
print(f(3,2,1))
包裹传递:
在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。
def func(*name):
    print type(name)
    print name


func(1,4,6)
func(5,6,7,1,2,3)
包裹关键字传递:dict是一个字典,收集所有的关键字,传递给函数func
def func(**dict):
    print type(dict)
    print dict


func(a=1,b=9)
func(m=2,n=1,c=11)
解包裹:*和**,也可以在调用的时候使用,即解包裹(unpacking)
def func(a,b,c):
    print a,b,c


args = (1,3,4)
func(*args)
dict = {'a':1,'b':2,'c':3}
func(**dict)
13.循环设计
for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。


S = 'abcdefghijk'
for i in range(0,len(S),2):
    print S[i]
range():我们利用len()函数和range()函数,用i作为S序列的下标来控制循环。在range函数中,分别定义上限,下限和每次循环的步长。
S = 'abcdefghijk'
for (index,char) in enumerate(S):
    print index
    print char
enumerate():enumerate()在每次循环中,返回的是一个包含两个元素的定值表(tuple),两个元素分别赋予index和char
如果你多个等长的序列,然后想要每次循环时从各个序列分别取出一个元素,可以利用zip()方便地实现:
ta = [1,2,3]
tb = [9,8,7]
tc = ['a','b','c']
for (a,b,c) in zip(ta,tb,tc):
    print(a,b,c)
zip()函数的功能,就是从多个列表中,依次各取出一个元素。每次取出的(来自不同列表的)元素合成一个元组,合并成的元组放入zip()返回的列表中。zip()函数起到了聚合列表的功能。
ta = [1,2,3]
tb = [9,8,7]
# cluster
zipped = zip(ta,tb)  #聚合两个列表
print(zipped)
# decompose
na, nb = zip(*zipped) #分解聚合
print(na, nb)
14.循环对象
循环对象:它包含有一个next()方法(__next__()方法,在python 3x中), 这个方法的目的是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误。
当一个循环结构(比如for)调用循环对象时,它就会每次循环的时候调用next()方法,直到StopIteration出现,for循环接收到,就知道循环已经结束,停止调用next()。
迭代器:从技术上来说,循环对象和for循环调用之间还有一个中间层,就是要将循环对象转换成迭代器(iterator)。这一转换是通过使用iter()函数实现的。但从逻辑层面上,常常可以忽略这一层,所以循环对象和迭代器常常相互指代对方。
生成器:生成器(generator)的主要目的是构成一个用户自定义的循环对象。
生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值
def gen():
    a = 100
    yield a
    a = a*8
    yield a
    yield 1000
该生成器共有三个yield, 如果用作循环器时,会进行三次循环。
for i in gen():
    print i
生成器表达式:G = (x for x in range(4))
表推导:表推导(list comprehension)是快速生成表的方法。L = [x**2 for x in range(10)]
15.函数对象
lambda函数:生成一个函数对象该函数参数为x,y,返回值为x+y。函数对象赋给func。func的调用与正常函数无异。
func = lambda x,y: x + y
print func(3,4)
函数可以作为参数传递;函数可以作为一个对象,进行参数传递
def test(f, a, b):
    print 'test'
    print f(a, b)


test(func, 3, 5)
map()函数:map()是Python的内置函数。它的第一个参数是一个函数对象。
map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表中。
re = map((lambda x: x+3),[1,3,5,6])
re = map((lambda x,y: x+y),[1,2,3],[6,7,9])
reduce()函数:reduce函数的第一个参数也是函数,但有一个要求,就是这个函数自身能接收两个参数。reduce可以累进地将函数作用于各个参数。
print reduce((lambda x,y: x+y),[1,2,5,7,9])
相当于(((1+2)+5)+7)+9,相当于函数的计算结果作为参数与后面的元素再作用函数。
filter()函数:filter函数的第一个参数也是一个函数对象。它也是将作为参数的函数对象作用于多个元素。如果函数对象返回的是True,则该次的元素被储存于返回的表中。filter通过读入的函数来筛选数据。
def func(a):
    if a > 100:
        return True
    else:
        return False


print filter(func,[10,56,101,500])




16.异常处理
try:
    ...
except exception1:
    ...
except exception2:
    ...
except:
    ...
else:
    ...
finally:
    ...
   如果try中有异常发生时,将执行异常的归属,执行except。异常层层比较,看是否是exception1, exception2...,直到找到其归属,执行相应的except中的语句。如果except后面没有任何参数,那么表示所有的exception都交给这段程序处理。
   如果try中没有异常,那么except部分将跳过,执行else中的语句。
finally是无论是否有异常,最后都要做的一些事情。
抛出异常:raise StopIteration()
17.参数传递
不可变数据对象  参数传递时不改变
可变数据对象(列表、字典) 参数传递时有可能改变。


18.内建函数
s为一个序列
len(s)         返回: 序列中包含元素的个数
min(s)         返回: 序列中最小的元素
max(s)         返回: 序列中最大的元素
all(s)         返回: True, 如果所有元素都为True的话
any(s)         返回: True, 如果任一元素为True的话
下面的方法主要起查询功能,不改变序列本身, 可用于表和定值表:
sum(s)         返回:序列中所有元素的和
# x为元素值,i为下标(元素在序列中的位置)
s.count(x)     返回: x在s中出现的次数
s.index(x)     返回: x在s中第一次出现的下标


由于定值表的元素不可变更,下面方法只适用于表:
# l为一个表, l2为另一个表
l.extend(l2)        在表l的末尾添加表l2的所有元素
l.append(x)         在l的末尾附加x元素
l.sort()            对l中的元素排序
l.reverse()         将l中的元素逆序
l.pop()             返回:表l的最后一个元素,并在表l中删除该元素
del l[i]            删除该元素
(以上这些方法都是在原来的表的上进行操作,会对原来的表产生影响,而不是返回一个新表。)


下面是一些用于字符串的方法。尽管字符串是定值表的特殊的一种,但字符串(string)类有一些方法是改变字符串的。这些方法的本质不是对原有字符串进行操作,而是删除原有字符串,再建立一个新的字符串,所以并不与定值表的特点相矛盾。
#str为一个字符串,sub为str的一个子字符串。s为一个序列,它的元素都是字符串。width为一个整数,用于说明新生成字符串的宽度。
str.count(sub)       返回:sub在str中出现的次数
str.find(sub)        返回:从左开始,查找sub在str中第一次出现的位置。如果str中不包含sub,返回 -1
str.index(sub)       返回:从左开始,查找sub在str中第一次出现的位置。如果str中不包含sub,举出错误
str.rfind(sub)       返回:从右开始,查找sub在str中第一次出现的位置。如果str中不包含sub,返回 -1
str.rindex(sub)      返回:从右开始,查找sub在str中第一次出现的位置。如果str中不包含sub,举出错误
str.isalnum()        返回:True, 如果所有的字符都是字母或数字
str.isalpha()        返回:True,如果所有的字符都是字母
str.isdigit()        返回:True,如果所有的字符都是数字
str.istitle()        返回:True,如果所有的词的首字母都是大写
str.isspace()        返回:True,如果所有的字符都是空格
str.islower()        返回:True,如果所有的字符都是小写字母
str.isupper()        返回:True,如果所有的字符都是大写字母
str.split([sep, [max]])    返回:从左开始,以空格为分割符(separator),将str分割为多个子字符串,总共分割max次。将所得的子字符串放在一个表中返回。可以str.split(',')的方式使用逗号或者其它分割符
str.rsplit([sep, [max]])   返回:从右开始,以空格为分割符(separator),将str分割为多个子字符串,总共分割max次。将所得的子字符串放在一个表中返回。可以str.rsplit(',')的方式使用逗号或者其它分割符
str.join(s)                返回:将s中的元素,以str为分割符,合并成为一个字符串。
str.strip([sub])           返回:去掉字符串开头和结尾的空格。也可以提供参数sub,去掉位于字符串开头和结尾的sub  
str.replace(sub, new_sub)  返回:用一个新的字符串new_sub替换str中的sub
str.capitalize()           返回:将str第一个字母大写
str.lower()                返回:将str全部字母改为小写
str.upper()                返回:将str全部字母改为大写
str.swapcase()             返回:将str大写字母改为小写,小写改为大写
str.title()                返回:将str的每个词(以空格分隔)的首字母大写
str.center(width)          返回:长度为width的字符串,将原字符串放入该字符串中心,其它空余位置为空格。
str.ljust(width)           返回:长度为width的字符串,将原字符串左对齐放入该字符串,其它空余位置为空格。
str.rjust(width)           返回:长度为width的字符串,将原字符串右对齐放入该字符串,其它空余位置为空格。

19.正则表达式
使用正则表达式需要引入包re
import re
m = re.search('[0-9]','abcd4ef')
print(m.group(0))
正则表达式的函数
m = re.search(pattern, string)  # 搜索整个字符串,直到发现符合的子字符串。
m = re.match(pattern, string)   # 从头开始检查字符串是否符合正则表达式。必须从字符串的第一个字符开始就相符。
对于返回的m, 我们使用m.group()来调用结果
str = re.sub(pattern, replacement, string) # 在string中利用正则变换pattern进行搜索,对于搜索到的字符串,用另一字符串replacement替换。返回替换后的字符串。
re.split()                                 # 根据正则表达式分割字符串, 将分割后的所有子字符串放在一个表(list)中返回
re.findall()                               # 根据正则表达式搜索字符串,将所有符合的子字符串放在一给表(list)中返回
写一个正则表达式
1)单个字符:
.          任意的一个字符
a|b        字符a或字符b
[afg]      a或者f或者g的一个字符        
[0-4]      0-4范围内的一个字符
[a-f]      a-f范围内的一个字符
[^m]       不是m的一个字符
\s         一个空格
\S         一个非空格
\d         [0-9]
\D         [^0-9]
\w         [0-9a-zA-Z]
\W         [^0-9a-zA-Z]
2)重复
紧跟在单个字符之后,表示多个这样类似的字符
*         重复 >=0 次
+         重复 >=1 次
?         重复 0或者1 次
{m}       重复m次。比如说 a{4}相当于aaaa,再比如说[1-3]{2}相当于[1-3][1-3]
{m, n}    重复m到n次。比如说a{2, 5}表示a重复2到5次。小于m次的重复,或者大于n次的重复都不符合条件。
正则表达          相符的字符串举例
[0-9]{3,5}       9678
a?b              b
a+b              aaaaab
3) 位置
^         字符串的起始位置
$         字符串的结尾位置
正则表达          相符的字符串举例        不相符字符串
^ab.*c$          abeec               cabeec (如果用re.search(), 将无法找到。)
返回控制
import re
m = re.search("output_(\d{4})", "output_1986.txt")
print(m.group(1))
该正则表达式用括号()包围了一个小的正则表达式,\d{4}。 这个小的正则表达式被用于从结果中筛选想要的信息(在这里是四位数字)。这样被括号圈起来的正则表达式的一部分,称为群(group)。
我们可以m.group(number)的方法来查询群。group(0)是整个正则表达的搜索结果,group(1)是第一个群。
我们还可以将群命名,以便更好地使用m.group查询:
import re
m = re.search("output_(?P<year>\d{4})", "output_1986.txt")   #(?P<name>...) 为group命名
print(m.group("year"))
20.时间与日期
time包
time包基于C语言的库函数(library functions)。Python的解释器通常是用C编写的,Python的一些函数也会直接调用C语言的库函数。
import time
print(time.time())   # wall clock time, unit: second
print(time.clock())  # processor clock time, unit: second
time.sleep()可以将程序置于休眠状态,直到某时间间隔之后再唤醒程序,让程序继续运行。
import time
print('start')
time.sleep(10)     # sleep for 10 seconds
print('wake up')
time包还定义了struct_time对象。该对象实际上是将挂钟时间转换为年、月、日、时、分、秒……等日期信息,存储在该对象的各个属性中(tm_year, tm_mon, tm_mday...)。
下面方法可以将挂钟时间转换为struct_time对象:
st = time.gmtime()      # 返回struct_time格式的UTC时间
st = time.localtime()   # 返回struct_time格式的当地时间, 当地时区根据系统环境决定。
s  = time.mktime(st)    # 将struct_time格式转换成wall clock time
datetime包
import datetime
t = datetime.datetime(2012,9,3,21,30)
print(t)
所返回的t有如下属性:hour, minute, second, microsecond,year, month, day, weekday   # weekday表示周几
datetime包还定义了时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。
import datetime
t      = datetime.datetime(2012,9,3,21,30)
t_next = datetime.datetime(2012,9,5,23,30)
delta1 = datetime.timedelta(seconds = 600)
delta2 = datetime.timedelta(weeks = 3)
print(t + delta1)
print(t + delta2)
print(t_next - t)
时间格式化
字符串转换为时间
import datetime
formatstr = "%Y-%m-%d %H:%M:%S"
strs = "2014-5-6 12:32:30"
t = datetime.datetime.strptime(strs,formatstr)
print(t)
时间转换为字符串
t.strftime("%Y-%m-%d-%H:%M:%S")  #m月份,M分钟
21.路径与文件
os.path包
import os.path
path = '/home/vamei/doc/file.txt'
print(os.path.basename(path))    # 查询路径中包含的文件名
print(os.path.dirname(path))     # 查询路径中包含的目录
info = os.path.split(path)       # 将路径分割成文件名和目录两个部分,放在一个表中返回
path2 = os.path.join('/', 'home', 'vamei', 'doc', 'file1.txt')  # 使用目录名和文件名构成一个路径字符串
p_list = [path, path2]
print(os.path.commonprefix(p_list))    # 查询多个路径的共同部分
print(os.path.exists(path))    # 查询文件是否存在
print(os.path.getsize(path))   # 查询文件大小
print(os.path.getatime(path))  # 查询文件上一次读取的时间
print(os.path.getmtime(path))  # 查询文件上一次修改的时间
print(os.path.isfile(path))    # 路径是否指向常规文件
print(os.path.isdir(path))     # 路径是否指向目录文件
glob包
glob.glob()列出所有符合该表达式的文件(与正则表达式类似),将所有文件名放在一个表中返回。所以glob.glob()是一个查询目录下文件的好方法。
import glob
print(glob.glob('/home/vamei/*'))
22.文件管理
os包下方法
mkdir(path)                  #创建新目录,path为一个字符串,表示新目录的路径。相当于$mkdir命令
rmdir(path)                  #删除空的目录,path为一个字符串,表示想要删除的目录的路径。相当于$rmdir命令
listdir(path)                #返回目录中所有文件。相当于$ls命令。
remove(path)                 #删除path指向的文件。
rename(src, dst)             #重命名文件,src和dst为两个路径,分别表示重命名之前和之后的路径。 
chmod(path, mode)            #改变path指向的文件的权限。相当于$chmod命令。
chown(path, uid, gid)        #改变path所指向文件的拥有者和拥有组。相当于$chown命令。
stat(path)                   #查看path所指向文件的附加信息,相当于$ls -l命令。
symlink(src, dst)            #为文件dst创建软链接,src为软链接文件的路径。相当于$ln -s命令。
getcwd()                     #查询当前工作路径 (cwd, current working directory),相当于$pwd命令。
创建目录
import os
os.mkdir('/home/vamei/new')
shutil包下方法
copy(src, dst)               #复制文件,从src到dst。相当于$cp命令。
move(src, dst)               #移动文件,从src到dst。相当于$mv命令。
复制文件
import shutil
shutil.copy('a.txt', 'b.txt')


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值