缕一缕之前的python 3语法细节,很多常用的基本的就不写了~~
列表方法
- append
- count
- extend
- index
- insert
- pop
- remove (移除第一个匹配)
- reverse (改变原列表,不返回值)
- sort sorted 参数key
元组
不可变
tuple([1,2,3]) #(1,2,3)
字符串
ASCII转换
# Get the ASCII number of a character
number = ord(char)
# Get the character given by an ASCII number
char = chr(number)
格式化
格式化符号
说明
%c
转换成字符(ASCII 码值,或者长度为一的字符串)
%r
优先用repr()函数进行字符串转换
%s
优先用str()函数进行字符串转换
%d / %i
转成有符号十进制数
%u
转成无符号十进制数
%o
转成无符号八进制数
%x / %X
转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)
%e / %E
转成科学计数法(e / E控制输出e / E)
%f / %F
转成浮点数(小数部分自然截断)
%g / %G
%e和%f / %E和%F 的简写
%%
输出% (格式化字符串里面包括百分号,那么必须使用%%)
补充说明
string = "Hello\tWill\n"
print("%s" %string)
print("%r" %string)
输出:
Hello Will
‘Hello\tWill\n’
这里的差异是str()和repr()两个内建函数之间的差异:
str()得到的字符串是面向用户的,具有较好的可读性
repr()得到的字符串是面向机器的
通常(不是所有)repr()得到的效果是:obj == eval(repr(obj))
字符串方法
- find
- join
- lower
- replace
- split
- strip(去掉两端空格)
- translate
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
str = "this is string example....wow!!!"
print (str.translate(trantab))
#输出:th3s 3s str3ng 2x1mpl2....w4w!!!
字典
Python字典包含了以下内置函数:
len(dict)
计算字典元素个数,即键的总数。
dict = {‘Name’: ‘Runoob’, ‘Age’: 7, ‘Class’: ‘First’}
len(dict)
str(dict)
输出字典,以可打印的字符串表示。
dict = {‘Name’: ‘Runoob’, ‘Age’: 7, ‘Class’: ‘First’}
str(dict)
“{‘Name’: ‘Runoob’, ‘Class’: ‘First’, ‘Age’: 7}”
type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。
dict = {‘Name’: ‘Runoob’, ‘Age’: 7, ‘Class’: ‘First’}
type(dict)
迭代器
迭代器有两个基本的方法:iter() 和 next()。
list=[1,2,3,4]
it=iter(list)
for x in it:
print(x,end=' ')
用next:
import sys # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
生成器
生成器是可以迭代的,但是你可以读取它一次,因为它并不把所有的值放在内存中,它是实时地生成数据:
mygenerator = (x*x for x in range(3))
for i in mygenerator:
print(i)
1中括号变成了小括号
2不可以再计算第二次
装饰器
面向对象
继承、多态
init
slots
@property
Python内置的@property装饰器就是负责把一个方法变成属性调用的
class Student(object):
@property
def birth(self):
return self._birth
@birth.setter
def birth(self, value):
self._birth = value
@property
def age(self):
return 2015 - self._birth
str与repr
str()返回用户看到的字符串,而repr()返回程序开发者看到的字符串,也就是说,repr()是为调试服务的。
class Student(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student object (name=%s)' % self.name
__repr__ = __str__
iter
如果一个类想被用于for … in循环,类似list或tuple那样,就必须实现一个iter()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。
class Fib(object):
def __init__(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b
def __iter__(self):
return self # 实例本身就是迭代对象,故返回自己
def __next__(self):
self.a, self.b = self.b, self.a + self.b # 计算下一个值
if self.a > 100000: # 退出循环的条件
raise StopIteration();
return self.a # 返回下一个值
getitem
表现得像list那样按照下标取出元素,需要实现getitem()方法:
class Fib(object):
def __getitem__(self, n):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
文件读写
读文件:
f = open('/Users/michael/test.txt', 'r')
f.read() #read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示
f.close()
可能会IOError
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
上述方法过于繁琐:
with open('/path/to/file', 'r') as f:
print(f.read())
read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉
要读取二进制文件,比如图片、视频等等,用’rb’模式打开文件即可。
处理非UTF-8编码的字符,采用encodeing;处理非法编码字符,errors
f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')