函数
函数的定义和调用
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. .net core控制台使用log4net

    第一步,Nuget log4net包 第二步,在项目中添加一个新xml文件,我这里是直接从.net framework的项目里复制过来的config文件,不过效果是一样的 内容如下: ?xml ver ...

  2. 理解和运用Java中的Lambda

    前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambda表达式(下文的Lambda特指JDK提供的Lamb ...

  3. Python报错:PermissionError: [Errno 13] Permission denied

    问题分析: 错误产生的原因是文件无法打开,可能产生的原因是文件找不到,或者被占用,或者无权限访问,或者打开的不是文件,而是一个目录. 问题解决: 1.检查对应路径下的文件是否存在,且被占用.如果文件不 ...

  4. VC实现快递查询

    #include <iostream> #include <string> #include <cstdlib> #include <afxinet.h> ...

  5. 如何写出优雅的Python代码?

    有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...

  6. python中常见的报错信息

    python中常见的报错信息 在运行程序时常会遇到报错提示,报错的信息会提示是哪个方向错的,从而帮助你定位问题: 搜集了一些python最重要的内建异常类名: AttributeError:属性错误, ...

  7. Net Core 中WebAPI有关 Session的设置,及获取

    步骤一: 在Startup 文件中做相应的设置 ConfigureServices方法里添加 //ConfigureServices添加: services.AddSession(options =& ...

  8. Part2-求AX=b的最优解

    自己一边听课一边记得,参考网上广为流传的那本<MIT线性代数笔记>,转成Latex上传太麻烦,直接截图上传了,需要电子版的可以私信我.

  9. 以stm32f407为例,学习cortex-m4通用寄存器的用法

    测试代码如下: int add(int a, int b, int c, int d, int e, int f) { return a+b+c+d+e+f; } int main(void) { i ...

  10. 分区格式化大于2 TiB磁盘

    如果您要分区格式化一块大于2 TiB的作数据盘用的云盘(本文统一称为 大容量数据盘,小于2 TiB的数据盘统称为 小容量数据盘),您必须采用GPT分区形式.本文档描述了如何在不同的操作系统里分区格式化 ...