“walk beside you ”
前言
事出总是突然的,而理由则是后来加上去的。 —— 佩恩
正文
Python作为自己第二开发语言,时常会有一些语法记不起来(还是不经常使用。。。。)。这里记录下基础语法。。。
基础语法
编码
默认情况下,Python3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:
# -*- coding: utf-8 -*-
注释
-
单行注释
注释 -
多行注释
'''
注释
注释
'''
或
"""
注释
注释
"""
数字(Number)类型
- int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
- bool (布尔), 如 True。
- float (浮点数), 如 1.23、3E-2
- complex (复数), 如 1 + 2j、 1.1 + 2.2j
字符串(String)
-
python中单引号和双引号使用完全相同。
"123" '123' -
使用三引号(‘'’或””“)可以指定一个多行字符串。
-
转义符 ‘'
-
反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r”this is a line with \n” 则\n会显示,并不是换行。
-
按字面意义级联字符串,如”this “ “is “ “string”会被自动转换为this is string。
-
字符串可以用 + 运算符连接在一起,用 * 运算符重复。
-
Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
-
Python中的字符串不能改变。
-
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
-
字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
#!/usr/bin/python3
str='0123456'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔两个的字符
print(str * 2) # 输出字符串两次
print(str + '789') # 连接字符串
用户输入
input
input("\n\n按下 enter 键后退出。")
print 输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=”“:
print( 1 )
print( 2 )
print( 3, end=" " )
print( 4, end=" " )
列表
索引
列表索引从 0 开始,第二个索引是 1,依此类推。 索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推。
list = [1,2,3,4,5]
print( list[1] )
print( list[2] )
print( list[-1] )
print( list[-2] )
输出
2
3
5
4
使用方括号 [] 的形式截取字符
list = [1,2,3,4,5]
print( list[1:3] )
输出
[2,3,4]
更新列表
可以对列表的数据项进行修改或更新,你也可以使用 append() 方法来添加列表项
list = [1,2,3,4]
list[2] = 222
list.append(5)
删除列表元素
del list[1]
函数&方法
- 函数
- len(list) 列表元素个数
- max(list) 返回列表元素最大值
- min(list) 返回列表元素最小值
- list(seq) 将元组转换为列表
- 方法
- list.append(obj) 在列表末尾添加新的对象
- list.count(obj) 统计某个元素在列表中出现的次数
- list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
- list.insert(index, obj) 将对象插入列表
- list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
- list.remove(obj) 移除列表中某个值的第一个匹配项
- list.reverse() 反向列表中元素
- list.sort( key=None, reverse=False) 对原列表进行排序
- list.clear() 清空列表
- list.copy() 复制列表
元组
元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号 ( ),列表使用方括号 [ ]
字典
字典是另一种可变容器模型,且可存储任意类型对象。好比 Java 的Map 字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中。 键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
函数&方法
- 函数
-
len(dict) 计算字典元素个数,即键的总数
-
str(dict) 输出字典,以可打印的字符串表示
-
type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型
-
- 方法
- radiansdict.clear() 删除字典内所有元素
- radiansdict.copy() 返回一个字典的浅复制
- radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
- radiansdict.get(key, default=None) 返回指定键的值,如果键不在字典中返回 default 设置的默认值
- key in dict 如果键在字典dict里返回true,否则返回false
- radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组
- radiansdict.keys() 返回一个迭代器,可以使用 list() 来转换为列表
- radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
- radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里
- radiansdict.values() 返回一个迭代器,可以使用 list() 来转换为列表
- pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
- popitem() 随机返回并删除字典中的最后一对键和值
集合
集合(set)是一个无序的不重复元素序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
方法
- add() 为集合添加元素
- clear() 移除集合中的所有元素
- copy() 拷贝一个集合
- difference() 返回多个集合的差集
- difference_update() 移除集合中的元素,该元素在指定的集合也存在。
- discard() 删除集合中指定的元素
- intersection() 返回集合的交集
- intersection_update() 返回集合的交集。
- isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
- issubset() 判断指定集合是否为该方法参数集合的子集。
- issuperset() 判断该方法的参数集合是否为指定集合的子集
- pop() 随机移除元素
- remove() 移除指定元素
- symmetric_difference() 返回两个集合中不重复的元素集合。
- symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
- union() 返回两个集合的并集
- update() 给集合添加元素
迭代器与生成器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 创建迭代器 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
>>> list=[1,2,3,4]
>>> it = iter(list) # 创建迭代器对象
>>> print (next(it)) # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>
迭代器对象可以使用常规for语句进行遍历:
#!/usr/bin/python3
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() __iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。 __next__() 方法会返回下一个迭代器对象。
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
StopIteration
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。 在 20 次迭代后停止执行:
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。 调用一个生成器函数,返回的是一个迭代器对象。
以下实例使用 yield 实现斐波那契数列:
#!/usr/bin/python3
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
0 1 1 2 3 5 8 13 21 34 55
File
open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError 注意: 使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode) open(file, mode='r')
完整的语法格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
- file: 必需,文件路径(相对或者绝对路径)。
- mode: 可选,文件打开模式
- buffering: 设置缓冲
- encoding: 一般使用utf8
- errors: 报错级别
- newline: 区分换行符
- closefd: 传入的file参数类型
- opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
mode 参数有:
- t: 文本模式 (默认)。
- x: 写模式,新建一个文件,如果该文件已存在则会报错。
- b: 二进制模式。
- +: 打开一个文件进行更新(可读可写)。
- U: 通用换行模式(Python 3 不支持)。
- r: 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
- rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
- r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
- rb+: 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
- w: 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
- wb: 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
- w+: 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
- wb+: 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
- a: 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
- ab: 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
- a+: 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
- ab+: 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
file 对象
-
file.close() 关闭文件。关闭后文件不能再进行读写操作。
-
file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
-
file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
-
file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。
-
file.next() Python 3 中的 File 对象不支持 next() 方法。返回文件下一行。
-
file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。
-
file.readline([size]) 读取整行,包括 “\n” 字符。
-
file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
-
file.seek(offset[, whence]) 移动文件读取指针到指定位置
-
file.tell() 返回文件当前位置。
-
file.truncate([size]) 从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。
-
file.write(str) 将字符串写入文件,返回的是写入的字符长度。
-
file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
OS 模块
- os.access(path, mode) 检验权限模式
- os.chdir(path) 改变当前工作目录
- os.chflags(path, flags) 设置路径的标记为数字标记。
- os.chmod(path, mode) 更改权限
- os.chown(path, uid, gid) 更改文件所有者
- os.chroot(path) 改变当前进程的根目录
- os.close(fd) 关闭文件描述符 fd
- os.closerange(fd_low, fd_high) 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
- os.dup(fd) 复制文件描述符 fd
- os.dup2(fd, fd2) 将一个文件描述符 fd 复制到另一个 fd2
- os.fchdir(fd) 通过文件描述符改变当前工作目录
- os.fchmod(fd, mode) 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
- os.fchown(fd, uid, gid) 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
- os.fdatasync(fd) 强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
- os.fdopen(fd[, mode[, bufsize]]) 通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
- os.fpathconf(fd, name) 返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
- os.fstat(fd) 返回文件描述符fd的状态,像stat()。
- os.fstatvfs(fd) 返回包含文件描述符fd的文件的文件系统的信息,Python 3.3 相等于 statvfs()。
- os.fsync(fd) 强制将文件描述符为fd的文件写入硬盘。
- os.ftruncate(fd, length) 裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
- os.getcwd() 返回当前工作目录
- os.getcwdb() 返回一个当前工作目录的Unicode对象
- os.isatty(fd) 如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
- os.lchflags(path, flags) 设置路径的标记为数字标记,类似 chflags(),但是没有软链接
- os.lchmod(path, mode) 修改连接文件权限
- os.lchown(path, uid, gid) 更改文件所有者,类似 chown,但是不追踪链接。
- os.link(src, dst) 创建硬链接,名为参数 dst,指向参数 src
- os.listdir(path) 返回path指定的文件夹包含的文件或文件夹的名字的列表。
- os.lseek(fd, pos, how) 设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算;. os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效 30. os.lstat(path) 像stat(),但是没有软链接
- os.major(device) 从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
- os.makedev(major, minor) 以major和minor设备号组成一个原始设备号
- os.makedirs(path[, mode]) 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
- os.minor(device) 从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
- os.mkdir(path[, mode]) 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
- os.mkfifo(path[, mode]) 创建命名管道,mode 为数字,默认为 0666 (八进制)
- os.mknod(filename[, mode=0600, device]) 创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
- os.open(file, flags[, mode]) 打开一个文件,并且设置需要的打开选项,mode参数是可选的
- os.openpty() 打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
- os.pathconf(path, name) 返回相关文件的系统配置信息。
- os.pipe() 创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
- os.popen(command[, mode[, bufsize]]) 从一个 command 打开一个管道
- os.read(fd, n) 从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
- os.readlink(path) 返回软链接所指向的文件
- os.remove(path) 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
- os.removedirs(path) 递归删除目录。
- os.rename(src, dst) 重命名文件或目录,从 src 到 dst
- os.renames(old, new) 递归地对目录进行更名,也可以对文件进行更名。
- os.rmdir(path) 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
- os.stat(path) 获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
- os.stat_float_times([newvalue]) 决定stat_result是否以float对象显示时间戳
- os.statvfs(path) 获取指定路径的文件系统统计信息
- os.symlink(src, dst) 创建一个软链接
- os.tcgetpgrp(fd) 返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
- os.tcsetpgrp(fd, pg) 设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
- os.tempnam([dir[, prefix]]) Python3 中已删除。返回唯一的路径名用于创建临时文件。
- os.tmpfile() Python3 中已删除。返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
- os.tmpnam() Python3 中已删除。为创建一个临时文件返回一个唯一的路径
- os.ttyname(fd) 返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
- os.unlink(path) 删除文件路径
- os.utime(path, times) 返回指定的path文件的访问和修改的时间。
- os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 输出在文件夹中的文件名通过在树中游走,向上或者向下。
- os.write(fd, str) 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
- os.path 模块 获取文件的属性信息。
- os.pardir() 获取当前目录的父目录,以字符串形式显示目录名。