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()

 

posted @ 2019-03-06 22:33  工藤_小哀  阅读(198)  评论(0编辑  收藏  举报