zoukankan      html  css  js  c++  java
  • python函数

    一.函数的定义、参数、返回值

    二.函数变量

      注意:函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系

    三.匿名函数

      形式:lambda 变量:返回值

      一般配合高阶函数使用

    a = lambda x:x+1
    # a --> 得到内存地址
    a(3)
    # 执行函数,得到4

    四.高阶函数

    五.内置函数

    内置函数官方文档

    六.Python三大器

    迭代器

      概念:迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样),每次迭代的结果都是下一次迭代的初始值。

      可迭代对象:对象.__iter__()方法(或者iter(对象)),执行后得到的结果是迭代器对象。

      迭代器对象:内置__iter__()和__next__() <==>等价于 iter(对象)、next(对象)。
      
        注:①迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象;
          ②迭代器.__iter__()得到的仍然是迭代器本身;


      for循环本质
        ①将可迭代对象用__iter__方法转换成迭代器对象;
        ②然后执行__next__;
        ③到结束捕捉异常,退出循环;

      优缺点
        优点
        --- 提供一种统一的、不依赖于索引的迭代方式;
        --- 惰性计算,节省内存;
      缺点
        --- 无法获取长度(只有在next完毕才知道到底有几个值)
        --- 一次性的,只能往后走,不能往前退

    廖雪峰迭代器讲解

    生成器

      三元表达式:res = 结果1(一元) if 条件(二元) else 结果2(三元)
            
      列表生成式:res = [i**3 for i in range(10) [if 条件] ]

      生成器表达式:
        将列表生产式中 [] 改成 (),就表示生成器


      生成器函数
        将返回return改成yield,就表示生成器函数


      特点
        1.生成器本身就是一个迭代器
        2.对比return,可以返回多次值,可以挂起/保存函数的运行状态

    廖雪峰生成器讲解

    装饰器

    不带参数的装饰器

     1 import time
     2 import functools
     3 
     4 
     5 def deco(func):
     6     @functools.wraps(func)
     7     def wrapper(*arg,**kwargs): #表示传入可变参数
     8         start_time=time.time()
     9         res=func(*arg,**kwargs)
    10         end_time=time.time()
    11         print('运行时间是%s' % (end_time-start_time))
    12         return res
    13     return wrapper
    14 
    15 @deco   #等价于 func=deco(func)
    16 def func(x,y,z):
    17     time.sleep(2)
    18     print('hello world %s %s %s'% (x,y,z))
    19 
    20 func(1,2,3)

    带参数的装饰器

     1 from functools import wraps
     2 def logging(level):
     3     def wrapper(func):
     4         @wraps(func)
     5         def inner_wrapper(*args, **kwargs):
     6             print("[{level}]: enter function {func}()".format(
     7                 level=level,
     8                 func=func.__name__))
     9             print(func.__doc__)
    10             return func(*args, **kwargs)
    11         return inner_wrapper
    12     return wrapper
    13 
    14 
    15 @logging(level='INFO')
    16 def say(something):
    17     """say......."""
    18     print("say {}!".format(something))
    19 
    20 
    21 # 如果没有使用@语法,等同于
    22 # say = logging(level='INFO')(say)
    23 
    24 @logging(level='DEBUG')
    25 def do(something):
    26     """do......."""
    27     print("do {}...".format(something))
    28 
    29 
    30 if __name__ == '__main__':
    31     say('hello')
    32     do("my work")

      装饰器原则:

        1.不修改被装饰对象的源代码.
        2.不修改被装饰对象的调用方式.

      装饰器的基本形式:

     1 from functools import wraps
     2 
     3 def wapper(func):
     4     # @wraps(func)  # 表示将原函数的信息保留
     5     def inner(*args,**kwargs):
     6         # 函数执行前操作
     7         ret = func()
     8         # 函数执行后执行
     9         return ret
    10     return inner
    11 
    12 
    13 @wapper  # func=wapper(func)
    14 def func():
    15     print(func.__name__)
    16     # 无wraps(func)打印inner
    17     # 有wraps(func)打印func
    18 
    19 
    20 func()
  • 相关阅读:
    网络流24题
    Songwriter CF1252-E(贪心)
    Card Collector AtCoder
    Game on a Tree Gym
    图书管理系统五
    bfs+状态压缩dp
    最短路径(邻接矩阵)
    求小于等于k长度的最大区间和
    链表实现队列C语言写法
    图书管理系统四
  • 原文地址:https://www.cnblogs.com/pantong/p/10486623.html
Copyright © 2011-2022 走看看