学习《python学习手册第四版》的读书笔记

本文是学习《Python学习手册第四版》的读书笔记,涵盖对象、序列解包、迭代器和解析、文档等内容。介绍了isdigit()、readlines()、字符串格式化、模块变量、列表解析、文件操作、序列解包、迭代器、zip和enumerate等核心概念,强调了Python中的变量赋值、内存地址比较、类型和共享引用等关键点。
摘要由CSDN通过智能技术生成

Chapter1 对象

  1. 判断一个字符串的数字部分(列表解析):
s = 'total executian tima: 12 s'  
[t.isdigit() for t in s.split() ]  

isdigit字符串只包含数字返回TURE,不包括小数点

读文件readlines会产生一个列表将文件整个读入内存中:
rstrip()是返回删除字符串末尾的指定字符后生成新字符串(默认空格),即删除每行后面的空格。

lines = open('1.txt').readlines()
lines = [line.rstrip() for line in lines]
  1. 字符串支持格式化的高级替代操作:

‘%s,eggs,and %s’%(‘spam’,‘SPAM!’)

‘spam,eggs,and SPAM!’

‘{0}, eggs,and {1}’.format(‘spam’,‘SPAM!’)

‘spam, eggs,and SPAM!’

  1. 在 import 一个 A.py 文件以后,使用 dir(A) 获得模块内部的可用的变量名的列表。其中以双下划线开头并结尾的变量名 为python预定义的内置变量名。

[’__builtins__’,
‘__cached__’,
‘__doc__’,
‘__file__’,
‘__loader__’,
‘__name__’,
‘__package__’,
‘__spec__’,
]

  • __builtins__:内建模块
  • __cached__:python的缓存
  • __doc__:帮助文档
  • __file__:python文件绝对位置
  1. 利用help()生成交互界面的帮助
    利用 help(str.center) 查询特定的方法调用。

  2. x is y OR x is not y
    验证x和y在 内存地址 上是否严格相等

  3. 在python中,变量并不需要预声明,但是在使用之前,至少要赋一次值。实际上,这意味着在对其进行加法计算时要计数器初始化为0,在列表后添加元素前,要首先初始化列表为一个空列表。

  4. "//"截断除法:
    5 / 2 --> 2.5
    5 // 2 --> 2
    5 // -2 --> -3

  5. 小数、分数、浮点数:

    0.1 + 0.1 + 0.1 - 0.3 -> 5.5511...7e-17
    >>> from fractions import Fraction
    >>> Fraction(1,10) + Fraction(1,10) + Fraction(1,10) - Fraction(3,10)
    Fraction(0,1)  
    
    >>> from decimal import Decimal
    >>> Decimal('0.1') +   Decimal('0.1') + Decimal('0.1') -  Decimal('0.3')
    >>>  Decimal('0.0')
    
  6. 变量(变量名)没有类型,只有对象才有类型。比如:a = 3,a是变量,a引用整数对象3.每一个对象都包含一个 头部信息 (标记了这个对象的类型),以及一个引用计数器

  7. 共享引用。如果是可变对象:列表 会原处修改值,改变所有变量。
    如果不是可变对象:字典、数值、字符串,则不影响。

使用共享应用时,相互影响
L1 = [1, 2, 3]
L2 = L1
>>> L1.append(4)
>>> L2 --> [1,2,3,4]
>>> L1 = 5
>>> L2 -->[1,2,3,4]
只有拷贝时,不影响
L1 = [1,2,3]
L2 = L1[:]
  1. 打开文件时,使用R/r 关闭转义字符 的功能:

myfile = open(r’C:\new\text.dat’,‘w’)
模式选择有两种:‘r’输入打开文件(默认)
‘w’输出生成并打开文件,会清空文件
’a’表示为在文件尾部追加内容而打开文件

  1. 文本写入只能写入字符串,必须使用转换工具将对象转成字符串

F.write(str(L) + str(D))
在用* for line in file:*后。需要对每一行去除‘\n’.使用”line.rstrip()“ -> PS:有时候使用line[:-1],可是一般最后一行没有‘\n’

读取文件后将字符串还原:line.strip()

将 (12, 13, 14)元组还原:首先将”字符串“切分为列
list=line.splie(’,’)–>再将列表字符迭代为数字:[int§ for p in list]注意这里int(‘34\n’)=34

将读取的字符串"[1,2,3,]{‘a’:1,‘b’:2}\n"还原为:列表和字典
使用”eval"函数,将字符串当作可执行程序代码(含有python表达式的字符串),可以在脚本中使用,注意eval的字符串中不能使用“=” 。意味着不能赋值
part = line.split(’$’)
obj = [eval§ for p in part]

  1. 鉴于"eval"使用有风险(可能执行删库跑路代码),使用“pickle”

总结

  1. 可变对象不可变对象
    列表字符串
    字典元组
    集合数字
  2. 空的列表、元组、字典、字符串视为 False,常用用法“

if X: -> if not X:

  1. 修改元组值:

a = (1,2,3) --> (4,2,3)
利用切片:a = (4,) + a[1:]~~这里注意的是(4,)是元组,而(4)是数字”int“

  1. 载入和重载
    • 在交互式界面中,已经使用了一次"import"以后,后续即使已经修改了源代码,也不能再重新载入
    • 使用重载,可以再次载入:
from imp import reload #python3 中重载不是默认函数
reload(...)

Chapter2 序列解包

  1. 扩展的序列解包语法:

a, *b = seq(seq = [1,2,3,4]) -> a=1,b=[2,3,4]
a,*b = ‘spam’ --> a= ‘s’,b = [‘p’,‘a’,‘m’]
和切片不同的是,用序列解包,返回的都是列表。而切片返回同类型的序列

L = list(range(4))
whlie L:
    front,*L= L
    print(front, L)
>>>0 [1,2,3]
>>>1 [2,3]
>>>2 [3]
>>>3 []
  1. python没有swith以及case语句,可以根据变量选择动作,一般使用如下:
if:
elif:
else:
或则对字典进行索引运算或搜索列表:
choice = 'ham'
print({'spam':1.25
        'ham':1.99
        'eggs':0.99}[choice])

  1. 执行简单的判断赋值:

A = Y if X else Z

  1. range循环计数器
    range是通用的工具:

    list (range(5)), list(range(2,5)), list(range(0,10,2))可以查看range()产生的列表
    使用range遍历字符串跳过元素:
    s = ‘abcdefghijk’
    for i in range(0,len(s),2):print(s[i], end=’ ')

然而上述方法使用的并不多,一般常用为:
for c in s[::2]: print(c,end = ’ ')

L= [1,2,3,4,5] 改变列表内的每一个值正确做法,这里是在原处修改,所有 共享引用 都会发生变化
for i in range(len(L)):
L[i] += 1

[x+1 for x in l]列表解析表达式,没有对最初的列表在原处修改,不会引起共享引用的变化

  1. zip
    功能:产生元组,构造字典
for (x,y) in zip(L1,L2):
    print(x,y,'--',x+y) #以两个列表同时循环

list(zip(L1,L2,L3))  #生成新的里列表

D = dict(zip(L1,L2))
  1. enumerate枚举,在迭代协议中,产生一个 迭代次数n
S = 'spam'
for (n,s) in enumerate(s):
    print(n,s)
--> 0 s
--> 1 p
--> 2 a 
--> 3 m

Chapter3 迭代器和解析

  1. 利用迭代特性读文件:
with open('1.txt','r') as f:
    for (n,line) in enumerate(f):
        print(n,line,end ='')
#没有读文件,让for循环在每轮自动调用next从而前进到下一行
#用“end= ''”来防止输出变成两行隔开
#由于print在输出的时候会自带换行符,因此要用end指定print输出自带不是换行
  1. 利用列表解析:收集文件中特定字母开头的行
lines=[line.rstrip() for line in open('1.txt') if line[0]=='p']

[x+y for x in 'abc' for y in 'lmn'] #列表解析式可以使用两个“for”
>> ['al','am','an','bl','bm','bn'......]

list(open('1.txt')) #利用每行迭代协议
tuple(open('1.txt'))
'&&'.join(open('1.txt')) #每行之间添加“&&”,输出一个长的字符串

a,b=open('data.txt')
a, *b = open('1.txt') #实际上open函数利用迭代返回每行的字符串列表


  1. 列表生成式(二维列表),利用列表生成式产生二维列表
>>>[[0 for col in range(5)] for row in range(4)]
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

>>>[[col for col in range(5)] for row in range(4)]
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

>>>[[row for col in range(5)] for row in range(4)]
[[0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [2, 2, 2, 2, 2], [3, 3, 3, 3, 3]]

>>> s = [[1.2,2.3],[3.4,4.5]]
>>>[[int(m) for m in i] for i in s]
[[1, 2], [3, 4]]

Chapter4 文档

  1. python的文档资源

    形式角色
    #注释文档中的文件
    dir函数对象中可用属性的列表
    文档字符串:__doc__附加在对象上的文件中的文档
    help()对象的交互帮助
  2. 编写代码的陷阱:

    • 要注意赋值语句中的可变对象。
    • 不要期待在原处修改函数的对象会返回结果。比如list.append(X)无返回值
    • 一定使用括号调用函数。函数也是对象,只是有特殊的运算–用过括号触发对它的调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值