1、用r表示原样输出 r“c:\qq\22”
2、类型转换,有int,str,float,判断变量的类型用type(a)或者isinstance(a,str)如果变量a是str类型就会返回真,否则返回false
3、向下取整的除法用//,eg:3.0//2=1.0 10//8=1
不舍弃小数的除法用/ ,eg: 10/8=1.25
3的5次幂用3**5=243
4、优先级 (从高到低)
a、幂运算 **
b、正负号 + -
c、算数运算符 * / // + -
d、比较 < > >= <= !=
e、逻辑运算符 not and or
5、三目操作 small = x if x<y else y
6、断言assert 3 >4 当程序为假的时候,会抛出AssertionError 的异常
7、数组例子 member=['aa','bb','cc'],
数组里的元素类型可以混合
mix=[1,'smelecom',3.14,[1,2,3]],数组还可以设置为空empty=[]
数组添加一个成员 member.append('addmember')
数组长度 len(member)
数组添加多个成员 member.extend(['aa','dd'])
数组添加可设置位置 member.insert(1,'qq')在第二个位置添加qq
数组删除元素member.remove('aa')
删除数组第二个元素del member[2]
删除数组整个数组 del member
删除最后一个元素(栈的方式存储) member.pop()
删除倒数第二个元素(栈的方式存储) member.pop(1)
显示数组中的第二个开始,到第三个结束的写法 member[1,3]
两个数组可以进行大小比较,可以相加,可以用*号,表示复制多少次
123 in array 用in表示元素在数组中,还可以用not in表示不再数组中
count(123)计算123在数组中存在的次数
index(123)123所在的索引位置
index(123,3,7)在第三个位置开始到第七个结束的位置中,123所在位置
sort()是从小到大排序,sort(reverse=true)从大到小排序
reverse()倒叙的
数组的拷贝 list1=list2[:],数组是同一个数组list1=list3
8、元祖是需要有逗号temp=(1,2),元祖的取前两个值temp[:2]
9、格式化
a、”{0} love {1}“.format("I","smelecom")
b、 ”{0} love {b}“.format("I",b="smelecom")位置必须放在子母前面
c、”{a} love {b}“.format(a="I",b="smelecom")
10、“{{0}}”.format("不打印")===》‘{0}’
print('\ta')===> a
'{0:.1f}{1}'.format(27.568,'GB')===>'27.6GB'
'%c %c' % (97,98)===>'a b'
'%s' % 'smele com'==>'smele com'
'%d+%d=%d' % '4,5,4+5'====>'4+5=9'
'%#x' % 108===> '0x6c'
11、参数文档,是在函数中直接用单引号引上,如‘这是一个参数文档’
代用参数文档的方法
a、myfunc.__doc__
b、help(myfunc)
c、help(print)
d、print.__doc__
12、可变参数,在参数变量前加* 如def myfun(*params),调用的时候用myfun(1,'aa',33)
如果有可变参数后面有别的参数,那个参数要设置成默认值myfun(*para,second=8)调用的时候myfunc(1,'aa',33,8)
13、在函数内要修改全局变量,python会自动新建一个跟全局变量的局部变量,所以修改无效,如果想要修改可以用global修饰
14、内嵌函数,只能在定义的那个函数中使用,作用域在外面无效
15、闭包函数
>>>>def funx(x)
def funy(y)
return x*y
return funy
>>>>funx(8)(5)
>>>>40
(如果想在funy用funx中的变量,需要用关键字nonlocal 声明变量)
>>>>def funx()
x = 5
def funy()
nonlocal x
x *= x
return x
return funy
>>>>funx
>>>>25
16、lambda作用是省去函数定义的过程,使用示例
>>>>g=lambda x,y:x+y
>>>>g(3,5)
>>>>8
17、过滤器filter,使用示例
>>>>list(filter(lambda x:x%2,range(10)))
>>>>[1, 3, 5, 7, 9]
18、生成0-9的数字序列函数range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
19、map使用示例
>>>>list(map(lambda x:x+2,range(10)))
>>>>[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
20、设置递归的深度
>>>>import sys
>>>>sys.setrecursionlimit(10000)
21、字典的创建
a、dict1={‘a’:'11','b','22'}
b、dict2={1:'one',2:'two'}
c、dict3=dict(('f',70),(i,105))
d、dict4=dict(aa='123',bb='456')
修改 dict1[a]=99,(如果没有的话就会被创建)
22、dict1=dict1.fromkeys(range(5),'smelcom')
使用示例
for eachKey in dict1.keys();
print(eachKey)
for eachValue in dict1.values();
print(eachValue)
for eachItem in dict1.Item();
print(eachItem)
23、dict1.get('4')会打印smelecom
如果dict1.get('5')不会打印
如果dict1.get('5','没有')
判断元素在不在dict1中用in 或者not in
smelecom in dict1或者 smelecom not in dict1中
清空字典 dict1.clear()
24、a={1:'one',2:'two'}
b=a.copy()
c=a
a和c的地址相同,a和b的地址不同,abc的数据相同,a的数据的改变会影响c,但不会影响b
弹出 a.pop(1)
弹出项 a.popitem()
设置值 a.setdefault(2,'tt')
更新 a.update(1:'aa')
25、集合中的元素是唯一的,无序的,不支持索引
26、pickle 的读写
///read
import pickle
my_list=[1,2,4,'aa']
pickle_file = open('mylist.pkl','wb')
pickle.dump(my_list, pickle_file)
pickle_file.close()
write
pickle_file = open('mylist.pkl','rb')
mylist2=pickle.load(pickle_file)
print(mylist2)
27、try:
检测范围
exception Exception[as reason]:
出现异常之后的处理
finally:
总会被执行的代码
raise会引发异常 raise ZeroDivisionError('除数为零的异常')
28、while 和 else的配合使用
def showMaxFactor(num):
count = num // 2
while count > 1:
if num % count == 0:
print('%d最大的约数是%d' % (num, count))
break
count -= 1
else:
print('%d是素数!' % num)
num = int(input('请输入一个数:'))
showMaxFactor(num)
29、with的使用,打开文件后会自动关闭,不用自己处理,使用示例
try:
with open('aa.txt','w') as f:
for each_line in f:
print(each_line)
exception OSError as reason:
print('error occured: '+ str(reason))
30、图形界面35课
三种方式
a、import easygui
easygui.msgbox('smlecom')
b、from easygui import *
msgbox('smelecom')
c、import easygui as g
g.msgbox('smelecom')
31、类的定义及继承
class MyList(list): ///MyList这个类继承自list这个父类,具有list的属性
pass ///pass是占位符
使用示例:
list1=MyList()
list1.append(2)
list1.sort();
32、参数self相当于this
33、__init__(self)相当于构造函数,自动被调用,类在实例化对象的时候,首先被调用的一个方法
34、定义私有变量,是在变量前面加上两个下划线 __var,如果想访问私有变量可以用重新定义一个函数,之后返回return 这个变量。
或者想直接访问的话,可以用‘_类名__变量名‘的方式访问,没有权限控制
eg;class Person:
__name = 'smelecom'
def getName(self)
return self.__name
p=Person()
可以使用个两种方法调用
a、p.getName()
b、p._Person__name
35、支持多重继承
36、子类继承父类,重写父类的方法有两种方式
import random as r
class Fish:
def __init__(self):
self.x = r.randint(0,10);
class Shark(Fish): 子类重写父类的构造方法1
def __init__(self):
Fish.init__(self)
class Shark(Fish): 子类重写父类的构造方法2
def __init__(self):
super().init__(self)
37、属性名如果和方法名相同,属性会覆盖方法,类中定义的属性和方法是静态变量,即使类被删除了,类对象的属性和方法还是存在的,相当于static类型,直到程序退出才失效
38、组合是将那些属性不相似的类组合到一起
class Turtle:
def __init__(self, x):
self.num = x
class Fish:
def __init__(self, x):
self.num = x
class Pool:
def __init__(self, x, y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print("水池里总共有乌龟 %d 只,小鱼 %d 条!" % (self.turtle.num, self.fish.num))
39、issubclass(class,classinfo)//如果class是classinfo的子类,就会返回true
isinstance(object,classinfo)//判断object是不是classinfo的实例对象,如果第一个参数不是对象,将一直返回false,第二个参数需要是类或者元祖
40、hasattr(object, name)
//确定object是否有name属性
getsttr(object,name[,default])
//获取object的name属性,如果object没有name属性,那么将会返回default的值
setattr(object, name, value)
//设置object对象name的值为value
delattr(object, name)
//删除object的属性name
41、property(fget=none, fset=none, fdel=none, doc=none)
eg:
class c:
def __init__(self,size = 10):
self.size = size
def getSize(self):
return self.size
def setSize(self,value):
self.size = value
def delSize(self):
del self.size
x = property(getSize, setSize, delSize)
c1 = c()
c1.x
c1.size
del c1.x
42、python在构造对象的时候,自动的调用方法 ,__init__(self[,..]),没有返回值,只是用来初始化变量的,在这个函数之前还有__new__(cls[,...])函数被调用,如果cls后面有参数,参数会原封不动的传给init方法,__del__(self)是类没有被对象引用的时候被调用,相当于析构函数
43、魔法方法的重写:
eg:
class new_int(int):
def __add__(self, other):
return int.__sub__(self,other)
def __sub__(self,other):
return int.__add__(self,other)
a = new_int(3)
b = new_int(5)
a+b>>-2
a-b>>8
44、(列表推导式)
40以内能被2整除但不能被3整除的数
a = [i for i in range(40) if not(i % 2) and i % 3]
>>[2, 4, 8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38]
(字典推导式){}里面有冒号是字典,如果没有冒号代表是集合
0-9这10个数是否为偶数
b = {i:i%2 == 0 for i in range(10)}
>>{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}
(集合推导式)集合不显示重复的元素
c={i for i in [1,2,4,2,2,3,4,5,6,4,6,3]}
>>{1, 2, 3, 4, 5, 6}
(生成器推导式(元祖推导式))
e=(i for i in range(10))
next(e)===>就会出现里面的元素
45、导入模块的三种方法
1、import 模块名
2、from 模块名 import 函数名 或者from 模块名 import *
3、import 模块名 as 新名字
46、if __name__ == "__main__":
test()
在主函数中用__name__ 会显示__main__
在主函数中调用模块.__name__ 会显示模块名
所以上面的引用方式会在测试模块的时候调用test函数,在主函数运行的时候不调用test()
47、显示系统路径
sys.path
导入文件时使用自己设定路径
sys.path.append("D:\\python")
48、 创建包,和使用包
创建一个文件夹,文件夹名就是包名,把模块放进去,再放一个__init__.py文件(可以为空),使用的时候就是import 文件夹名.模块名
49、dir(timeit) 可以显示timeit的说有属性和方法,如果方法里有__all__方法,可以调用timeit.__all__方法,查看这个类对外可以提供调用的所有方法(不是所有属性都有all属性,可以使用from timeit import *的方式导入,timeit.__file__是显示这个方法的源文件路径,help(timeit))
使用示例:
>>> import timeit
>>> dir(timeit)
['Timer', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_globals', 'default_number', 'default_repeat', 'default_timer', 'dummy_src_name', 'gc', 'itertools', 'main', 'reindent', 'repeat', 'sys', 'template', 'time', 'timeit']
>>> timeit.__all__
['Timer', 'timeit', 'repeat', 'default_timer']
50、访问网络
>>> import urllib.request
>>> response = urllib.request.urlopen("http://www.smelecom.com")
>>> html = response.read()
>>> print(html)
51、
import urllib.request
req = urllib.request.Request('http://placekitten.com/g/500/600')
response = urllib.request.urlopen(req)
cat_img = response.read()
with open('cat_500_600.jpg','wb') as f:
f.write(cat_img)
>>> response.geturl()
'http://placekitten.com/g/500/600'
>>> response.info()
<http.client.HTTPMessage object at 0x0000014DFFEA8940>
>>> print(response.info())
Date: Fri, 26 Oct 2018 00:39:37 GMT
Content-Type: image/jpeg
Content-Length: 24138
Connection: close
Set-Cookie: __cfduid=d1925aa976b0cd237e580945e933933271540514377; expires=Sat, 26-Oct-19 00:39:37 GMT; path=/; domain=.placekitten.com; HttpOnly
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=86400
Expires: Sat, 27 Oct 2018 00:39:37 GMT
CF-Cache-Status: HIT
Accept-Ranges: bytes
Vary: Accept-Encoding
Server: cloudflare
CF-RAY: 46f8ddec37ac7838-LAX
>>> response.getcode()
200
52、get是从服务器获得请求数据,post是向指定服务器提交被处理的数据
爬虫示例
import urllib.request
import urllib.parse
import json
content = input("please input what you want to translation:")
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data ={}
data['i']='双马'
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='1540515304485'
data['sign']='90ade72055af11b279e104c086c26046'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_REALTIME'
data['typoResult']='true'
data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url, data)
html = response.read().decode('utf-8')
target = json.loads(html)
print("translate result is :%s" % (target['translateResult'][0][0]['tgt']))
53、. 是通配符,可以匹配任何字符(一个)
/d 可以匹配任何数字(一个)
54、正则表达式
>>> import re
>>> re.search(r'.','I love FishC.com!')
<re.Match object; span=(0, 1), match='I'>
>>> re.search(r'Fish','I love Fish.com!')
<re.Match object; span=(7, 11), match='Fish'>
>>> re.search(r'\.','I love FishC.com!')
<re.Match object; span=(12, 13), match='.'>
>>> re.search(r'\d','I love 123 FishC.com!')
<re.Match object; span=(7, 8), match='1'>
>>> re.search(r'\d\d\d','I love 123 smelecom')
<re.Match object; span=(7, 10), match='123'>
>>> re.search(r'[aeiou]','I love FishC.com!')
<re.Match object; span=(3, 4), match='o'>
>>> re.search(r'[aeiouAEIOU]', 'I love FishC.com!')
<re.Match object; span=(0, 1), match='I'>
>>> re.search(r'[a-z]','I love FishC.com!')
<re.Match object; span=(2, 3), match='l'>
>>> re.search(r'[0-9]','I love 124 FishC.com')
<re.Match object; span=(8, 9), match='1'>
>>> re.search(r'[2-9]', 'I love 123 FishC.com!')
<re.Match object; span=(8, 9), match='2'>
>>> re.search(r'ab{3}c','abbbc')
<re.Match object; span=(0, 5), match='abbbc'>
>>> re.search(r'ab{3}c','abbbbc')
>>> re.search(r'[0-255]','188')
<re.Match object; span=(0, 1), match='1'>
>>> re.search(r'[01]\d\d|2[0-4]\d|25[0-5]','188')
<re.Match object; span=(0, 3), match='188'>
>>> re.search(r'([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-4]\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-4])','192.168.1.1')
>>> re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])','192.168.1.1')
<re.Match object; span=(0, 11), match='192.168.1.1'>
55、
>>> import re
>>> re.search(r"Fish(C|D)","FishC")
<re.Match object; span=(0, 5), match='FishC'>
>>> re.search(r"Fish(C|D)","FishD")
<re.Match object; span=(0, 5), match='FishD'>
>>> re.search(r"FishE", "FishC")
>>> re.search(r"Fish(C|D)","FishE")
>>> re.search(r"^FishC","FishC.com!")
<re.Match object; span=(0, 5), match='FishC'>
>>> re.search(r"^FishC","I love FishC.com!")#\A也有这个作用,匹配起始位置
>>> re.search(r"FishC$","FishC.com!")
>>> re.search(r"FishC$"," love FishC")#\z作用相同,匹配结束位置
<re.Match object; span=(6, 11), match='FishC'>
>>> re.search(r"(FishC)\1","FishC.com")
>>> re.search(r"(FishC)\1","FishCFishC")
<re.Match object; span=(0, 10), match='FishCFishC'>
>>> re.search(r"(FishC)\0","FishCFishC")
>>> re.search(r"(FishC)\060","FishCFishC")
>>> re.search(r"(FishC)\060","FishC0")
<re.Match object; span=(0, 6), match='FishC0'>
>>> re.search(r"(FishC)\141","FishCa")
<re.Match object; span=(0, 6), match='FishCa'>
>>> re.search(r"\.","Fishc.com")
<re.Match object; span=(5, 6), match='.'>
>>> re.search(r"[.]","Fishc.com")
<re.Match object; span=(5, 6), match='.'>
>>> re.findall(r"[\n]", "FiashC.com\n")
['\n']
>>> re.findall(r"[^a-z]","FishC.com\n")#
['F', 'C', '.', '\n']
>>> re.findall(r"[a-z]", "FishC.com")
['i', 's', 'h', 'c', 'o', 'm']
>>> re.findall(r"[a-z^]","FishC.com\n")
['i', 's', 'h', 'c', 'o', 'm']
>>> re.search(r"FinshC{3}","FinshCCCCC")
<re.Match object; span=(0, 8), match='FinshCCC'>
>>> re.search(r"(FinshC){3}","FinshCFinshCFinshC")
<re.Match object; span=(0, 18), match='FinshCFinshCFinshC'>
>>> re.search(r"(FinshC){1,5}","FinshCFinshCFinshC")
<re.Match object; span=(0, 18), match='FinshCFinshCFinshC'>
>>> s="<html><title>")# *是匹配0次或者多次,+是匹配1次或者多次,?是匹配0次或者1次
>>> re.search(r"<.+>",s)
<re.Match object; span=(0, 13), match='<html><title>'>
>>> re.search(r"<.+?>",s
<re.Match object; span=(0, 6), match='<html>'>
re.findall(r"\bFishC\b","FishC12FishC_oo(FishC)")#/b是匹配一个单词边界,带字母数字下划线的不算匹配
['FishC']#\B与\b是相反,py\B会匹配python,py2,但是不会匹配py ,py.,py!
56、正则表达式不支持换行,空格等,但是加上了VERBOSE标志就可以了
57、如果一个段代码被重复的使用,可以将其编译成模块
>>> p = re.compile(r"[A-Z]")
>>> type(p)
<class 're.Pattern'>
>>> p.search("I love FishC.com!")
<re.Match object; span=(0, 1), match='I'>
>>> p.findall("I love FishC.com!")
['I', 'F', 'C']
58、处理异常的两种写法,
第一种
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request(someurl)
try:
response = urlopen(req)
except HTTPError as e:
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
except URLError as e:
print('We failed to reach a server.')
print('Reason: ', e.reason)
else:
# everything is fine
第二种
from urllib.request import Request, urlopen
from urllib.error import URLError
req = Request(someurl)
try:
response = urlopen(req)
except URLError as e:
if hasattr(e, 'reason'):
print('We failed to reach a server.')
print('Reason: ', e.reason)
elif hasattr(e, 'code'):
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
else:
# everything is fine
59、在组建上设置滚动条,
1、在改组件的yscrollbarcommand选项为Scrollbar的组件设置为set方法
2、设置Scrollbar组件command选项为改组建的yview()方法
60、“+1c”表示下一个字符
61、打开网址的两种方法
一种:
import urllib2
response = urllib2.urlopen("http://www.baidu.com")
html = response.read()
print html
二种
import urllib2
req = urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(req)
html = response.read()
print(html)
62、