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函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
随机推荐
- 使用NSClassFromString
使用NSClassFromString 使用NSClassFromString可以直接从字符串初始化出对象出来,即使不引用头文件也没关系,以下是源码: AppDelegate.m // // AppD ...
- SDWebImage动画加载图片
SDWebImage动画加载图片 效果 源码 https://github.com/YouXianMing/Animations // // PictureCell.m // SDWebImageLo ...
- 铁乐学Python_day03-字符串常用操作方法
文:铁乐与猫 2018-3-20 1)字符串首个字母大写,其它字母也会转换成小写: S.capitalize() -> str 记忆方法:capital(大写字母) def capitalize ...
- java 和 javascript CryptoJS 进行HmacSHA1加密
import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.Invali ...
- js检测密码强度
<script> function AuthPasswd(string) { if(string.length >=6) { if(/[a-zA-Z]+/.t ...
- 【转】Android 旋转动画,停止和持续旋转
旋转180度后停止 RotateAnimation rotate; rotate =new RotateAnimation(0f,180f,Animation.RELATIVE_TO_SELF, 0. ...
- Java并发编程--6.Exchanger线程间交换数据
在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...
- CUDA和OpenGL互操作经典博文赏析和学习
1.使用cuda+opengl图形互操作性实现MPR.原学位论文学习:实时交互的医学图像可视化.在该论文的第5.1.1节. 2.cuda与opengl互操作之PBO 3.cuda与opengl互操作之 ...
- Spring源码分析(四)容器的基础XmlBeanFactory
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 经过Spring源码分析(二)容器基本用法和Spring源码分析(三)容 ...
- 443 B. Table Tennis
http://codeforces.com/contest/879/problem/B n people are standing in a line to play table tennis. At ...