函数
函数的定义和调用
def 函数名(形参):
函数体
return 返回值
调用 函数名(实参)
站在形参的角度上: 位置参数, *args, 默认参数(陷阱), 关键字参数, **kwargs
站在实参的角度上: 按照位置传,按照关键字传
返回值: 没有返回值,返回一个值, 返回多个值
接受返回值: 没有返回值不接收,返回一个值用一个变量接收,返回多个值用一个变量或对应数目的变量接收
闭包函数 ---- 在内部函数应用外部函数的变量
装饰器函数 ---- 装饰器一定是闭包函数
装饰器作用:在不改变原函数的调用方式的情况下,在这个函数的前后添加新的功能
完美的符合了一个开发原则: 开放封闭原则
对扩展是开放的
对修改是封闭的
基础的装饰器
from functools import wraps
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
'''在函数被调用之前添加的代码'''
ret = func(*args, **kwargs) #func被装饰的函数 在这里被调用
'''在函数被调用之前添加的代码'''
return ret
return inner
使用 @wrapper
完美的装饰器
from functools import wraps
@wraps(func)
@wrapper
def func():
pass func() # 实际执行的是 inner()
func.__name__ #取得实际此时此内存地址指向的函数名
带参数的装饰器
@wrapper ---> @wrapper(argument)
三层嵌套函数
def outer(形参):
def wrapper(func):
def inner(*args, **kwargs):
'''在函数被调用之前添加的代码'''
ret = func(*args, **kwargs) #func被装饰的函数 在这里被调用
'''在函数被调用之前添加的代码'''
return ret
return inner
return wrapper
@outer(True)
def func():
pass
多个装饰器装饰一个函数
俄罗斯套娃
def wrapper1(func):
def inner(*args, **kwargs):
print('before 1')
ret = func(*args, **kwargs) #func被装饰的函数 在这里被调用
'''在函数被调用之前添加的代码'''
return ret
return inner
def wrapper2(func):
def inner(*args, **kwargs):
print('before 2')
ret = func(*args, **kwargs) #func被装饰的函数 在这里被调用
'''在函数被调用之前添加的代码'''
return ret
return inner
水滴石穿步骤
@wrapper1
@wrapper2
def func():
print('1111')
迭代器和生成器 内置函数 装饰器执行步骤:

函数归纳

												

day 12 函数的更多相关文章

  1. pytest 12 函数传参和fixture传参数request

    前沿: 有的case,需要依赖于某些特定的case才可以执行,比如,登陆获取到的cookie,每次都需要带着他,为了确保是同一个用户,必须带着和登陆获取到的同一个cookies. 大部分的用例都会先登 ...

  2. Python 入门基础12 --函数基础5 匿名函数、内置函数

    今日内容: 1.三元表达式 2.列表.元组生成式 | 字典生成式 3.递归 4.匿名函数 5.内置函数 一.三元表达式 三元运算符:就是 if...else... 语法糖 前提:if 和 else # ...

  3. python基础12 ---函数模块2

    函数模块 一.sys函数模块详解 1.sys.argv[x] 功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出 ...

  4. day 12 函数名的应用 闭包 迭代器

    今日主要内容 1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用   #再函数名后面添加() 才是对函数的调用, 否则打印的是函数的内存地址 1.赋值 2.作为list元素 3.作为参数 d ...

  5. python基础(12):函数(二)

    1. 函数参数 之前我们说过了传参,如果我们需要给⼀个函数传参,⽽参数⼜是不确定的,或者我给⼀个函数传很多参数,我的形参就要写很多,很⿇烦,怎么办呢,我们可以考虑使⽤动态参数. 形参的第三种: 动态参 ...

  6. Python 学习笔记12 函数模块

    函数的优点之一,使用它们可将代码块与主程序分离.通过给函数指定描述性的名称.可以让主程序非常好理解.但是如果将过多的函数和主程序放置在一起,会让文件显得非常凌乱.太多的代码混杂在一起,不方便管理.我们 ...

  7. Python基础:12函数细节

    一:返回值 当没有显式地返回元素时,Python 会返回一个None.如果函数返回多个对象,python 把他们聚集起来并以一个元组返回. 二:创建函数 1:强烈推荐,在函数体之前,编写函数的文档字符 ...

  8. 通过实战理解C语言精要——函数篇

      前言 本篇博客是对C语言函数部分的重点内容和细枝末节通过实战得到的经验的总结精炼,不涵盖C语言函数的全部内容,所有提炼内容均来自提炼与实战,阅读需要对函数部分有一定基础,可用于对C语言函数的理解提 ...

  9. Delphi常用系统函数总结

    Delphi常用系统函数总结 字符串处理函数 Unit System 函数原型 function Concat(s1 [, s2,..., sn]: string): string; 说明 与 S : ...

随机推荐

  1. js实现表单的提交

    <form action="" method="post" name="form"> <tr>           ...

  2. Spring学习的一点感想

    最近在学习Java体系的一些框架,先把SSM先学一遍吧,不得不说经典的Java体系带给我的冲击还是比较大的,这里不记录框架的一些实现细节,那些都记录在笔记里面了,这里记录学习 Spring 体系的一些 ...

  3. tmobst2an

    (单选题)与下面代码效果相同的HQL 语句是( ). Criteria criteria = session.createCriteria(User.class); criteria.add(Rest ...

  4. 利用Kubernetes中的leaderelection实现组件高可用

    在Kubernetes中,通常kube-schduler和kube-controller-manager都是多副本进行部署的来保证高可用,而真正在工作的实例其实只有一个.这里就利用到 leaderel ...

  5. 你知道EasyX吗

    关于C++控制台上的图形界面,你知道一个东西叫做EasyX吗? 作为一个退役的OI选手(WTF?\(3^2-3^1\)年级退役?),在退役之后总想找点事情做. 开发个游戏?(我只会控制台) 学下人工智 ...

  6. Burpsuite Pro 2020.1最新破解版

    简介 Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具.Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程.所有工具都共享一个请求,并能处理对应的HTTP ...

  7. UnityTips:不要在发布版本中实现OnGUI方法

    0x00 问题 不知道大家是否在调试Unity应用性能的时候发现过一条常见的Marker:UIEvents.IMGUIRenderOverlays. 很多情况下,这条叫做UIEvents.IMGUIR ...

  8. Mysql性能优化全揭秘-庖丁解牛

    「为什么写」 一直想写数据库相关的文章,最直接的原因是数据库这块我们工作中每天都会用到,也是面试求职绕不开的话题,无论你是何种测试,优秀的数据库能力都会非常加分,最近我在总结数据库性能优化这块内容,性 ...

  9. mac系统目录结构

    1 符合unix传统的目录 /bin 传统unix命令的存放目录,如ls,rm,mv等. /sbin 传统unix管理类命令存放目录,如fdisk,ifconfig等等. /usr 第三方程序安装目录 ...

  10. 《自拍教程29》Sublime_小脚本编写首选

    Sublime Sublime 是一个轻量.简洁.高效.跨平台的编辑器, 最新的是Sublime Text 3. Sublime对Python支持非常好,如果只是简单的编写批处理脚本编写, 或者小范围 ...