1.函数与内置函数
def func(a=1, b=2, l=[]):
l.append(a+b)print(l)
func(1,2)
func(3,4,[])
func(5,6)#结果:#[3]#[7]#[3, 11]
filter:
lst = filter(lambda n:n%3 == 1,range(10))print(len(list(lst)))print(len(list(lst)))#结果:#3#0#filter返回的是迭代对象, 这个迭代器只能迭代一次(list(lst)),迭代完成就完了. 第二次(list(lst)),执行返回的是空.#但如果你把结果做为list放到内存里, 就没有这个问题了,只是如果list很大的话,内存占用多,效率会下降,好的做是把这些操作串在一起, 一次完成.
2.迭代器,生成器与装饰器
defGenerator():
value= yield 1
yieldvalue
gen=Generator()print(gen.send(1))#结果:#报错:TypeError: can’t send non-None value to a just-started generator#解决方法:第一个用next接收,接下来再用send
v = [lambda 😡 for x in range(10)]print(v)#print(v[0])#print(v[0]())
v = (lambda 😡 for x in range(10))print(v)for i in range(10):print(v.__next__()())print(v[0])#最后一个print报错,TypeError: ‘generator’ object is not subscriptable.#原因:第二个生成的v实际上是生成器(此处要注意生成器的两种生成手段,一个是如此生成,另一个是定义出来的用yield挂起值),用v.__next__导出的是函数,此时调用发现从0到9依次输出.而生成器怎么可能像列表那样操作呢?#PS:生成器两种写法:#1.只要把一个列表生成式的[]改成(),就创建了一个generator#2.如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
装饰器的典型错误:
flag =Truedefwrapper(func):def inner(*args, **kwargs):ifflag:
ret= func(*args, **kwargs)returnretreturninner
@wrapperdefwahaha():print(‘wahaha’)returnTrue
flag=False
ret=wahaha()print(ret)#输出结果是None,你能想到么?因为里面关了,所以直接不走了,输出none.并不是像想象中的走主函数的语句块,不然装饰器意义何在呢?就是要在装饰器里面调用的呀!
3.正则表达式与re模块
demo1:importre
ret= re.search(r'(\w+)’,r’
qqxing’)print(ret.group())
demo2:importre
ret= re.search(r'(\w+)’,r’
qqxing’)print(ret.group())#demo1和demo2错误相同.#AttributeError: ‘NoneType’ object has no attribute ‘group’#解决方案:demo1应该是\w+ ; demo2应该是\\\
demo3:importre
ret= re.search(r’\w+)>(?P\w+)’,r’qqxing’)print(ret.group(”))#IndexError: no such group#解决方案:去掉<>
demo4:
import re
ret = re.search(‘\w+)>(\w+))>’,r’
wahaha’)
print(ret.group())
#sre_constants.error: unbalanced parenthesis at position 26
#解决方案:第一个前面加个r,即r’\w+)>.*?’
4.面对对象
classGoods:def __init__(self,name,price,number):
self.__name =name
self.price=price
self.number=numberdefpay(self):print(self.__name)print(self.price)def __add__thing(self):print(‘ok’)
apple= Goods(‘apple’,5,10)print(apple.price)print(apple.number)#报错!!!print(apple.__name)#apple.__name调用不出来#AttributeError: ‘Goods’ object has no attribute ‘__name’
print(apple.__dict__)print(apple._Goods__name)#_类名__属性名才能调用出来
apple.pay()#报错!!! apple.__add__thing#AttributeError: ‘Goods’ object has no attribute ‘__add__thing’
print(apple._Goods__add__thing)#类方法调用情况>
apple._Goods__add__thing()#正常输出
5.异常
#demo1:
with open(‘course_st_info’,’rb’)as f:print(pickle.load(f))#由于之前没有该文件,所以报错.#报错内容:EOFError: Ran out of input#修正结果
try:
with open(‘course_st_info’,’rb’)as f:print(pickle.load(f))exceptEOFError:pass
#demo2:
while 1:
try:
with open(‘course_all_info’, ‘ab’)as f:
pickle.load(f)
except EOFError:
break
#报错内容:io.UnsupportedOperation: read
#原因:读取格式不对
#解决方案:将ab改为rb.
6. 网络编程
#server
importsocket
sk=socket.socket()
sk.bind((‘127.0.0.1’,9001))while 1:
conn,addr=sk.accept()while 1:
username= ‘smith’password= ‘123’usn= conn.recv(1024).decode(‘utf8’)
psw= conn.recv(1024).decode(‘utf8’)if usn ==username and psw ==password:
msg= ‘登录成功’
else:
msg= ‘登录失败’conn.send(msg.encode(‘utf8’))
conn.close()
sk.close()#报错:OSError: [WinError 10022] 提供了一个无效的参数。#在sk.bind((‘127.0.0.1’,9001))下面写sk.listen()#当缺少监听的时候接收本来就是不可能的事情
#client
importsocket
sk=socket.socket()
sk.connect(‘127.0.0.1’,9001)while 1:
usn1= input(‘请输入账号:’).strip()
psw1= input(‘请输入密码:’).strip()
sk.send(usn1.encode(‘utf8’))
sk.send(psw1.encode(‘utf8’))
msg1= sk.recv(1024).decode(‘utf8’)print(msg1)if ‘成功’ in msg1:breaksk.close()#报错:TypeError: connect() takes exactly one argument (2 given)#这种错误一般是sk.connect处.#sk.connect后面应该跟元组,所以是sk.connect((‘127.0.0.1’,9001))
importsocket
sk=socket.socket(socket.SOCK_DGRAM)
server_addr= (‘127.0.0.1’, 9001)while 1:
content= input(‘>>>’)
sk.sendto(content.encode(‘utf8’), server_addr)
msg, _= sk.recvfrom(1024)print(msg.decode(‘utf8’))
sk.close()#OSError: [WinError 10057] 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。#原因:sk = socket.socket(type = socket.SOCK_DGRAM)
#server:
importjsonimportsocketimporthashlibimportstructdefget_sha1(username,password):
sha1= hashlib.sha1(username.encode(‘utf8’))
sha1.update(password.encode(‘utf8’))returnsha1.hexdigest()defget_userinfo(filename_userinfo):
with open(filename_userinfo, encoding=’utf8′) as f:for line inf.readlines():
user,pwd= line.strip().split(‘|’)yielduser,pwd
sk=socket.socket()
sk.bind((‘127.0.0.1’,9001))
sk.listen()
conn,addr=sk.accept()
flag= 1
whileflag:
num= conn.recv(4)
num= struct.unpack(‘i’, num)[0]
bytes_dic1=conn.recv(num)
str_dic1= bytes_dic1.decode(‘utf8’)
dic1=json.loads(str_dic1)
dic1[‘password’] = get_sha1(dic1[‘username’], dic1[‘password’])for user,pwd inread:if dic1[‘username’] == user and dic1[‘password’] ==pwd:
bytes_msg= ‘登录成功’.encode(‘utf8’)
struct_len= struct.pack(‘i’,len(bytes_msg))
conn.send(struct_len)
conn.send(bytes_msg)
flag=0break
else:
flag+= 1
if flag == 4:
bytes_msg= ‘登录失败,请明天再试’.encode(‘utf8’)
struct_len= struct.pack(‘i’, len(bytes_msg))
conn.send(struct_len)
conn.send(bytes_msg)
conn.close()
bytes_msg= ‘登录失败,请明天再试’.encode(‘utf8’)
struct_len= struct.pack(‘i’, len(bytes_msg))
conn.send(struct_len)
conn.send(bytes_msg)
conn.close()
sk.close()#client:
importjsonimportsocketimporthashlibimportstructdefget_md5(username, password):
md5= hashlib.md5(username.encode(‘utf8’))
md5.update(password.encode(‘utf8’))returnmd5.hexdigest()for i in range(3):
username= input(‘用户名:’).strip()
password= input(‘密 码:’).strip()
sk=socket.socket()
sk.connect((‘127.0.0.1’, 9001))
password=get_md5(username, password)
dic1= {‘username’: username, ‘password’: password}
str_dic1=json.dumps(dic1)
bytes_dic1= str_dic1.encode(‘utf8’)
bytes_len= struct.pack(‘i’, len(bytes_dic1))
sk.send(bytes_len)
sk.send(bytes_dic1)
num= sk.recv(4)
num= struct.unpack(‘i’,num)[0]
bytes_msg=sk.recv(num)print(bytes_msg.decode(‘utf8’))
sk.close()#报错:num = struct.unpack(‘i’, num)[0]#struct.error: unpack requires a buffer of 4 bytes#原因:经查看是循环时候报错,由此推出是因为client端未循环输入username和password的问题.
#报错:非套接字OSError: [WinError 10038] 在一个非套接字上尝试了一个操作。
#原因:查看是否进行了conn.close()但还是在进行连接.
7.MySQL
ERROR 1054(42S22):Unknown column ‘smith’ in ‘field list’
解决方案:把变量加上引号变为字符串即可.
8.Django
报错: ‘Did you install mysqlclient or MySQL-python?’ %e
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named’MySQLdb’.
Did you install mysqlclientor MySQL-python?
解决方案:忘配置与settings同级的__init__的文件了.写如下:
importpymysql
pymysql.install_as_MySQLdb()
9.通用
9.1 编码问题
table1 = pd.read_excel(r”C:\Users\Administrator\Desktop\数据1.xls”)
table2 = pd.read_excel(r”C:\Users\Administrator\Desktop\trans.xls”)
(unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape
解决方法:记得在路径处加r. 避免转义.