先来说明下几个定义:

1,函数

在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数:

方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数

2,作用域

在Python中,函数会创建一个新的作用域. Python开发者可能会说函数有自己的命名空间.这就意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里寻找.来简单举例说明本地作用域与全局作用域

内置的函数globals返回一个包含所有Python解释器知道的变量名称的字段(省略一部分)在#2调用了函数foo 把函数背部本地作用域里面的内容打印出来.可以看到,函数foo有自己的独立的命名空间,即使暂时命名空间啥也没有.

3,变量解析规则

当然并不是说在函数里就不能访问外面的全局变量.在Python的作用域规则里,创建变量一定会在当前作用域里创建一个变量,但访问或者修改变量是会现在当前作用域查找变量,没有找到匹配变量会依次向上在闭合的作用域里进行查找.so 如修改函数foo的是实现打印全局的作用域的变量也是可以

在#1处,Python解释器会尝试查找变量a_string,当然在函数的本地作用域是找不到,so接着会在上层的作用域去查找

但在另外一方面,假如在函数的内部给全局变量赋值,结果会不一样

全局变量能够被访问到(如果是可变数据类型(像list,dict这些),甚至能够被更改),但赋值就不行了,在函数内部的#1,实际上新创建了一个局部变量,隐藏全局作用域中的同名变量,可以通过打印出全局命名空间中的内容得出这个结论.也可以在#2处打印出来的a_string没有改变

4,变量生存周期

值得注意的是:变量不仅是生存在一个个的命名空间里,都有自己的生存周期,如下:

5,函数参数

Python允许想函数传递参数,参数会变成本地变量存在与函数内部

在Python中有很多的方式来定义和传递参数,简要说明下:函数的参数是必须的位置参数或是可选的命名,默认参数

在#1处定义了函数foo,有一个位置参数x和一个命名参数y  在#2通过常规的方式来调用函数,即使只有一个命名参数,但参数依然可以通过位置参数传递给函数.在调用函数的时候,对于命名参数y也可以完全不管就想#3所示一样.如命名参数没有接收到任何值的话,Python会自动使用声明的默认值.但不能省略第一个位置参数x,否则会像#4发生错误

python支持函数调用时的命名参数。看看#5处的函数调用,传递的是两个命名实参,这个时候因为有名称标识,参数传递的顺序也就不用在意了。

当然相反的情况也是正确的:函数的第二个形参是y,但通过位置的方式传递值给它。在#2处的函数调用foo(3,1),我们把3传递给了第一个参数,把1传递给了第二个参数,尽管第二个参数是一个命名参数。

6,嵌套函数

Python允许创建嵌套函数,就意味着可以在函数里定义函数而且现有的作用域和变量生存周期依旧适用

Python解释器需找一个叫x的本地变量,查找失败之后会继续向上层的作用域里查,这个上层的作用域定义在另外一个函数里,对于函数outer来说,变量x是一个本地变量

函数inner可以访问封闭的作用域.在#2处,可以调用函数inner,inner也仅仅是一个遵循Python变量解析规则的变量名,Python解释器会优先在outer的作用域里面对变量名inner查找匹配的变量

python 找到装饰器_Python 装饰器的总结(一)相关推荐

  1. python两层装饰器_python装饰器

    Python的装饰器的英文名叫Decorator,基本上适用的场景就是"装修":不涉及主流程业务,用于鉴权.审计等副业. 1.函数 在python中,函数通过def关键字.函数名和 ...

  2. python重写和装饰器_python装饰器

    python装饰器的本质,就是闭包! 我们一般谈Python的闭包,都是指普通的入参,而谈装饰器的时候,入参一定有函数!闭包和装饰器,返回的都是函数.函数是代码的最小封装单位,装饰器作用于函数,它不影 ...

  3. python 开闭原则_Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】

    本文实例讲述了Python 装饰器@,对函数进行功能扩展操作.分享给大家供大家参考,具体如下: 装饰器可以对原函数进行功能扩展,但还不需要修改原函数的内容(开闭原则),也不需要修改原函数的调用. de ...

  4. python实现装饰器_python装饰器的实现

    说起装饰器我们可能已经很熟悉了(不了解的可以查看python基础学习--装饰器),随手就可以写一个简单的装饰器 def decorator(func): def inner(*args, **kwar ...

  5. 装饰器python的通俗理解_Python装饰器的通俗理解

    在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Py ...

  6. python解读器_Python装饰器完全解读

    Python Python开发 Python语言 Python装饰器完全解读 1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入 ...

  7. python无参数装饰器_Python装饰器(不带参数)

    示例 直接给出示例,普通装饰器(即装饰器函数本身不带参数,或参数为实际被包裹的函数): import time from functools import wraps def timethis(fun ...

  8. python运行器_python 运行器

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! #usrbinenv python3 import timedef outer( ...

  9. python修饰器_python修饰器

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 文章先由stackoverflow上面的一个问题引起吧,如果使 ...

最新文章

  1. 用心真诚对待,懂你的人
  2. 如何正确配置Nginx+PHP
  3. 中文版示例代码浏览器for Windows 8
  4. Vue脚手架搭建项目
  5. 如何解决VMware Workstation 10.0.0 build-1295980马赛克现象
  6. Nokia N70 Production Video
  7. java mysql lru_Java集合详解5:深入理解LinkedHashMap和LRU缓存
  8. python find函数 和index的区别_python list的index()和find()的实现
  9. js处理倒计时,日期可以是当前日期也可以传1个时间点
  10. BZOJ4029: [HEOI2015]定价
  11. (一)查询出排序中的最大值和最小值
  12. IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】持续更新,建议收藏
  13. Linux-Shell脚本教学
  14. 实用干货!因子分析超全步骤总结
  15. 思潮涌动、静心前行----2020年度博客之星活动经历感悟
  16. OCCT培训笔记(刘星讲)--第2天
  17. CS5216|DP转HDMI方案详解|分辨率1080P
  18. speedoffice被隐藏的工作表如何取消隐藏
  19. 领秀d8 android4.5 root,Root神器重大更新 KingRoot V4.5发布
  20. 供应科研试剂乙缩醛-琥珀酰亚胺酯,Acetal-NHS (SDMB)

热门文章

  1. 子程序入口参数是什么_三菱FX PLC | 什么是中断服务?没事多看几遍
  2. android平台Camera采集数据ffmpeg进行编码探究
  3. python一款神器:ptpython 安装
  4. netstat命令---Linux查看网络和socket信息
  5. Makefile之 .PHONY 作用
  6. 开机时出现:reboot and select proper boot 、关于IDE与AHCI
  7. 推荐一款wordpress个人博客主题,中文版主题
  8. c调用python函数_python - Linux C调用Python 函数
  9. python密码传参有特殊字符如何解决_am start的总结,-d参数的总结,以及python中传递内容包含中文及特殊字符的解决方案...
  10. vue将每个路由打包成html,Ant Design Vue pro 动态路由的实现和打包