Python函数之总结
'''
1、什么是函数
函数就是具备某一特定功能的工具
2、为什么用函数
减少重复代码
增强程序的扩展性
增强可读性
3、如何用函数
1、函数的使用原则:先定义后调用(*****)
定义阶段:只检测语法不执行代码
调用阶段:执行函数代码
2、定义阶段与调用阶段:
2.1:语法 (*****)
def func(参数1,参数2,...):
"""文档注释"""
code1
code2
code3
return 返回值
2.2 形参与实参 (*****)
形参本质就是变量名
实参本质就是变量的值 形参:
位置形参
def foo(x,y):
pass
默认形参
def foo(x,y=1):
pass
*args
def foo(x,*args):
pass
**kwargs
def foo(x,**kwargs):
pass
实参:
位置实参
foo(1,2,3,4)
关键字实参
foo(x=1,y=2,z=3)
foo(x=1,1) # 错误
foo(1,x=1) #错误
*可迭代的对象
foo(*'hello')
**字典
foo(**{'x':1,'y':2}) 2.3 返回值(*****) return是函数结束的标志,函数内可以有多个return,但只要执行一次函数就立刻结束
并且把return后的值当作本次调用结果返回 def foo(x,y):
return x+y res=foo(1,2) 注意:
1、返回值可以是任意类型
2、返回值没有个数限制
函数内没有return:默认返回None
return 值1:返回该值
return 值1,值2,值3:返回(值1,值2,值3) 3、函数对象(*****)
def foo():
pass
函数可以被当作数据去处理
1、引用
f=foo
2、当作参数
print(foo)
3、当作返回值
def bar():
def wrapper()
pass
return wrapper f=bar()
4、当作容器类类型的元素
def f1():
pass
def f2():
pass l=[f1,f2]
l[0]() func_dic={
'f1':f1,
'f2':f2
} 4、函数嵌套(*****)
4.1 函数的嵌套调用
def foo()
bar()
f1()
f2()
foo()
4.2 函数的嵌套定义
def f1():
def f2():
pass
f2() 5、名称空间与作用域(******)
内置名称空间
全局名称空间
局部名称空间
def foo(x,y): #x=1,y=2
pass
foo(1,2) 加载顺序:内置->全局-》局部
查找名字的顺序:从当前位置往上查找
如果当前位置在局部
局部—》全局-》内置 x=1
def outter():
def wrapper():
print(x)
return wrapper
f=outter() def bar():
x=111111
f() 全局作用域:全局存活,全局有效
内置+全局
局部作用域:临时存活,临时有效
局部 l=[]
n=100
def foo():
l.append(1111)
global n
n=1 def f1():
x=1
def f2():
def f3():
nonlocal x
x=10 globals()
locals()
6、闭包函数(****)
x=1
def outter():
x=10
def wrapper():
print(x)
return wrapper
f=outter() 7、装饰器(****)
def deco(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
retutrn res
return wrapper def deco1(x=1,y=2):
def deco(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
retutrn res
return wrapper
return deco @deco
def index():
pass 8 迭代器(****)
for
max
min
sorted
filter
map 9 生成器(***) 10 三元表达式、列表推导式,字典生成式,生成器表达式(*****) res=条件成立的结果 if 条件 else 条件成立的结果
l=[表达式 for i in 可迭代对象 if 条件]
g=(表达式 for i in 可迭代对象 if 条件)
d={k:v for i in 可迭代对象 if 条件} 11 匿名函数(*****)
lambda 参数1,参数2:表达式 max
min
sorted
map
filter 12 内置函数 13 函数递归(****) ''' # 多个装饰器的叠加使用
def deco1(func1): #func1=wrapper2
def wrapper1(*args, **kwargs):
print('第一个装饰器')
res1 = func1(*args, **kwargs)
return res1
return wrapper1 def deco2(func2): #func2=最原始的index
def wrapper2(*args, **kwargs):
print('第二个装饰器')
res2 = func2(*args, **kwargs)
return res2
return wrapper2 @deco1 #index=deco1(wrapper2)=wrapper1
@deco2 # index=deco2(index)=wrapper2
def index():
print('from index') index()
'''
第一个装饰器
第二个装饰器
from index
'''
Python函数之总结的更多相关文章
- python 函数之day3
一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...
- Python函数作用域的查找顺序
函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...
- Python函数讲解
Python函数
- Python函数信息
Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...
- Python函数参数默认值的陷阱和原理深究"
本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...
- Python开发【第四章】:Python函数剖析
一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...
- Python函数解析
对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...
- Python入门笔记(18):Python函数(1):基础部分
一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...
- Python函数1
Python 函数命令的使用 想想我们之前数学中学到的函数,首先我们需要定义一个函数,例如f(x)=x, 当x输入任意数的时候,f(x)都能输出和x相等的数值. 那么在Python中是如何实现的呢? ...
- python函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
随机推荐
- 铁乐学python_day22_面向对象编程4
以下内容大部分摘自博客http://www.cnblogs.com/Eva-J/ 封装 [封装]隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 将变化隔离: 便于使用: 提高复用性: 提 ...
- ZT 9种排序
9种排序 2012-09-19 14:58 66人阅读 评论(0) 收藏 编辑 删除 algorithmfpfilemergeintegerfloat [cpp] view plaincopy #in ...
- iis和apache共用80端口,IIS代理转发apache
为什么共用80端口应该不用多说了,服务器上程序运行环境有很多套,都想抢用80端口,所以就有了共用80端口的解决方案. 网上很多的教程一般都是设置APACHE使用默认80端口,代理转发IIS的网站,II ...
- eclipse导入maven工程missing artifact(实际是存在的)错误解决
找到出错的jar包文件位置,删掉_maven.repositories文件(或用文本编辑器打开,将“>main=”改为“>=”,即删除main,当然main也可能是其他值),然后updat ...
- 基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)
上一篇介绍了定制器相关的文件,这篇我们来看看整个定制器的界面部分,了解了页面结构有助于更好的理解定制器的实现,那么现在开始吧! 首先,我们来看看整体的结构: 整体结构比较简单,主要包括三个部分: 1. ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- R语言常用语法和用法
数据准备 height <- c(6.00, 5.92, 5.58, 5.92) 1 计算均值 mean(height) [1] 5.855 2 计算中位数 median(height) [1] ...
- 关于ESP8266EX的一些资料
乐鑫智能互联平台 ESP8266EX 拥有高性能无线 SOC,给移动平台设计师带来福⾳音,它以最低成本提供最大实用性,为 WiFi 功能嵌入其他系统提供无限可能. ESP8266EX 是⼀一个完整且⾃ ...
- 如何将freemarker文件转化为html文件
最近在做静态的页面报表服务,将前端生成的ftl文件转化为html格式的文件,供后面合成pdf使用. freemarker基础可以参见:freemarker官方文档 前期准备:需要一个基础的ftl格式的 ...
- Java序列化反序列化对象流ObjectInputStream、ObjectOutputStream
使用Person类作为Object进行示范 注意:Object要能被写入流需要实现Serializable接口 存储的文件后缀名为.ser 示范Person类 import java.io.Seria ...