1. 装饰器

    • 概念:是一个闭包,把一个函数当做参数返回一个替代版的函数,本质上就是一个返回函数的函数

    • 简单的装饰器

      • def func1():
        
         print("sunck is a good man")
        
        def outer(func):
        
         def inner():
        
         print("*** ** * * ***")
        
         func()
        
         return inner
        
        #f是函数func1的加强版本
        
        f = outer(func1)
        
        f()
    • 复杂一点的装饰器

      • def say(name):
        
         print("%s is a good name" % (name))
        
        def outer(func):
        
         def inner(age):
        
         if age<0:
        
         age = 0
        
         func(age)
        
         return inner
        
        使用@符号将装饰器应用到函数
        
        @outer #相当于say = outer(say)
        
        say(-10)
    • 通用装饰器

      • def outer(func):
        
         def inner(*args, **kwargs):
        
         #添加修改的功能
        
         print("&&&&&&&&&&&")
        
         func(*argc,**kwargs)
        
         return inner
        
        @outer
        
        def say(name,age): #函数的参数理论上是无限制的,但实际上最好不要超过6、7个
        
         print("my name is %s,I am %d years old" % (name,age))
        
        say("xiaoxin",18)
  2. 偏函数

    • import functools 
      
      #把一个参数固定住,形成一个新的函数
      
      int3 = functools.partial(int,base = 2)
      
      int3("") 把111当成2进制转成十进制 值为7
  3. 变量的作用域

    • 作用域:变量可以使用的范围

    • 程序的变量并不是再所有位置都能使用的,访问的权限决定于变量的在哪里赋值的

    • 作用域:

      • 局部作用域

        • 局部变量是指在函数内部定义并使用的变量,它只在函数内部有效。
        • 每个函数在执行时,系统都会为该函数分配一块“临时内存空间”,所有的局部变量都被保存在这块临时内存空间内。当函数执行完成后,这块内存空间就被释放了,这些局部变量也就失效了,因此离开函数之后就不能再访问局部变量了,否则解释器会抛出 NameError 错误。
      • 函数作用域

      • 全局作用域

        • 和局部变量相对应,全局变量指的是能作用于函数内外的变量,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。
        • 在变量前面加个 global 就变成全局变量了

      • 内建作用域

  4. 异常处理

    • 需求:当程序遇到问题时不让程序结束,而越过错误继续向下执行

    • 错误处理的格式

      • try......except.......else
        
        格式:
        
        try:
        
         语句t
        
        except 错误表示码 as e:
        
         语句1
        
        except 错误表示码 as e:
        
         语句2
        
        ........
        
        except 错误表示码 as e:
        
         语句n
        
        else:
        
         语句e
        
        注意: else语句 可有可无
      • 作用: 用来检测try语句块中的错误,从而让except语句捕获错误信息并处理

      • 逻辑: 当程序执行到try- except - else 语句时

        • 当try语句 "语句t" 执行出现错误,会匹配第一个错误码,如果匹配上就执行对应的"语句"

        • 当try语句 "语句t" 执行出现错误,没有匹配的异常,错误将会被提交到上一层的try语句。或者到程序的最上层

        • 当try语句 "语句t" 执行没有出现错误,执行else下的"语句e" (你得有)

      • 使用except 而不使用任何的错误类型

        • try:
          
           print(num)
          
          except:
          
           print("程序出现了异常")
      • 使用except带着多种异常

        • try:
          
           print(5/0)
          
          except (NameError,ZeroDivisionError):
          
           print("出现了NameError或ZeroDIvisionError")
      • 特殊的地方

        • 错误其实是class(类),所有的错误都继承自BaseException,所以再捕获的时候,它捕获了该类型的错误,还把子类一网打尽

        • 跨越多层调用,main调用了func2,func2调用了func1,func1出现了错误,这是只要main捕获到了就可以处理

          • def func1(num):
            
             print(1/num)
            
            def func2(num):
            
             func1(num)
            
            def main():
            
             func2(0)
            
            try:
            
             main()
            
            except ZeroDivisionError as e:
            
             print("* * ** ***")
    • try......except.......finally

      • 格式:

        • try:
          
           语句t
          
          except 错误表示码 as e:
          
           语句1
          
          except 错误表示码 as e:
          
           语句2
          
          ........
          
          except 错误表示码 as e:
          
           语句n
          
          finally:
          
           语句f
      • 作用:语句t无论是否有错误都将执行最后的语句f

    • 断言

      • def func(num,div):
        
         assert(div != 0) , "div 不能为0"
        
         return num / div
        
        print(func(10,0)) 会指出哪里出错了
  5. 文件读写

    • 读文件

      • 打开文件

        • f=open(path,flag,encoding,errors)

          • path:要打开文件的路径

          • flag:打开方式

            • r 以只读的方式打开文件,文件的描述符放在文件的开头

            • rb 以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头

            • r+ 打开一个文件用于读写,文件的描述符放在文件的开头

            • w 打开一个文件只用于写入,如果该文件已经存在会覆盖,如果不存在则创建新文件

            • wb 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,如果不存在则创建新文件

            • w+ 打开一个文件用于读写

            • a 打开一个文件用于追加,如果文件存在,文件描述符将会放到文件末尾

            • a+ 打开一个文件用于追加

          • encoding:编码方式 (可写可不写)

          • errors: 错误处理 (可写可不写

        • 读文件内容

          • 读取文件全部内容

            • str1 = f.read() #读取全部内容

          • 读取指定字符串

            • str2 = f.read(10) #读取10个字符

          • 读取整行,包括 "\n"字符

            • str3 = f.readline()

          • 读取指定字符串

            • str4 = f.readline(10)

          • 读取所有行并返回一个列表

            • list7 = f.readlines()

          • 若给定的数字大于0,返回实际size字节的行数

            • list8 = f.readlines(10)

          • 修改描述符的位置

            • f.seek(0)

        • 关闭文件

          • f.close()

      • 一个读文件完整的过程

        • try:
          
          f1 = open(path,"r",encoding ="utf-8")
          
          print(f1.read())
          
          finally: 
          
           if f1:
          
           f1.close()
          
          1
          
          with open(path,"r",encoding = "utf-8") as f2:
          
           print(f2.read()) 无论你读写成功还是失败,with会自动关闭文件
    • 写文件

      • 第一步打开文件

        • f = open(path,"w")

      • 第二步写文件

        • f.write("sunck is a good man") #1.将信息写入缓冲区

        • f.flush() 2.刷新缓冲区,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待自动刷牙缓冲区写入

      • 第三步关闭文件

        • f.close()

    • 以二进制写文件,必须编码才能写进去,以二进制读文件,必须解码才能读出来

    • list&tuple&dict&set文件操作

      • 需要一个模块

        • import pickle #数据持久性模块

      • 举例

        • myList = [1,2,3,4,5,"sunck is a good man"]
          
          f = open(path,"wb")
          
          pickle.dump(myList,f)
          
          f.close()
          
          #读取
          
          f1 = open(path,"rb")
          
          tempList = pickle.load(f1)
          
          print(tempList)
          
          f1.close()

装饰器&偏函数与作用域与异常处理与文件读写的更多相关文章

  1. 【Python】装饰器 & 偏函数

    [装饰器] 1.最简单的Decorator. def author(f): def addName(): print('My name is xkfx.\n') f() return addName ...

  2. python闭包&装饰器&偏函数

    什么是闭包? 首先还得从基本概念说起,什么是闭包呢?来看下维基上的解释: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的 ...

  3. Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数

    Python 函数式编程 2 返回函数 返回函数的意思就是:函数作为返回值.(高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.) 举个例子:实现一个可变参数的求和. 正常的函数: de ...

  4. Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数

    高阶函数Higher-orderfunction 变量可以指向函数 >>> abs #abs(-10)是函数调用,而abs是函数本身 <built-in function ab ...

  5. Python---12函数式编程------12.3匿名函数&装饰器&偏函数

    一.匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f( ...

  6. 设计模式-装饰器模式(Decrator Model)

    文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6057666.html 目录 1.概述 2.目的 3.结构组成 4.实现 5.总结 1.概 ...

  7. Python的高级特性7:闭包和装饰器

    本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...

  8. 设计模式(八)装饰器模式Decorator(结构型)

    设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法 ...

  9. python_装饰器

    越来越觉得写一点技术博客是有多么重要了,明日复明日,现在就开始写吧! 1. 普通装饰器 装饰器的写法是一种语法糖,装饰器也还是一个函数而已,它接收一个函数对象作为参数,并返回一个新函数,主要是拓展原函 ...

随机推荐

  1. Hibernate中的配置对象

    数据库连接:由 Hibernate 支持的一个或多个配置文件处理.这些文件是 hibernate.properties 和 hibernate.cfg.xml. 类映射设置:这个组件创造了 Java ...

  2. NDK(1)简介

    AndroidNDK Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”. Android程序运行在Dalv ...

  3. 51nod 1686 第K大区间【离散化+二分】

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 题意: 定义一个区间的值为其众数出现的次数. 现给出n ...

  4. 2018-7-9-dotnet-设计规范-·-数组定义

    title author date CreateTime categories dotnet 设计规范 · 数组定义 lindexi 2018-07-09 14:26:48 +0800 2018-2- ...

  5. LOJ 10239 有趣的数列

    LOJ 10239 有趣的数列 首先可以将奇数视作入栈,偶数视作出栈,那么它是卡特兰数,其实打表也能看出来,而且好像可以用dp? 不过这道题的难点不在这里,p不是素数,所以不能用求逆元来做,不过前50 ...

  6. bert 硬件要求

    https://github.com/google-research/bert BERT ***** New May 31st, 2019: Whole Word Masking Models *** ...

  7. Oracle数据字典全解

    一.概念: 1.数据字典(data dictionary)是 Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表. 数据字典里存有用户信息.用户的权限信息 ...

  8. 用laravel搭一个微信公众号后台

    我使用的是laravel5.2, 早期版本可能不适合下面的方法. 在routes.php写下接收微信服务器post请求的路径: Route::post('wechatmp', 'WechatContr ...

  9. 2015年热门的国产开源软件TOP 50

    2015年热门的国产开源软件TOP 50 开源中国在 2015 年得到了快速的发展,单开源软件收藏量就接近 40000 款,其中不乏优质的国产开源项目.本文从软件的收藏.下载.访问等多角度挑选出了 2 ...

  10. 15个非常重要的Apache开源项目汇总

    15个非常重要的Apache开源项目汇总 自1999年创立以来,Apache软件基金会如今已成了众多重要的开源软件项目之家.本文列举了15个多年来非常重要的Apache项目,这些项目不仅对开源运动来说 ...