函数
函数的定义和调用
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. C++ traits技法的一点理解

    为了更好的理解traits技法.我们一步一步的深入.先从实际写代码的过程中我们遇到诸如下面伪码说起. template< typename T,typename B> void (T a, ...

  2. HDU_3183_RMQ

    http://acm.hdu.edu.cn/submit.php?pid=3183 初探rmq,这道题看了题解还是写了好久.原因是rmq处理字符串时没有自己写min函数,导致把返回的字符当成下标处理了 ...

  3. BZOJ 2653 middle (可持久化线段树+中位数+线段树维护最大子序和)

    题意: 左端点在[a,b],右端点在[c,d],求这个线段里中位数(上取整)最大值 思路: 对数组离散化,对每一个值建中位数的可持久化线段树(有重复也没事),就是对于root[i],大于等于i的值为1 ...

  4. sed命令入门

    什么是sed sed是一种流处理编辑器,可以分割.查找.替换文本. sed命令的处理流程:行处理 Created with Raphaël 2.1.0在shell中执行sed文本或管道输入读入到模式空 ...

  5. 对MYSQL注入相关内容及部分Trick的归类小结

    前言 最近在给学校的社团成员进行web安全方面的培训,由于在mysql注入这一块知识点挺杂的,入门容易,精通较难,网上相对比较全的资料也比较少,大多都是一个比较散的知识点,所以我打算将我在学习过程中遇 ...

  6. CentOS7 Cloudera Manager6 完全离线安装 CDH6 集群

    本文是在CentOS7.4 下进行CDH6集群的完全离线部署.CDH5集群与CDH6集群的部署区别比较大. 说明:本文内容所有操作都是在root用户下进行的. 文件下载 首先一些安装CDH6集群的必须 ...

  7. 今天第一天开通博客,随笔总结一下resultType(属性)和resultMap,collection和association,Statement和PreparedStatement各自的区别

    1.resultType(属性)和resultMap(标签引用)的区别? resultType不支持自定义返回结果,会将查询到的结果通过到type中java对象的同名的属性,对象中的属性名必须和数据库 ...

  8. Mysql 删除从数据库的relay logs最佳方式、最安全方式

    情景 MySQL数据库主从复制在默认情况下从库的relay logs会在SQL线程执行完毕后被自动删除.但是:在relay_log_purge = 0和MHA集群下,不会被自动删除,需要手动删除.如何 ...

  9. Vue中你可能认为是bug的情况原来是这样的

    前言 我们知道Vue框架剧本双向数据绑定功能,在我们使用方便的同时,还有一些细节问题我们并不知道,接下来一起探讨一些吧 双向数据绑定 js变量改变影响页面 页面改变影响js变量 Vue2是如何做到数据 ...

  10. Springboot feign 传递request信息

    基础实现 requestInterceptor 实现类中添加信息 public class NativeFeignConf { @Bean public RequestInterceptor getR ...