Python学习笔记

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、

    
    
    
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值