一 入门
整数
x = 0
浮点数
y = 0.0
字符串(只读)
z = ''
字节数组
w = bytearray(n)
列表(list)
a = []
元组(只读)
a = ()
字典(dict)
b = {}
函数
def func(p1, p2): #形参名称很重要
pass
类
class a:
def __init__(self):
pass
def func(self, p):
pass
class b(a):
def __init__(self, x):
self.x = x
pass
def func(self, p):
pass
ins = a()
sub = b(7)
包机制
每一个.py文件称为一个module,module之间可以互相导入。
.py文件所在的每个目录都放一个名为_init_.py 的文件.该文件内容可以为空.
sys.path记录了Python的包路径,类型是字符串,编程中可以直接修改sys.path
异常处理
try:
except Exception as err:
finally:
二 字符串 列表 字节数组
part 1
字符串是只读的,主要有下标操作,分片操作,字符串相加。
a = 'string'
b = a[-1]
b = a[2:]
b = a[:-2]
b = a[1:-2]
s = a + b
主要相关函数:len,split,find
x = len(a)
y = a.split('r')#返回列表
z = a.find('ing')#返回下标
列表,字节数组的操作和字符串类似,可读写。
字符串转列表
l = list(a)
列表转字符串
r = ''
for x in l:r += x
更像python:
r = ''.join(l)
字符串转字节数组
b = a.encode('utf-8')
字节数组转字符串
a = b.decode('utf-8')
字符串转整数
i = int(a)
整数转字符串
a = str(i)
格式化字符串(C语言风格)
s = '%04d %s' % (i, a)
由此可见,各种数据结构相互转换中,字符串处于核心地位。
三 文件
打开文件
fd = open('path/file', 'r')
'r' 以读方式打开文件。
'w' 以写方式打开文件。如文件存在,则清空该文件,再写入新内容。如果文件不存在则创建。
'a' 以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建。
'r+' 以读写方式打开文件。
'w+' 清空文件内容,然后以读写方式打开文件。
'a+' 以读写方式打开文件,并把文件指针移到文件尾。
'b' 以二进制模式打开文件。
我常用的方式:'ab+'
希望扩平台读写文件时汉字不乱码,所以用了'ab+'模式(写入的二进制由字符串统一编码成'utf-8'得到),还要注意windows和linux的路径分隔符不同。
读所有内容
all = fd.read()
由于操作的文件都是几KB的配置文件(大量数据都会存入数据库,而不是存入文件),所以读所有内容很常用。
读固定字节
b = fd.read(n)
读每行
lines = fd.readlines()
写文件
fd.write(b)
文本模式只能写入字符串,编码格式与操作系统有关。
二进制模式只能写入字节数组。
关闭文件
fd.close()
四 多线程
方法1,调用thread模块中的start_new_thread()函数
import time
import thread
def func(p1, p2):
time.sleep(1)
thread.exit_thread()
thread.start_new_thread(func, (1,2))
方法2,写一个类继承threading.Thread
import time
import threading
class glass(threading.Thread):
def __init__(self, n):
threading.Thread.__init__(self)
self.n = n
def run(self): #Overwrite run() method
time.sleep(self.n)
thread = glass(1)
thread.start()
五 socket
服务端
HOST = ''
PORT = 9999
ADDR = (HOST, PORT)
sock = socket(AF_INET, SOCK_STREAM)
sock.bind(ADDR)
sock.listen(5)
print('waiting for connection...')
client, addr = sock.accept()
buffer = client.recv(1024)
client.send(buffer)
client.close()
sock.close()
客户端
HOST = '127.0.0.1'
PORT = 9999
ADDR = (HOST, PORT)
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(ADDR)
sock.send('111'.encode('utf-8'))
data = sock.recv(1024)
print(data)
sock.close()
六 数据库
conn = MySQLdb.connect(host='localhost', port=3306, user='root', passwd='root', db='test', charset='utf8')
cur = conn.cursor()
c = cur.execute('select * from user')
r = cur.fetchall()
print('result count ' + str(c))
print(r)
cur.execute('create database abc')
conn.select_db('abc')
cur.execute('create table test(k int, v varchar(20))')
value=[1,'1']
cur.execute('insert into test values(%s, %s)', value)
conn.commit()
cur.close()
conn.close()
七 json
字典转字符串
str(d)
字典转json
json.dumps(d, ensure_ascii=False)
注意,字典转json的结果与转字符串的结果类似,但不相同。
字符串转字典
貌似没有现成的方法
json转字典
json.loads(s)
八 串口
九 http
十 struct