zoukankan      html  css  js  c++  java
  • day4心得

    装饰器:

    定义:本质就是函数,(装饰其他函数)就是为其他函数添加附加功能

    原则:1、不能修改被装饰的函数的源代码

       2、不能修改被装饰的函数的调用方式

    实现装饰器知识储备:

    1、函数即"变量"

    2、高阶函数

      a:把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码的情况下为其添加功能)

      b:返回值中包含函数名(不修改函数的调用方式)

    3、嵌套函数

    高阶函数+嵌套函数=》装饰器

    高级装饰器

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 
     5 import time
     6 
     7 user,passwd = 'zk','123'
     8 def auth(auth_type):
     9     def outer_wrapper(func):
    10         def wrapper(*args, **kwargs):
    11             if auth_type == 'local':
    12                 username = input('username = ').strip()
    13                 password = input('password = ').strip()
    14                 if username == user and password == passwd:
    15                     print('33[32;1m User has passed authentication 33[0m')
    16                     res = func(*args, **kwargs)
    17                     return res
    18                 else:
    19                     print('33[31;1m Invalid username or password33[0m')
    20             elif auth_type =='ldap':
    21                 print('ldap,不过去了')
    22                 res = func(*args, **kwargs)
    23                 return res
    24         return wrapper  #返回地址
    25     return outer_wrapper    #返回地址
    26 
    27 @auth(auth_type='ldap')
    28 def index(name):
    29     print('welcome to index page :',name)
    30 
    31 @auth(auth_type='local')    #home = auth()
    32 def home(name):
    33     print('welcome to home page:',name)
    34     return 'from home'
    35 
    36 def bbs():
    37     print('welcome to bbs page')
    38 
    39 index('zk')
    40 print(home('syf'))
    41 bbs()
    高阶参数装饰器

     斐波那契,以及异常抓取

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 
     5 #一种
     6 # def fib(max):
     7 #     n,a,b=0,0,1
     8 #     while n<max:
     9 #         print(b)
    10 #         a,b = b,a+b     #相当于  F = (b,a+b)   a = F[0]  b=F[1]
    11 #         n+=1
    12 #     return 'done'
    13 # fib(100)
    14 
    15 
    16 #生成器
    17 def fib(max):
    18     n,a,b=0,0,1
    19     while n<max:
    20         yield b
    21         a,b = b,a+b     #相当于  F = (b,a+b)   a = F[0]  b=F[1]
    22         n+=1
    23     return 'done'
    24 f = fib(10)
    25 while True:
    26     try:
    27         x = next(f)
    28         print('f:',x)
    29     except StopIteration as e:
    30         print('Generator return value:',e.value)
    31         break
    斐波那契

     通过生成器实现协程并行运算

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 import time
     5 def consumer(name):
     6     print("%s 准备发布系统!" %name)
     7     while True:
     8        baozi = yield
     9 
    10        print("上线包[%s]来了,被[%s]发布了!" %(baozi,name))
    11 
    12 
    13 def producer(name):
    14     c = consumer('A')       #函数变成生成器
    15     c2 = consumer('B')
    16     c.__next__()        #next只唤醒yield ,调用下生成器 也就是才能开始运行生成器
    17     c2.__next__()       #等同c2.send(None)
    18     print("准备传包!")
    19     for i in range(10):
    20         time.sleep(1)
    21         print("传2个上线包!")
    22         c.send(i)      #send 是唤醒yield并传值给他
    23         c2.send(i)
    24 
    25 producer("alex")
    View Code

     内置函数

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 
     5 
     6 print(abs(-123))   #abs()取绝对值
     7 print(all([1,2,3,0]) )      #如果可迭代对象里全为真,返回为真
     8 print(any([0,1]))           #如果可迭代对象里只要有一个为真,返回就为真,但是空为假
     9 print(type(ascii([1,1,1]))) #把内存数据对象,表示成一个可打印字符串形式
    10 repr()                      #用字符串表示这个对象
    11 print(bin(1))                 #把数字转换2进制
    12 print(bool(1))              #判断真假  0和空为False
    13 #字符串和二进制字节默认不可以修改
    14 a = bytearray('abcd',encoding='utf-8') #变成可修改的二进制字节格式
    15 print(a)
    16 a[1] = 100
    17 print(a)
    18 
    19 def zl(): pass
    20 print(callable(zl))      #判定一个是不是可以调用的(就是是否可以后面加'()',例如函数就是可以调用)
    21 print(chr(101))                   #返回ascii的对应表,必须数字
    22 print(ord('a'))                   #和chr()相反,必须输入ascii的字符
    23 # classmethod()
    24 code = '1+3*2+5'
    25 c = compile(code,' ','eval')                   #把字符串编译成可执行的代码
    26 print(eval(c))
    27 code = '''
    28 def fib(max):
    29     pass
    30 print('ok')
    31 
    32 '''
    33 d = compile(code,' ','exec')
    34 exec(d)                 #或是直接exec(code)
    35 
    36 complex()       #可以使用参数real + imag*j方式创建一个复数。也可以转换一个字符串的数字为复数;或者转换一个数字为复数
    37 delattr()       #函数作用用来删除指定对象的指定名称的属性,和setattr函数作用相反。
    38 dir()           #可以查看对像内所有属于及方法
    39 print(divmod(5,2))      #把除数和余数运算结果结合起来,返回一个包含商和余数的元组
    40 print(eval('1+2+3+7*3'))            #将字符串str当成有效的表达式来求值并返回计算结果
    41 exec()             #用来执行储存在字符串或文件中的Python语句
    42 cale = lambda n:print(n)    #匿名函数 只能处理简单的运算
    43 cale(5)
    44 res = filter(lambda n:n>5,range(10))
    45 #接收一个函数f和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,
    46 # filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list
    47 res1 = map(lambda n:n*n,range(5))
    48 # 将func作用于seq中的每一个元素,并将所有的调用的结果作为一个list返回
    49 import functools
    50 res2 = functools.reduce(lambda x,y:x*y,range(1,10))     #阶乘
    51 print(res2)
    52 for i in res1:
    53     print(i)
    54 
    55 frozenset([1,4,222,3,4,3,444]) #不可变集合
    56 print(globals())        #整个程序里会以字典类型返回当前位置的全部 全局变量。
    57 hash()                  #用于获取取一个对象(字符串或者数值等)的哈希值。
    58 hex()                   #转换16进制
    59 id()                    #返回内存地址
    60 locals()                #会以dict类型返回当前位置的全部 局部变量
    61 max()                   #返回列表里的最大值
    62 min()                   #返回列表里的最小值
    63 oct()                   #转换8进制
    64 pow(2,8)                   #返回多少的幂次方
    65 reversed()              #反转一个序列对象,将其元素从后向前颠倒构建成一个新的迭代器。
    66 round(1.332435,3)       #小数保留小数点后3位
    67 a = {3:2,1:4,-3:4,444:3}
    68 print(sorted(a.items()))                #字典排序默认按KEY排序
    69 print(sorted(a.items(),key = lambda x:x[1]))                #字典排序按value排序
    70 sum()                   #列表求和
    71 vars()                  #返回一个对象的所有属性
    72 zip()                   #拉链,数据结合 数据不一样多就按照最少的组合
    73 map()                   #类似zip 但是可以按照最多的组合,缺少的默认用None或指定一个值
    74 __import__('decorat')   
    View Code

     json和pickle

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 import json     #只能处理简单的 列表 字典 字符串等
     5 import pickle   #复杂可以
     6 info = {
     7     'name':'alex',
     8     'age':22
     9 }
    10 
    11 f = open('test.txt','w')
    12 f.write(json.dumps(info))   #序列化
    13 f.close()
    14 
    15 #--------------------------------
    16 f = open('test.txt','wb')       #pickle 需要用b 二进制
    17 f.write(pickle.dumps(info))   #序列化
    18 f.close()
    19 #---------------------------------
    20 f = open('test.txt','wb')
    21 pickle.dump(info,f)    #等同f.write(pickle.dumps(info))
    22 f.close()
    序列化
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 import json         #只能处理简单的 列表 字典 字符串等
     5 import pickle
     6 f = open('test.txt','r',encoding='utf-8')
     7 data = json.loads(f.read())         #反序列化
     8 f.close()
     9 print(data)
    10 #-----------------------------
    11 f = open('test.txt','rb')   #需要二进制
    12 data = pickle.loads(f.read())
    13 print(data)
    14 
    15 #------------------------
    16 f = open('test.txt','rb')
    17 data = pickle.load(f)       #等同data = pickle.loads(f.read())
    18 print(data)
    反序列化
  • 相关阅读:
    Python Socket 遇到错误: TypeError: a bytes-like object is required, not 'str'
    升级JDK导致无法启动eclipse错误解决办法
    Python安装详细步骤
    如何给电脑配置java环境,以及jdk下载安装
    spring 整合Mybatis 错误:A query was run and no Result Maps were found for the Mapped Statement 'com.xxhh.mapper.XxhhTableBabyCustomMapper.selectAllBaby'. It's likely that neither a Result Type nor a Resul
    spring 整合Mybatis 错误:Error creating bean with name 'loginController': Injection of autowired dependencies failed......xxxxx
    spring 整合Mybatis 《错误集合,总结更新》新手进坑金典新手坑
    xib文件加载研究
    xib文件加载后设置frame无效问题
    xcode中storyboard警告说明
  • 原文地址:https://www.cnblogs.com/kiko0o0/p/8299048.html
Copyright © 2011-2022 走看看