list.insert(2,‘string’) 指定位置插入
list.pop(2)删除指定的值,会显示出来
del list[ 2 ] 删除特定的值,不回显
sorted( list ) list本身不变,新生成一个list
list.sort 会改变原来的list
slice( 0,2) 切片
list.insert(2,‘string’) 指定位置插入
list.pop(2)删除指定的值,会显示出来
del list[ 2 ] 删除特定的值,不回显
sorted( list ) list本身不变,新生成一个list
list.sort 会改变原来的list
slice( 0,2) 切片
字符串不可以在原处修改,列表可以修改
list.append( ) 添加
list.sort 排列
list.extend( [ 1,2,3 ] ) 与相加类似
list.pop( ) 取最后一个值,会去掉此值
建议学习2.7版本
优点:语法简洁,高可读性,开发效率高,可移植,支持自行开发或第三方模块,可调用c和c++库,可与java组建集成
缺点:速度不快(脚本)
使用场景:系统编程,用户图形接口,internet脚本,数据库编程,快速原型,数值计算和科学计算编程,游戏、图像、人工智能、XML、机器人等
object.attribute读取ob的属性attribute值
字符串方法:
大小写相关:
“string”.capitalize( ) 第一个字母大写,其余都变成小写
“string”.title( ) 每一个词的头字母大写,其余都小写
"string".upper( ) 全改为大写
"string".lower( )全改成小写
"string".swapcase( ) 大小写转换
排版相关:
S.center.(width,['char']) 原来的字符扩到指定长度,再用char填充其余空处,默认空格。类似的有S.ljust( ) / S.rjust( )
S.expandtabs( tabsize ) 更改tabs转换为空格的数量,默认为8
S.strip( [chars] ) 删除两边的指定字符(默认为空格和换行符)类似的有S.lstrip( [chars] ) / S.rstrip( [chars] )
查找相关;
S.startswith( prefix[ , start[ ,end ] ] ) / S.endswith( suffix [ ,start[ ,end] ] ) 是否 以特定字符串开头/结尾的,返回真假。例:'hello world'.startswith('hello')
S.count( sub [ , start[,end] ] ) 相应字符串在文本里的个数。例:‘hello world’.count('l')
S.find( sub [ ,start[,end] ] ) / S.rfind(sub [,end] ) 查询第一个与sub匹配的字符串位置,没找到就返回-1。例:‘helloworld'.find('l')
S.index 与find差不多,但没找到的话,返回错误
S.replace(old,new[,count]) 查找old,替换成new,count为替换相应的个数,默认全替换。例:'hello world'.replace('h','H')
格式判断:
返回的值都是真或假
S.isalpha( )是否为字母
S.isdigit( ) 是否为数字
S.isalnum( ) 是否为数字和字母
S.islower( ) 是否有字母且全小写
S.isupper( )
S.isspace( ) 是否只有空格和换行符号
S.istitle( ) 是否每个单词的第一个字母为大写
下面的只有py3开始支持
S.isdecimal( ) 是不是数字
S.isnumeric 是不是数字
S.isidentifier( ) 判断字符能否成为标识符
S.isprintable( ) 字符是否全部能打印
字符的分隔:
S.split( [sep [ ,maxsplit] ] ) /
S.rsplit( [ sep[,maxsplit] ] ) 从左或右以sep分隔,最多分隔max次,默认无限次。
例:'helloworldhello'.split(' ',1)
S.splitlines( [keepends]) 以\n 或者\r 或者 \r\n 分隔
例:'hello\nworld'.splitlines( )
S.partition(sep) / S.rpartition(sep) 从左或右找第一个sep分隔,sep左边的,sep ,sep 右边的
'http;//baidu.com'.partition('://')
其他:
S.join( )--->'-'.join('abc')--->'a-b-c'
S.maketrans( x [,y[,z] ] ) / S.translate(map) 两者在py2和3中完全不同
例:map1={97:'A'}
'a'.translate(map1)--->
S.format 字符串格式化方法
字典增加一个键,在列表里的位置是随机的吗?
说话有点不清晰
Python的函数-参数
• 参数简介
• 参数传递
• 特定的参数匹配模型
• 特殊参数的传递
• 模拟Python3.x的print函数
参数简介
参数:argement 或parameter,对象作为输入值传递给函数的方式。
参数传递时的简要关键点:
• 参数的传递是通过自动将对象赋值给本地变量名来实现。
• 在函数内部的参数名的赋值不会影响调用者。
• 改变函数的可变对象参数的值也许会对调用者有影响。
传递参数为可变对象与不可变对象时:
不可变对象“通过值”进行传递 - 数值、字符串等。
可变对象是通过“指针”进行传递 - 列表、字典等。
参数传递是有特定匹配规则的:
• 位置:从左到右
• 关键字参数:通过参数名进行匹配
• 默认参数:为没有传入值的参数定义参数值
• 可变参数:收集任意多基于位置或关键字的参数 - 参数以*或**开头
• 可变参数解包:传递任意多的基于位置或关键字的参数 - 传递值以*或**开头
• Keyword-only参数:参数必须按照名称传递(Python3.x)
注:传递参数时,请注意顺序: 非关键字参数->关键字参数->字典参数
Python的函数-作用域
• Python作用域基础
• 作用域法则
• global语句
• 作用域与嵌套语句
• nonlocal语句
作用域针对的是变量。在使用同一个变量名时,会出现作用域问题。
• 一个def内定义的变量名能够被def内部使用。不能在函数外部引用这个变量名。
• def内的变量名与def外的变量名并不冲突。在def内赋值的与def外赋值的相同变量名是不同的变量。
变量名有如下三种不同作用域:
1. 全局:在def外定义的变量名是全局变量
2. 本地:在def内部定义的叫做本地变量
3. 其它:嵌套def时,各自的变量也是独立的。
def myfunc1():
x = 1
def myfunc2():
x = 2
作用域法则
内嵌的模块是全局作用域
全局作用域的作用范围仅限于单个文件
每次的函数的调用都创建了一个新的本地作用域
赋值的变量名除非声明全局变量或非本地变量(Python3.x有非本地变量说法),否则均为本地变量。
所有其它的变量名都可以归纳为本地、全局或者内置。
变量名使用时,查找顺序:LEGB
L:本地变量名 - 在本地是否使用此变量名赋值过。
E:上一层结构中def或lambda的本地变量名 - 上一层是否使用此变量名赋值过。
G:全局变量名 - 在整个文件里是否对变量名赋值过。
B:内置变量名 - Python内部是否存在此变量名。
要是都找不到相应变量名,就会报错。
global语句
在函数内,想改变全局变量,可以使用global语句来定义此变量为全局变量。
工厂函数为:根据要求的对象,一个能够记住嵌套作用域的变量值的函数。这种功能,使用类可以更好的实现,但使用函数也能简单现。
Python的函数-函数基础
• 函数简介
• 函数相关的语句和表达式
• 编写函数
• def语句
• Python函数中的多态
• 本地变量
函数是将一些语句集合在一起的部件,它们能够不止一次地在程序中运行。函数还能计算出一个返回值,并能够改变作为函数输入的参数,而这些参数在代码运行时也许没次都不相同。
总结使用函数的意义:
最大化代码重用和最小化代码冗余。
流程的分解。
函数相关语句和表达式:
calls:调用函数
def:定义函数
编写函数
def是可执行的代码。在Python里,只有def执行之后,才会生成相应的函数。要是def没有执行,相应的函数就不会生成。def语句在if、while语句甚至是其它def语句里也是合法的。
def创建了一个对象,并将其赋值给一个变量。def语句是生成一个函数对象,并将其赋值给函数名变量。其实与赋值相同。
lambda创建一个函数对象发送给调用者。因此,也可使用lambda表达式创建函数,这一功能允许我们把函数定义内联到语法上一条def语句不能工作的地方。
return将一个结果对象返回给调用者。这个返回值成为函数调用的结果。
yield向调用者返回一个结果对象,但是记住它离开的地方。
global声明了一个模块级的变量并被赋值。在默认情况下,所有在函数内被赋值
的变量,是在这个函数里的本地变量,并仅在函数函数运行过程中存在。为分配一个可以在整个模块中都可以使用的变量名,函数需要在global语句中列举出来。
nonlocal声明了将要赋值的一个封闭的函数变量。Python3.x里才有的语句。函数里嵌套函数时,都使用相同变量名时,只想继承上一个函数里的相同变量时可以使用。
函数是通过赋值(对象引用)传递的。参数是通过赋值传递的。但是,在Python中赋值就是对象引用。因此当参数被传递的对象为可变对象(列表、字典等),当对参数进行变更时,会影响到被传递进来的变量(变量所引用的对象)。
参数、返回值以及变量并不是声明。这个与其它变量相同,不需要提前声明,
或者说是没有任何类型。
Python的语句与语法-文档
• Python文档资源
Ø #注释
Ø dir函数
Ø 文档字符串:__doc__
Ø PyDoc: help函数
Ø 其它:
PyDoc: HTML报表
标准手册
网站资源
出版的书籍
Python的语句与语法-迭代器和解析
• 迭代器:初探
• 文件迭代器
• 手动迭代
• 其它内置类型迭代器
• 列表解析:初探
• 其它迭代环境
• Python3.x中新的迭代环境
• range
• map、zip、filter
• 多个迭代器vs单个迭代器
• 字典试图迭代器
文件迭代器
回忆一下之前章节,文件访问方式有如下:
<file>.read(): 一次性读取全部内容。
<file>.readline(): 一次读取一行。
<file>.readlines(): 生成列表,每一行是每个元素。
<file>.__next__(): 跟readline()差不多,但读取完之后报错。
__next__()报错,为StopIteration。在Python中任何这类对象都认为是可迭代的。
在Python里迭代工具(比如for)会调用__next__()来获取数据,并以StopIteration来确认何时离开。
注: 尽量不要使用readlines()函数,因为这个会一次性的把所有内容读取到内存里
(转换为列表),运行速度会比较慢。
最好使用readline或者迭代文件方法。
Python的语句与语法-while语句与for语句
• while语句简介
• while语句例子
• break,continue语句
• pass语句
• else语句
• for语句简介
• for语句使用
while语句的一般格式:
while <test1>:
<statement1>
else:
<statement2>
只要测试语句为真,会一直循环<statement1> 。当test1为假的时候会运行else语句里的内容。
从这里,退出循环的方法有:
1. 在<statement1>里的语句更改<test1>的结果为False
2. 在<statement1>里的语句里增加break语句来跳出循环
3. 在<statement1>里的语句里增加exit()来退出Python
在这里第三种方法是退出整个Python程序。
break语句是用来退出最近所在的for语句或while语句。
continue语句是用来跳到最近所在的for语句或者while语句的结尾。
for语句在Python里是一个通用的序列迭代器:可以遍历任何有序的序列对象内的元素。可用于字符串、列表、元祖、其它内置可迭代对象以及之后我们能够通过类所创建的新对象。
Python的语句与语法-if
• if语句简介
• 真值测试
• 逻辑运算符 - 特殊应用
• if/else三元表达式
• Python语法规则
在Python里,if语句是选取要执行的操作。这个是在Python里主要的选择工具,代表Python程序所拥有的大多数逻辑。在子语句里可以使用任何语句,包涵if语句在内。
在if语句里的<test>位置里的就是判断语句。结果为True,就能进入子语句。
判断语句包涵:
• 比较运算符:==,!=,>,<,>=,<=
• 逻辑运算符:and,or,not
• 成员运算符:in, not in
• 身份运算符:is, is not
• 其它:对象为空,0,None等的时候是False,其它为True。
Python 语法规则
一般语句是逐个运行的
--复合语句,函数等按控制方式运行。
块和语句的边界会自动检测
--一般行尾就是结束,没有特殊结束符号。
复合语句=首行+“:”+缩紧语句
--缩紧语句必须统一缩紧空格数。
空白行、空格以及注释通常会被忽略。
--非符合语句里,最前面不能添加空格
文档字符串会被忽略,但会保存并由工具显示。
Python的语句与语法-打印
• 打印简介
• Python3.x的print函数
• Python2.x的print语句
• 打印流重定向
• 版本统一的打印
在Python里,打印语句是与文件类型操作相似。在文件操作里,是使用write 方法向打开的文件写入内容。打印操作是往系统的标准输出(stdout)流来实现显示在终端上。
标准输出流:通常叫stdout,是发送一个程序的文本输出的默认的地方。与标准输入流和错误流,是在脚本启动时所创建的3种数据连接流中的一种。
打印操作在Python3.x和Python2.x里有很大区别:
Python3.x:
打印是内置函数,用关键字参数来表示特定模式。
print不是保留字段,可以重新赋值。
Python2.x:
打印是语句,拥有自己的特定语句。
print是保留字段,不能重新赋值
从Python3.0开始print变成了函数,但返回值为None。print函数的格式如下:
print([object,...][, sep=' '][, end='\'][, file=sys.stdout])
在这里,object是要打印的内容。object可以是任意对象。默认是没有。
sep是两个object之间隔开的字符。默认是一个空格。
end是结尾,默认为换行。
file为输出目标,默认为标准输出流。
Python的语句与语法-赋值与表达式
• 赋值语句简介
• 赋值语句形式
• 序列赋值
• 多目标赋值
• 增强赋值语句
• 变量命名规则
• 表达式语句
在Python里,赋值语句与其它语言有所不同,它不是直接把相应的值赋给变量,而是把对象的地址赋给变量,让变量可以找到相应的对象,这个叫做对象的引用。
变量名可以是大小写字母,数字和下划线“_”。但只能以大小写字母或下划线开头,
不能以数字开头。变量名是区分大小写的。保留字符是不能使用的。
表达式,就是等号右边的部分。表达式本身不会存储。
常见表达式语句:
Add(1, 2) 函数调用
MyClass.Add(1,2) 方法调用
Text 打印变量(交互模式)
print('My text') 打印操作
原处修改(或输出等)的表达式语句返回值是None。
Python
标识符:标识符有数字、字母、下划线组成,但不能以数字开头。
Python不能使用{}来表示符合语句的开始和结束,所以缩进很重要。
Python使用多行语句可以用反斜杠(\)来把一行语句写成多行
Python用#来注释
在Python里整数可以输入或输出成二进制,八进制或者十六进制数。
二进制数表示方式为0b或者0B开头。例如:0b10110010,0B11001001
八进制数表述方式为0o或者0O开头。例如:0o632765,0O223174
十六进制数表述方式为0x或者0X开头。例如:0xff,0X3A,0xAC,0Xb7
需要把整数输出成非十进制数的时候,需要使用一下函数:
bin(i), oct(i), hex(i) 在这里i是十进制数字,输出的是文本形式。bin函数是二进制,oct八进制,hex十六进制
我们需要把一个非十进制数的文本转化为整数:
int(str,base) 在这里,str是文本形式的数字,base为2,8,16 数字。各自代表
二进制,八进制,十六进制。
注:Python提供从2进制到36进制数的输入。int('z',36)将36进制转化成十进制
repr(1.0/6.0)回显1/6的结果
Python的语句与语法-语句简介
• Python的语句
• Python的语句格式
• Python的缩进
• 对用户输入数据的判断
• 处理错误
在Python里是不使用{}或者别的符号来限制语句的开始和结尾的。
一个语句的开始(除了复合语句),就是开头,换行就是结束。
在开头,不能随意增加空格。
关于严格控制,在复合语句里也是同样的。当你使用缩进时,必须一致。
复合语句,有单行写法和多行写法。从冒号后面就是复合语句的开始。
单行:复合语句里只有一行时,可使用单行写法。
但是,复合语句所包涵的语句不是单行时,需要使用对其的缩进来表示复合语句。
在Python里,复合语句是使用严格的缩进对齐来表示同一层次。
缩进可使用1个以上的空格或者制表符(tab),具体数量没有严格限制,但必须对齐。
当我们所写的语句有bug,会出现一些错误,程序会中断运行。但我们在这个时候,不想让程序冲断但还是需要提示错误的时候可以使用try。
Python的类型与运算-其他
• 对象分类
• set - 集合
• bytearray类型
• 对象灵活性
• 引用与复制
• 相等性比较
• Python里的真假
• 无限循环
集合的元素可以是不可变对象:数字、字符串、元祖、frozenset。
集合里的元素是不重复的。
空集合:
>>> _set = set()
>>> type(_set)
<class 'set'>
Python 3.x 里,空的时候是set(),有元素跟字典差不多,但不是键:值方式。
>>> _set
set()
>>> _set = {'a'}
>>> _set
{'a'}
Python的类型与运算-文件(四)
因为w方式对以存在的文件会清楚后写入,但有的时候我们不想覆盖原有的
文件,这个时候我们可以使用如下方式:
>>> if not os.path.exists('somefile'):
... with open('somefile', 'wt') as f:
... f.write('Hello\n')
... else:
... print('File already exists!')
...
>>> if not os.path.exists('somefile'):
... with open('somefile', 'wt') as f:
... f.write('Hello\n')
... else:
... print('File already exists!')
...
File already exists!
这里我们也有别的方法可以用来判断是否文件存在,不存在时写入(此方法
紧在Python3.x可以使用):
>>> with open('somefile2','xt') as f:
... f.write('Hello\n')
...
6 >>> with open('somefile2','xt') as f:
... f.write('Hello\n')
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'somefile2'
当我们需要判断是文件,还是目录的时候,可以引用os.path模块。