Python之函数总结
2024-08-21 14:50:54
一,函数的定义与调用
定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。
def 是固定的,不能变,必须是连续的def三个字母,不能分开
def 函数名(参数):
"""注释:函数功能和参数说明"""
函数体
……
return 返回值
调用:函数名+()
函数的返回值:return+返回值 ,结束函数
return不带返回值相当于None
无返回值,返回一个值,返回多个值
二,函数的参数
三,函数对象
函数是第一类对象,即函数可以当做数据传递
1,可以被引用
2,可以当做参数被传递
def func():
print('func')
def func2(f):
print(f)
f()
print('func2')
3,返回值可以是函数
def func():
print('func') def func2(f):
print('func2')
return f fu = func2(func)
4,可以当做容器类型的元素
四,函数的嵌套
为了保护内部函数,确定内部函数只能在外部函数中被调用
def animal():
def tiger():
print('bark')
print('eat')
tiger()
# animal()
函数名的本质:就是一个变量,保存了函数所在的内存地址
五,作用域
作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域
全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效
局部作用域:局部名称空间,只能在局部范围内生效
闭包:内部函数包含了对外部作用域而非全局作用域名字的引用,该内部函数称为闭包函数
六,装饰器
1,装饰器的本质 :闭包函数
2,功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能
3,装饰器的固定格式
def timer(func):
def inner(*args,**kwargs):
'''执行函数之前要做的'''
re = func(*args,**kwargs)
'''执行函数之后要做的'''
return re
return inner
4,带参数的装饰器
def outer(flag):
def timer(func):
def inner(*args,**kwargs):
if flag:
print('''执行函数之前要做的''')
re = func(*args,**kwargs)
if flag:
print('''执行函数之后要做的''')
return re
return inner
return timer @outer(False)
def func():
print(111) func()
5,多个装饰器装饰同一个函数
def qqxing(func): #func = pipixia_inner
def qqxing_inner(*args,**kwargs):
print('in qqxing:before')
ret = func(*args,**kwargs) #pipixia_inner
print('in qqxing:after')
return ret
return qqxing_inner def pipixia(func): #dapangxie
def pipixia_inner(*args,**kwargs):
print('in pipixia:before')
ret = func(*args,**kwargs) #dapangxie
print('in pipixia:after')
return ret
return pipixia_inner #qqxing(pipixia_inner) -->dapangxie = qqxing_inner()
@qqxing #dapangxie = qqxing(dapangxie) -->dapangxie = qqxing(pipixia(dapangxie)) -->
@pipixia #dapangxie = pipixia(dapangxie)
def dapangxie():
print("饿了么")
dapangxie()
最新文章
- 报错:Caused by: java.io.FileNotFoundException: d:\youTemprepository\upload_77faffc1_1580a9240ca__8000_00000001.tmp (系统找不到指定的路径。)
- <;System.ServiceModel>;
- 将表单数据转化为json数据
- css写法效率问题
- spring整合JMS - 基于ActiveMQ实现
- Git学习 -- 搭建Git服务器
- Posix消息队列实现机制
- Word Ladder II 2015年6月4日
- Scrapy架构及其组件之间的交互
- [JLOI2011]基因补全
- Oarcle之group by关键字与having关键字
- 关于JAVA-JS-JSP之间传值的各种方法
- 使用xshell连接服务器,数字键盘无法使用解决办法
- M斐波那契数列(矩阵快速幂+费马小定理)
- python 两个队列进行对比
- EnumSet基本用法
- WebApi和Andriod对接访问模式问题
- Python04 range()方法的使用、turtle.textinput()方法和write()的使用、turtle.numinput()的使用
- Map详解
- NYOJ-127 快速求幂,最小生成树
热门文章
- vue 声明响应式属性
- [转]成员函数指针与高性能的C++委托
- DataUml Design 教程4-代码生成
- Mysql 5.7 liunx 忘记密码的补救方法
- 模拟 Ajax 上传
- easyui data-options的使用
- apache+svn No installed service name &#39;Apache2&#39; 【转载】
- poj 1270(dfs+拓扑排序)
- 跟上Java8 - 日期和时间实用技巧,转自知乎王爵nice
- Win MYSQL5.7.19压缩版安装