函数
函数的定义和调用
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. Springboot | Failed to execute goal org.springframework.boot:spring-boot-maven-plugin

    案例 今天搭建spring boot 环境时,使用mvn install ,出现Failed to execute goal org.springframework.boot:spring-boot- ...

  2. Linux 误删catlina.out导致磁盘空间爆满,无法查询到大文件解决办法

    大概是前俩天吧,发现公司的网站不定时的出现接口调不通的情况,便让手下小弟去服务器上查看一下,小弟告我磁盘空间满了,于是我让他处理一下.结果没想到他直接把 catlina.out 给干掉了.后果可想而知 ...

  3. JavaScript 替换所有匹配内容

    由于JavaScript 的 replace 只能替换一次,因此另外编写一个能现替换全部匹配内容方法,代码如下: /*把 content 中所有的 searchValue 替换为 replaceVal ...

  4. Java原子变量类需要注意的问题

    在学习多线程时,遇到了原子变量类,它是基于 CAS 和 volatile 实现的,能够保障对共享变量进行 read-modify-write 更新操作的原子性和可见性.于是我就写了一段代码试试,自认为 ...

  5. Java入门基础(类)

    类 在Java中表示自定义的数据类型,一个class可以是若干基本类型的组合. public class Student { public String id;//学号 public String n ...

  6. python 类 --导入类

    导入类 1.1.导入单个类 如何导入单个类 以上一节为例,编写一个car.py程序 编写一个新程序my_car.py 希望在my.car.py文件中直接使用car.py中的函数,使用from car ...

  7. Codeforces_731_B

    http://codeforces.com/problemset/problem/731/B 模拟模拟. #include<iostream> #include<cstring> ...

  8. Codeforces_723_C

    http://codeforces.com/problemset/problem/723/C 将n个数替换为1-m内的数,使得1-m的个数的最小值最大,并且替换步骤最少.注意,不必将每个数都替换!! ...

  9. JAVA编程学习之JAVA集合

    一.JAVA集合类 为了保存数量不确定的数据,以及保存具有映射关系的数据(关联数组),java提供了集合类.所有集合类位于java.util包下. 集合类就像容是器,现实生活中容器的功能,无非就是添加 ...

  10. qt creator源码全方面分析(2-7)

    目录 Completing Code 补全代码片段 编辑代码片段 添加和编辑片段 删除片段 重置片段 补全Nim代码 Completing Code 在编写代码时,Qt Creator建议使用属性,I ...