Python学习
2022-08-05 11:12:56 0 举报
AI智能生成
登录查看完整内容
python学习,按照各个模块区分
作者其他创作
大纲/内容
序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量的方式得到。
多个元素可以通过切片操作的方式一次得到
偏移量 是从 0 开始到 总元素数-1 结束
定义
in
not in
字符串join()方法更高效节约内存
对列表来说,用列表类型的 extend()方法来把两个或者多个列表对象合并
把一个序列和另一个相同类型的序列做连接
连接操作符( + )
一个序列的多份拷贝
重复操作符 ( * )
[]方括号 加一个下标的方式访问它的每一个元素
在方括号中用冒号把开始下标和结束下标分开的方式来访问一组连续的元素[star:end]不包含第end个元素
s[::-1] # 可以视作"翻转"操作
s[::2] # 隔一个取一个的操作
扩展切片操作,它多出来的第三个索引值被用做步长参数[::]
切片操作符
成员关系操作符
返回值一般来讲就是 True/False,满足成员关系就返回 True,否则返 回 False
性能
%
string.format()
格式化输出
在打开文件时可以使用
原始字符串符号(引号前面的字母"r",大小写随意,唯一要求:在第一个引号前面)
字符串
能保留任意数目的 Python 对象的灵活的容器
列表是可变的
操作符和字符串操作符基本一致
堆栈是一个后进先出(LIFO)的数据结构
堆栈
队列是一种先进先出(FIFO)的数据类型
队列
用列表构建其他数据结构
列表
元组和列表看起来不同的一点是元组用的是圆括号而列表用的是方括号。
元组对象本身不可变,但是它包含的可变对象是可变的
不可变
操作符和字符串的基本一致
所有的多对象的,逗号分隔的,没有明确用符号定义的,比如说像用方括号表示列表,这些集合默认的类型都是元组
单元素元组:第一个元素后添加逗号
元组
浅拷贝
copy.deepcopy()
深拷贝
警告
浅拷贝和深拷贝
序列
映射类型对象里哈希值(键) 和指向的对象(值)是一对多的关系。
一个字典条目的语法格式是 键:值。 而且,多条字典条目被包含在{ }里
可以使用in或not in操作符检查键是否存在
想访问该字典中的一个数据元素,而它在这个字典中没有对应的键,将会产生一个错误
字典中的键必须是可哈希的, 所以数字和字符串可以作为字典中的键, 但是列表和其他字典不行。
用字典参数可以简化 print 语句,因为这样做你只须用到一次该字典的名字,而不用在每个元素出现的时候都用元组参数表示
字典中该键已经存在,则字典中该键对应的值将被新值替代
也可以用内建方法 update()将整个字典的内容添加到另一个字典
更新字典
字典的键查找操作符([ ])
首先是字典的大小,然后是键,最后是值
>>> dict2['name'] = 'venus' # 更新已有条目>>>>>> print 'host %(name)s is running on port %(port)d' %dict2host venus is running on port 6969
用字典参数可以简化 print 语句
参数是可以迭代的(一个序列,或是一个迭代器,或是一个支持迭代的对象),那每个可迭代的元素必须成对出现。在每个值对中,第一个元素是字典的键、第二个元素是字典中的值。
如果输入参数是(另)一个映射对象,比如,一个字典对象,对其调用 dict()会从存在的字典里复制内容来生成新的字典。新生成的字典是原来字典对象的浅复制版本, 它与用字典的内建方法copy() 生成的字典对象是一样的。但是从已存在的字典生成新的字典速度比用 copy()方法慢,我们推荐使用 copy()。
dict()创建字典
对字典调用 len(),它会返回所有元素(键-值对)的数目
hash() 检查对象是否可哈希
update()方法可以用来将一个字典的内容添加到另外一个字典中。字典中原有的键如果与新添加的键重复,那么重复键所对应的原有条目的值将被新键所对应的值所覆盖。原来不存在的条目则被添加到字典中。
不同的是它允许你为不存在的键提供默认值。如果该键不存在,也未给出它的默认值,则返回 None
get()方法和键查找(key-lookup)操作符( [ ] )相似
它实现了常用的语法: 检查字典中是否含有某键。 如果字典中这个键存在,你可以取到它的值。 如果所找的键在字典中不存在,你可以给这个键赋默认值并返回此值
setdefault()
标准类型操作符
每个键只能对应一个项。也就是说,一键对应多个值是不允许的。当有键发生冲突(即,字典键重复赋值),取最后(最近)的赋值。
必须是可哈希的
字典的键
映射类型
集合对象是一组无序排列的值
支持用 in 和 not in 操作符检查成员
由 len() 内建函数得到集合的基数(大小)
用 for 循环迭代集合的成员
可添加或删除元素
不可哈希
可变集合sets
不可添加或删除元素
可哈希
不可变集合frozensets
in 是。。。的成员
not in 不是。。。的成员
== 等于
!= 不等于
< 是。。。的(严格)子集
<= 是。。。的子集(包括非严格子集)
> 是。。。的(严格)超集
>= 是。。。的超集(包括非严格超集)
两个集合的交集是一个新集合,该集合中的每个元素同时是两个集合中的成员,即,属于两个集合的成员。交集符号有一个等价的方法,intersection()
& 交集
属于两个集合其中之一的成员。联合符号有一个等价的方法,union()
| 合集
两个集合(s 和 t)的差补或相对补集是指一个集合 C,该集合中的元素,只属于集合 s,而不属于集合 t。差符号有一个等价的方法,difference()
- 差补或相对补集
^ 对称差分
集合操作符和关系符号
Python2仅能用集合的工厂方法set()或frozenset()
python3可以使用{}
创建集合的方法
集合
映射和集合类型
if-else
if-elif
>>> if x < y:... smaller = x... else:... smaller = y
smaller = x if x < y else y
三元操作符
while
两全其美的办法是使用内建的 enumerate() 函数
直接迭代序列要比通过索引迭代快
可迭代对象有next()方法
for-in
range(end)
step默认为1
range()
xrange()
跳出当前循环,注意缩进
break
continue
无操作
pass
当循环语句中的else遇到break时将不会生效.
else
reversed() 内建函数将返回一个反序访问的迭代器.
enumerate() 内建函数同样也返回迭代器
推荐使用for循环
序列使用
字典的迭代器会遍历它的键(keys).语句 for eachKey in myDict.keys() 可以缩写为 for eachKey in myDict
字典使用
文件使用
不要在在迭代可变对象的时候修改它们
可变对象
对一个对象调用iter()
使用可迭代对象的__iter__()方法
创建迭代器
迭代器,iter()
来自函数式编程语言 Haskell,用来动态地创建列表
filter() 基于一个条件表达式过滤列表成员.
lambda 允许你快速地创建只有一行的函数对象.
函数式编程
[expr for iter_var in iterable]
这个语法在迭代时会过滤/捕获满足条件表达式 cond_expr 的序列成员
[expr for iter_var in iterable if cond_expr]
结合 if语句,列表解析还提供了一个扩展版本的语法:
语法
列表解析支持多重嵌套for 循环以及多个 if 子句.
庆祝一for和if语句的顺序
举例
同上
列表解析
(expr for iter_var in iterable if cond_expr)
生成器表达式
条件和循环
基本语法
open()和file()
不同平台用来表示行结束的符号是不同的
默认打开
只用于读取文本文件. 没有对应的处理文件输出的方法
通用换行符支持
read()
readline()
readlines()
输入
功能与 read() 和 readline() 相反
write()
writelines()
输出
在文件中移动文件指针到不同的位置
seek()
返回光标当前在文件中的位置
tell()
文件内移动
内建方法
关闭访问文件
close()
返回打开文件的描述
fileno()
把内部缓冲区中的数据立刻写入文件
flush()
其他
os 模块属性 描述linesep 用于在文件中分隔行的字符串sep 用来分隔文件路径名的字符串pathsep 用于分隔文件路径的字符串curdir 当前工作目录的字符串名称pardir 当前工作目录的)父目录字符串名称
os模块
marshal
pickle
shelve
永久存储模块
文件
异常
语法错误
逻辑错误
错误
可以在一个 except 子句里处理多个异常. except 语句在处理多个异常时要求异常被放在一个元组里
使用 裸 except 子句 except:
接受所有异常
不推荐不会考虑潜在的会导致异常的主要原因
try-except
try-finally
try-except-else-finally
检测和处理异常
包含来自导致异常的代码的诊断信息的类实例
reason
异常参数
else子句
finally 子句
with 语句
上下文管理
已废弃
字符串异常
raise
抛出异常
assert
断言
标准异常
创建异常
异常和sys模块
错误和异常
在函数体内创建另外一个函数(对象)
内部/内嵌函数
函数和函数式编程
高级:有高级的数据结构(例如:列表,字典),不需要开发框架(C需要)
面向对象:数据和逻辑分离
可升级:项目可增加功能且易于维护
可拓展:使用别的语言开发性能更高的代码
可移植:运行在任何带有ANSIC编译器的平台
简介
1.命令行交互式解释器
2.命令行运行Python脚本
3.GUI集成开发环境
运行Python的三种路径
print
logfile.close()
print >>重定向输出
输出语句
只能用于文本输入
raw_input
从#开始到一行结束
‘注释内容’
“注释内容”
‘’‘注释内容’‘’
注释
+
-
*
底板除,取比商小的最大整数
/
浮点除法,精度更高
//
乘方
**
<
>
<=
>=
==
!=
and
or
not
运算符
变量名区分大小写
只能以字母或下划线_开头
等号赋值
n = n + 1等同于n += 1
-/*以此类推
增量赋值
变量和赋值
int
long
0为false
1为true
bool
布尔
整数
float
浮点
i² = -1
复数
decimal
十进制浮点数
数字
第一个字符的索引是0
最后一个字符的索引是-1
索引运算符[ ]
切片运算符[ : ]
+拼接字符串
*n 字符串重复n次
[ ]
元素个数可以改变
元素的值可以改变
也可切片运算
( )
不可以更改
也可切片运算,结果也是元组
{key : value }
key不可变的类型,list类型对象不能做key
value任意类型
字典
缩进对齐表达代码逻辑
if语句
while循环
>>> for eachNum in range(3):
... print eachNum
...
0
1
2
接受数值,生成一个列表
range()函数
a (0)
b (1)
c (2)
同时循环索引和元素
enumerate()函数
for循环
squared = [x ** 2 for x in range(4)]
>>> for i in squared:
... print i
4
9
在一行中使用一个 for 循环将所有值放到一个列表当中
sqdEvens = [x ** 2 for x in range(8) if not x % 2]
>>>
>>> for i in sqdEvens:
16
36
挑选出符合要求的值放入列表
r读
w写
a添加
+读写
b二进制访问
未提供默认为r
access_mode
可以访问一些方法如readlines(),close()
返回一个文件对象句柄
for eachLine in fobj:
fobj.close()
实例
open()
类似于open()
file()
try之后的代码组, 就是你打算管理的代码
except 之后的代码组, 则是你处理错误的代码
raise 语句故意引发一个异常
def addMe2Me(x):
'apply + operation to argument'
return (x + x)
def 关键字及紧随其后的函数名再加上该函数需要的几个参数组成,由一个冒号(:)结束
使用小括号( )调用
在调用之前必须先定义
没有 return 语句, 就会自动返回 None 对象
只有可变对象会受此影响, 对不可变对象来说, 它的行为类似按值调用
函数内对参数的改变会影响到原始对象
>>> addMe2Me(4.25)
8.5
调用实例
调用
函数
class 关键字定义类。 可以提供一个可选的父类或者说基类; 如果没有合适的基类,那就使用 object 作为基类。class 行之后是可选的文档字符串, 静态成员定义, 及方法定义。
类
模块是一种组织形式, 它将彼此有关系的 Python 代码组织到一个个独立文件当中。
模块可以包含可执行代码, 函数和类或者这些东西的组合。
你可以从另一个模块中使用 import 语句导入这个模块来使用。
模块
dir([obj]) 显示对象的属性,如果没有提供参数, 则显示全局变量的名字
help([obj]) 以一种整齐美观的形式 显示对象的文档字符串, 如果没有提供任何参数, 则会进入交互式帮助。
int(obj) 将一个对象转换为整数
len(obj) 返回对象的长度
raw_input(str) 等待用户输入一个字符串, 可以提供一个可选的参数 str 用作提示信息。
str(obj) 将一个对象转换为字符串
type(obj) 返回对象的类型(返回值本身是一个 type 对象!)
常使用的内建函数
Python起步
注释#
if (weather_is_hot == 1) and \\
(shark_warnings == 0):
send_goto_beach_mesg_to_pager()
换行继续\\
分号; 允许你将多个语句写在同一行上
y = (x = x + 1)非法
y = x = x + 1合法
等号(=)是主要的赋值运算符
语句和语法
第一个字符必须是字母或下划线(_)
剩下的字符可以是字母和数字或下划线
大小写敏感
非关键字
标识符
and、as、if、with、None等
关键字
分支主题
内建
_xxx 不用'from module import *'导入
__xxx__系统定义名字
__xxx 类中的私有变量名
避免用下划线作为变量名的开始
下划线标识符
因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx 被看作是“私有的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。
# (1) 起始行(Unix)
# (2) 模块文档
# (3) 模块导入
# (4) 变量定义
# (5) 类定义
# (6) 函数定义
__name__ 系统变量
如果模块是被导入, __name__ 的值为模块名字
如果模块是被直接执行, __name__ 的值为 '__main__'
主程序调用 main()函数
# (7) 主程序
模块结构和布局
变量在第一次被赋值时自动声明。和其他大多数语言一样,变量只有被创建和赋值后才能被使用。
也无需类型声明
变量名会被“回收”
del 语句能够直接释放资源
内存管理
使用局部变量替换模块变量
类似 os.linesep 这样的名字需要解释器做两次查询: (1)查找 os 以确认它是一个模块,
(2)在这个模块中查找 linesep 变量。因为模块也是全局变量, 我们多消耗了系统资源。如果你在一个函数中类似这样频繁使用一个属性,我们建议你为该属性取一个本地变量别名。 变量查找速度将会快很多--在查找全局变量之前, 总是先查找本地变量。 这也是一个让你的程序跑的更快的技巧: 将经常用到的模块属性替换为一个本地引用。代码跑得更快,而也不用老是敲那么长的变量名了。
Python程序技巧
Python基础
Python 使用对象模型来存储数据。构造任何类型的值都是一个对象。
每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id()来得到。这个值可以被认为是该对象的内存地址。您极少会用到这个值,也不用太关心它究竟是什么。
对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。您可以用内建函数 type()查看 Python 对象的类型。因为在 Python 中类型也是对象(还记得我们提到 Python 是面向对象的这句话吗?),所以 type()返回的是对象而不是简单的字符串
对象表示的数据项
所有的 Python 对像都拥有三个特性:身份,类型和值
对象
数字(分为几个子类型,其中有三个是整型)整型布尔型长整型浮点型复数型字符串列表元组字典
标准类型
所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布 尔 True 或 False 值。空对象、值为零的任何数字或者 Null 对象 None 的布尔值都是 False。
and, or 和 not 都是 Python 关键字,这些运算符的优先级按从高到低 的顺序列于表 4.3. not 运算符拥有最高优先级,只比所有比较运算符低一级
布尔类型
Python 提供了 is 和 is not 运算符来测试两个变量是否指向同一个对象
>>> a = 1 >>> id(a) 8402824 >>> b = 1 >>> id(b) 8402824 >>> >>> c = 1.0 >>> id(c) 8651220 >>> d = 1.0 >>> id(d) 8651204
整数对象和 字符串对象是不可变对象,所以Python会很高效的缓存它们。这会造成我们认为Python应该创建新对象时,它却没有创建新对象的假象。
type() 接受一个对象做为参数,并返回它的类型。它的返回值是一个类型对象。
repr() 输出对 Python 比较友好, 而 str()的输出对人比较友好。虽然如此, 很多情况下这三者的输出仍然都是完全一样的。
str() 和 repr() 或反引号运算符(``) 可以方便的以字符串的方式获取对象的 内容、类型、数值属性等信息。str()函数得到的字符串可读性好, 而 repr()函数得到的字符 串通常可以用来重新获得该对象
Python 不支持方法或函数重载, 因此你必须自己保证调用的就是你想要的函数或对象。
标准类型内建函数
标量/原子类型: 数值(所有的数值类型),字符串(全部是文字)
容器类型: 列表、元组、字典
存储类型
所有数值类型
非容器类型可以直接访问
直接存取
字符串, 列表和元组
容器内的元素按从 0 开始的索引顺序访问
顺序
容纳的是哈希键-值对的集合
映射
访问模型
char、bit
指针
不支持的 类型
可变类型:列表, 字典
不可变类型:数字、字符串、元组
更新模型
Python对象
提供了标量贮存和直接访问
不可更改类型,也就是说变更数字的值会生成新的 对象
无法真正删除一个数值对象, 你仅仅是不再使用它而已。如果你 实际上想删除一个数值对象的引用, 使用 del 语句
只有两个值的整型
常规整型
整型
浮点数
Python2学习
0 条评论
回复 删除
下一页