天天看点

python读书笔记

1.常用函数

abs(x) 返回指定值的绝对值

bytes(string,encoding[,errors]) 对指定字符串进行编码,并以指定的方式处理错误

pow(a,b) a的b次方

pow(x,y[,z]) 返回x的y次方对z求模的结果

round(x) 将浮点数圆整为与之最接近的整数

round(number[,ndigits]) 四舍五入为指定的精度,正好为5时舍入到偶数

float(x) 将字符串或数字转换为浮点数

help([object]) 提供交互式帮助

input(x) 以字符串的方式获取用户输入

import math

math.floor(x) 以浮点数的方式返回向下圆整的结果

math.ceil(x) 以浮点数的方式返回向上圆整的结果

math.sqrt(x) 求给定数的平方根,可用于复负数

通过使用命令import 的变种 from moudle import function,可在调用函数时不指定模块前缀

nan具有特殊含义,指的是非数值(not a number)

注释: # xxx

字符串拼接 +

str(obj):将指定的值转换为字符串。用于转换bytes时,可指定编码和错误处理方式

repr(obj):返回指定值的字符串表示

长字符串('''xxx'''):若要表示很长的字符串需要用三引号

(常规字符串也可以跨多行,在行尾加上反斜杠即可)

原始字符串:前缀前加 r 即可

2、列表和元组

  不同之处:列表可以修改元组不可以

  两种主要的容器:序列、映射、集合(set)

  序列:列表和元组

  映射:字典

  浅谈序列:索引、切片、相加、相乘、成员资格审查

  1.索引:序列中所有元素都有编号从0开始,使用负索引时将从右往左数(-1 是最右边元素)

  2.切片:用切片访问特定范围内的元素。为此,可使用两个索引,并用冒号分隔开

    第一个索引是包含的第一个元素的编号,第二个索引是切片后余下的第一个元素的编号

    第一个索引指定的元素包含在切片内,但第二个索引指定的元素不包含在切片内

  3.简写:

    若切片作用于序列末尾,可省略第二个索引;若切片始于序列开头可省略第一个索引

    若复制整个序列可将两个索引都省略

  4.步长:执行切片操作时可以显式或隐式的指定起点和终点,但通常省略另一个参数:步长。在普通切片中步长为1,也可显式指定步长。注:步长不能为0,但可为负数,即从右向左提取元素

  5.序列相加:相加序列为同类型,不同类型会报错。

  6.乘法:将序列和x相乘时,降重复序列x次来创建一个新序列

  7.成员资格:运算符 in 检查是否满足指定的条件并返回相应的值:满足时返回True,不满足返回false。(布尔运算

  列表:可变、可修改其内容

  基本操作:

  函数liss("xxx") 可将任何序列作为list的参数

    形式:listname = [x,x,x,x]

  删除元素:del listname[lindex]

  给切片赋值:

  列表方法:

  形式:object.method(arguments)

    追加:lst.append(x)

    清空:lst.clear()

    复制列表:lst1 = lst2

    指定元素出现的次数:lst.count(x) :x 在lst中出现的次数

    将多个值附加到列表表尾:lst.extend(b) : 将列表 b 扩展到列表 lst 中

    查找指定值第一次出现的索引:lst.index(x)

    插入:lst.insert(index,x) : 将x插入到列表 index 的位置

    从列表中删除一个元素(末尾为最后一个元素),并返回这一元素:lst.pop()

    用于删除第一个为指定值的元素:lst.remove("x")

    按相反的顺序排列列表中的元素:lst.reverse()

    对列表就地排序:lst.sort()

    高级排序:方法sort接受两个可选的参数:key和reverse

  元组(不可修改的序列):

  元组语法简单,将一些值用逗号分隔开,就能自动创建一个元组

  元组可以用括号括起来(这是通常的做法)

  包含一个值的元组,特殊点:即使为一个值,也必须在它后面加上逗号

3、字符串:

基本操作:

所有标准序列操作(索引、切片、乘法、成员资格审查、长度、最小值和最大值)都适用于字符串,但是字符串是不可变的,因此所有元素赋值和切片赋值都是非法的的

设置格式:

format = "hello ,%s.%s enough for ya?"
values = ('world','Hot')
print(format % values)
输出:
hello ,world.Hot enough for ya?      

%s 为转换说明符,指出了要将值插入到那个地方

s 意味着将值视为字符串对待

%.3f 将值的格式设置为包含3位小数的浮点数

模板字符串如下:

from string import Template
tmpl = Template("Hello,$who! $what enough for ya?")
print(tmpl.substitute(who = "Mars",what = "Dusty"))
输出:
Hello,Mars! Dusty enough for ya?      

字符串方法format:使用这种方法时,每个替换字段都用花括号括起来,其中可能包含名称,还有可能包含有关如何对相应的值进行转换和格式设置的信息

print("{},{} and {}".format("first","second","third"))
输出:
first,second and third

print("{0},{1} and {2}".format("first","second","third"))
输出:
first,second and third

print("{3},{0} {2} {1} {3} {0}".format("be","not","or","to"))
输出:
to,be or not to be

from math import pi
print("{name} is approximately {value:.2f}".format(value = pi,name = "pi"))
输出:
pi is approximately 3.14      

宽度、精度和千位分隔符:

宽度是使用整数指定的:

print("{num:10}".format(num = 3))
输出:
         3      

精度也是使用整数指定的,但需要在它前面加上一个表示小数点的句点

from math import pi
print("Pi day is {pi:.2f}".format(pi = pi))
print("Pi day is {pi:10.2f}".format(pi = pi))
输出:
Pi day is 3.14
Pi day is       3.14      

可使用逗号来指出要添加的千位分隔符:

print("one google is {:,}".format(10**100))
输出:
one google is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000      

符号、对齐和用 0 填充

在指定宽度和精度的数面前,可添加一个标志。这个标志可以是 0、加号、减号或空格,其中 0 表示使用 0 来填充数字

from math import pi
print("{:010.2f}".format(pi))
#要指定左对齐、右对齐和中对齐,可分别使用 < > ^
print("{0:10.2f}\n{0:^10.2f}\n{0:>10.2f}".format(pi))
输出:
0000003.14
3.14
3.14
3.14      

可以使用填充字符来扩充对齐说明符,这样将使用指定的字符而不是默认的空格来填充

print("{:$^15}".format("WIN BIG"))
输出:
$$$$WIN BIG$$$$      

还有更具体的说明符 = ,它指定将填充字符放在符号和数字之间

from math import pi
print("{0:10.2f}\n{1:10.2f}".format(pi,-pi))
print("{0:10.2f}\n{1:=10.2f}".format(pi,-pi))
输出:
3.14
-3.14
3.14
- 3.14      

字符串方法:

center

方法center通过在两边添加填充字符(默认为空格)让字符串居中

print("Hello,world".center(15))
print("Hello,world".center(15,'*'))
输出:
Hello,world
**Hello,world**
#附:ljust、rjust和zfill      

find

此方法在字符串中查找子串。成功返回子串第一个索引,否则返回-1
print("with a moo-moo here,and a moo-moo there".find('moo'))
title = "Monty python's flying circus"
print(title.find('Monty'))
print(title.find('flying'))
输出:
7
0
15
#附:rfind、index、rindex、count、startswith、endswith
      

join

此方法用于合并序列的元素

seq = [1,2,3,4,5]
sep = '+'
print(seq.join(sep))
输出:
Traceback (most recent call last):
  File "test3.py", line 31, in <module>
    print(seq.join(sep))
AttributeError: 'list' object has no attribute 'join'

sep = '+'
seq = ['1','2','3','4','5']
print(sep.join(seq))
输出:
1+2+3+4+5

dirs = '','usr','bin','env'
print('/'.join(dirs))
输出:
/usr/bin/env      

lower

此方法返回字符串的小写版本

print('Hello World'.lower())
输出:
hello world

name = 'Gumby'
names = ['gumby','smith','jones']
if name.lower() in names:
    print('find it')
输出:
find it      

replace

此方法将指定子串都替换为另一个字符串,并返回替换后的结果

print("this is a test".replace('is','eez'))
输出:
theez eez a test      

split

此方法将字符串拆分为序列
print('1+2+3+4+5'.split('+'))
print('/user/bin/enc'.split('/'))
print('using the default'.split())
输出:
['1', '2', '3', '4', '5']
['', 'user', 'bin', 'enc']
['using', 'the', 'default']      

strip

此方法将字符串开头和末尾的空白删除,并返回删除后的结果

print(' internal whitespace is kept '.strip())
names = ['hehe','haha','lala']
name = 'hehe'
if name in names:
print('Find it!')
输出:
internal whitespace is kept
Find it!
#删除指定字符:
print('*** SPAM * FOR * EVERYONE!!!***'.strip(' *!'))
输出:
SPAM * FOR * EVERYONE
      

translate

此方法和replace一样替换字符串的特定部分,但不同的是它只能替换单个字符,其优势在于能够同时替换多个字符,效率高于replace。要使用 translate 前必须创建一个转换表。这个转换表指出了不同的 Unicode 码点之间的转换关系,可对字符串类型 str 调用方法 maketrans,这个方法接受两个参数:两个长度相同的字符串,它们指定要将第一个字符串中的每个字符替换为第二个字符中的每个字符。

4、字典:

{key:value,key:value,key:value, '''''',key,value}

函数 dict 可从其他映射(如其他字典)或键——值对序列创建字典

d = dict(name = 'ljk',age = 18)
print(d)
输出:
{'name': 'ljk', 'age': 18}      

字典的基本功能

len(d) :返回字典 d 中键值对的个数

d[k] :返回与键 k 相关联的值

d[k] = v:将值 v 关联到键 k

del d[k]:删除键为 k 的项

k in d :检查字典d是否包含键为 k 的项

键的类型:字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何不可变的类型,如浮点数(实数)、字符串、元组

成员资格: k in d (d是一个字典)查找的是键不是值,而 v in l (l是一个列表)查找的是值而不是索引

# 字典简单程序
people = {
    'Alice':{
    'phone':'1234',
    'addr':'Foo Drive 01'
    },
    'Benth':{
    'phone':'5678',
    'addr':'Bar street 01'
    },
    'Cecil':{
    'phone':'9101112',
    'addr':'Bar avenue 01'
    }
}

labels = {
    'phone':'phone number',
    'addr':'address'
}

name = input('Name:')

request = input('Phone Number(p) or address (a)?')
if request == 'p':
    key = 'phone'
if request == 'a':
    key = 'addr'

if name in people:
    print("{}'s {} is {}.".format(name,labels[key],people[name][key]))
输出:
Name:Alice
Phone Number(p) or address (a)?a
Alice's address is Foo Drive 01.      

字典方法:(未完待续......)

clear()    :删除所有的字典项

copy()    :返回一个新字典,其包含的键——值与原来的字典相同(此处为浅复制),可使用deepcopy进行深复制

fromkeys()  :创建一个新字典,其中包含指定的键,且每个键对应的值都是 None

get()      :该方法为访问字典项提供了宽松的环境。如果试图访问字典中没有的项将引发错误,使用get访问不存在的键,没有发生异常而是返回None,也可指定默认值。

items()  :返回一个所有字典项的列表,每个元素都以(key,value)的形式,字典中项的顺序不确定

keys()   :返回字典的视图,其中包含指定字典中的键

pop()    :此方法用于获取与指定键相关联的值,并将该键——值对从字典中删除

popitem()      :该方法随机的弹出一个字典项,因为字典项的顺序是不确定的

setdefault()   :此方法与get有点像,它也获取指定建相关联的值,除此之外,它还在字典中不包含指定的键时,在字典中添加指定的键——值对。

update()   :使用一个字典项更新另一个字典项

values()   :返回由一个字典中的值组成的字典视图