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学习---模拟微信网页登录180410
WEB微信 网页登录的猜想: a. 访问页面出现二维码 b. 长轮询监听是否已经扫码并且点击确认 c. 如何进行会话保持 d. 如何获取用户列表 e. 如何发送消息(接收消息) 过程:访问微信官网[h ...
- Oracle 数据库创建(图形界面操作)
Oracle 创建数据库图文分解: 1. 选择所有程序->Oracle-OraDb11g_home1->Configuration and Migration Tools -> Da ...
- singleton和prototype的区别
singleton作用域:当把一个Bean定义设置为singleton作用域是,Spring IoC容器中只会存在一个共享的Bean实例,并且所有对Bean的 请求,只要id与该Bean定义相匹配,则 ...
- Angular总结二:Angular 启动过程
要弄清楚 Angular 的启动过程,就要弄明白 Angular 启动时加载了哪个页面,加载了哪些脚本,这些脚本做了哪些事? 通过 Angular 的编译依赖文件 .angular-cli.json ...
- mycat结合双主复制实现读写分离模式
简介:应用程序仅需要连接mycat,后端服务器的读写分离由mycat进行控制,后端服务器数据的同步由MySQL主从同步进行控制. 本次实验环境架构图 服务器主机规划 主机名 IP 功能 备注 lin ...
- BZOJ2694:Lcm——包看得懂/看不懂题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2694 Description 对于任意的>1的n gcd(a, b)不是n^2的倍数 也就是说 ...
- 【转】说说Android中的style和theme
最近在做软件从2.3到4.0的改变的一些工作,其中涉及了一些style和theme相关的东西.上网上查了一些东西,这个一并说说.关于android中style和theme的基本使用,这里就不再赘述了, ...
- 20145203JAVA课程总结
20145203盖泽双 <Java程序设计>课程总结 课程总结 (按顺序)每周读书笔记链接汇总 调查问卷:http://www.cnblogs.com/GZSdeboke/p/524832 ...
- oracle ORA-01722:无效数字 记录
今天在对12万条记录的表进行左联接时,有时可以查询出数据,有时会报无效数字,反复检查,发现问题. 例如sql: SELECT * FROM USER U LEFT JOIN USER_ROLE UR ...
- 定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在main方法中构造3个对象,调用showArea方法。(体现多态)
实现多态的三个条件:1.要有继承2.要有抽象方法重写3.用父类指针(引用)指向子类对象 重载重写重定义的区别: 1.重载:在同一个类中进行; 编译时根据参数类型和个数决定方法调用; 子类无法重载父类; ...