共计 1675 个字符,预计需要花费 5 分钟才能阅读完成。
本章包括内容用
- 基本语法
- 函数式编程
- 回调
- 闭包和装饰器
- 递归
- 生成器和 yield
- 作业
1. 基本语法
1.1 函数的基本语法
# 定义函数的语法为 def,args 为形参,函数一般会返回一些数据,用 return 返回
def func(args):
return x;
#使用函数名来调用一个函数
func(agrs)
1.2 函数的作用域 LEGB
L-Local(function);函数内的名字空间
E-Enclosing function locals;外部嵌套函数的名字空间 (例如 closure)
G-Global(module);函数定义所在模块(文件)的名字空间
B-Builtin(Python);Python 内置模块的名字空间
2. 函数例子
2.1 开平方
import math
#计算 20 的平方根
math.sqrt(20)
2.函数式编程
函数式编程:是一种编程方法。
一般我们之前的编程都是基于顺序结构执行。
函数式编程,是一切皆函数,操作的是一个一个函数,将函数当做变量去操作、组合。
- 直接赋值给变量
#sum 是 built-in 函数
my_sum = sum
#输出 2
sum(1+1)
#同上
my_sum(1+1)
#['__call__', '__class_...... 等等
dir(my_sum)
#输出函数名
my_sum.__name__
- 高阶函数 将一个函数以参数的形式赋值给另一个函数
2.1 自定义高阶函数
# 此处的 f 是下面的另一个函数,称 f1 这个函数为高阶函数
func f1(f,g,h):
pass
func f():
pass
2.2 系统自带高阶函数 filter
过滤掉非字符串,filter 接受两个参数,第一个是函数,第二个可以是字符串也可以是列表,列表(字符串)中的每一个元素和第一个函数进行运算,第一个函数返回的是一个布尔值,true 则保留,false 则略过
text = "i23!@!@l223o2323v223@@e2323p23@y@#@#t@#@#h&893o934872384*&(*^&%n"
#我们用到了 str.isalpha 这个函数,用户判断一个值是否为字符串
print filter(str.isalpha,text)
#输出的结果为 ilovepython
下面演示一下 map 高阶函数
# 随机产生 10 个数的列表
l = [random.randint(0,100) for i in range(10)]
#定义一个函数,每个数
def sub50(x):
return x-50
#每个 l 里的元素都会执行一遍 sub50,然后将执行后的结果返回一个 list
list1= map(sub50,l)
3 匿名函数 (lambda)
用法:
#lambda 为关键字,x 和 y 为参数,如果 x <y 则返回 x,否则返回 y
lower = (lambda x,y: x if x <y else y)
lower(2,3)
4 回调函数
将函数作为参数
def func1(callback):
print "func1 begin"
callback()
print "func1 end"
def func2():
print "func2"
func1(func2)
#输出
#func1 begin
#func2
#func1 end
5 闭包和装饰器
闭包:
绑定外部变量的函数
举例
#pow_x 范围内部函数 echo.
def pow_x(x):
def echo(value):
return value ** x
return echo
lst = [pow_x(2),pow_x(3),pow_x(4)]
for p in lst:
#打印 p 的平方、立方、四次方
print p(2)
闭包三个特点
- 嵌套函数,一个外部函数包含一个内部函数
- 内部函数用到了外部变量
- 外部函数返回内部函数
装饰器:
将函数装饰一个,所以需要两个函数,一个充当装饰器,一个重装需要装饰的函数
#coding:utf-8
#装饰器
def decorator(f):
print "before f() called"
return f
@decorator
#被装饰的函数
def myfunc2():
print "my func2() called"
myfunc2()
#打印结果
before f() called
my func2() called
正文完