<PY><core python programming笔记>C11 函数和函数式编程
2014-05-23 21:23
776 查看
C11 函数和函数式编程
#全局变量不需要传入啊,全局都可以使用-->函数,更改也在全局
11.1什么是函数
Python中过程就是函数,因为解释器可以隐式返回None
可以返回的对象有 None,obj,tuple #没有return就是None,return就结束了
11.2调用
foo(3)
foo(num=3,'b') #可以直接指定到参数位置
11.3创建函数
def hello(who):
"return a salutory string customized with the input"
return "hello "+str(who)
#声明和定义是一体的
#应用是前向的,之前被定义的才可以使用
#不同命名空间的函数是可以同名的
#函数可以内嵌,函数定义也可以嵌套
#可以用@提供装饰器
11.4传递函数
函数是可以被调用的,可以直接做给另一个函数的参数(这个与C语言有所不同)
11.5形参
可以使用位置参数(按顺序),关键字参数(使用时可以把位置用作关键字),默认参数(使用=即可)
默认参数可以被覆盖
11.6可变长参数
#非关键字可变长参数(元组),调用时该参数前加*
必须在位置和默认参数之后
def functionname([formal_args,]*vargs_tuple)
#关键字变量参数(字典),调用时该参数前加**
def dictVarArgs([formal_args,][*vargs_tuple]**vargsed_dict)
11.7函数式编程
#Python不是函数式编程语言,但也可以支持
lambda匿名函数
add=lambda x,y:x+y
filter过滤函数 (不常用),可用解析法替代
map()映射函数 map(functionname,,)
>>>map(lambda x:x+2,range(6))
[0,1,4,9,16,25] #替代[x**2 for x in range(6)]
>>>map(lambda x,y:x+y,[1,3,5],[2,4,6])
[3,7,11]
>>>map(lambda x,y:(x+y,x-y),[1,3,5],[2,4,6])
[(3,-1),(7,-1),(11,-1)]
>>>map(None,[1,3,5],[2,4,6])
[(1,2),(3,4),(5,6)] #zip([1,3,5],[2,4,6])
reduce()减少参数逐一计算
reduce(f,[1,2,3])相当于f(f(1,2),3)
partial()偏函数指定默认操作
add1=(add,1)
base2=partial(int,base=2) #指定传入的int数据是二进制的
11.8变量作用域
#优先搜索局部变量,向外层搜索
#可以使用global 强制使用或引用为全局变量
11.9递归
def factorial(n):
if n==0 or n==1:
return 1
else:
return (n*factorial(n-1))
11.10生成器
def simpleGen():
yield 1
yield '2-->punch!'
11.10.2加强生成器
def counter(start_at=0):
count=start_at
while True:
val=(yield count)
if val is not None:
count=val
else:
count+=1
注:要跳出一个函数使用 return即可
C11 函数和函数式编程
#全局变量不需要传入啊,全局都可以使用-->函数,更改也在全局
11.1什么是函数
Python中过程就是函数,因为解释器可以隐式返回None
可以返回的对象有 None,obj,tuple #没有return就是None,return就结束了
11.2调用
foo(3)
foo(num=3,'b') #可以直接指定到参数位置
11.3创建函数
def hello(who):
"return a salutory string customized with the input"
return "hello "+str(who)
#声明和定义是一体的
#应用是前向的,之前被定义的才可以使用
#不同命名空间的函数是可以同名的
#函数可以内嵌,函数定义也可以嵌套
#可以用@提供装饰器
11.4传递函数
函数是可以被调用的,可以直接做给另一个函数的参数(这个与C语言有所不同)
11.5形参
可以使用位置参数(按顺序),关键字参数(使用时可以把位置用作关键字),默认参数(使用=即可)
默认参数可以被覆盖
11.6可变长参数
#非关键字可变长参数(元组),调用时该参数前加*
必须在位置和默认参数之后
def functionname([formal_args,]*vargs_tuple)
#关键字变量参数(字典),调用时该参数前加**
def dictVarArgs([formal_args,][*vargs_tuple]**vargsed_dict)
11.7函数式编程
#Python不是函数式编程语言,但也可以支持
lambda匿名函数
add=lambda x,y:x+y
filter过滤函数 (不常用),可用解析法替代
map()映射函数 map(functionname,,)
>>>map(lambda x:x+2,range(6))
[0,1,4,9,16,25] #替代[x**2 for x in range(6)]
>>>map(lambda x,y:x+y,[1,3,5],[2,4,6])
[3,7,11]
>>>map(lambda x,y:(x+y,x-y),[1,3,5],[2,4,6])
[(3,-1),(7,-1),(11,-1)]
>>>map(None,[1,3,5],[2,4,6])
[(1,2),(3,4),(5,6)] #zip([1,3,5],[2,4,6])
reduce()减少参数逐一计算
reduce(f,[1,2,3])相当于f(f(1,2),3)
partial()偏函数指定默认操作
add1=(add,1)
base2=partial(int,base=2) #指定传入的int数据是二进制的
11.8变量作用域
#优先搜索局部变量,向外层搜索
#可以使用global 强制使用或引用为全局变量
11.9递归
def factorial(n):
if n==0 or n==1:
return 1
else:
return (n*factorial(n-1))
11.10生成器
def simpleGen():
yield 1
yield '2-->punch!'
11.10.2加强生成器
def counter(start_at=0):
count=start_at
while True:
val=(yield count)
if val is not None:
count=val
else:
count+=1
注:要跳出一个函数使用 return即可
相关文章推荐
- <PY><core python programming笔记>C21 数据库编程
- <PY><core python programming笔记>C17 网络客户端编程
- <PY><core python programming笔记>C19 图形用户界面编程
- <PY><core python programming笔记>C12 模块
- <PY><core python programming笔记>C2 快速入门
- <PY><core python programming笔记>C8 条件与循环
- <PY><core python programming笔记>C14 执行环境
- <PY><core python programming笔记>C6 序列:字符串和列表和元组(三)
- <PY><core python programming笔记>C4 Python对象
- <PY><core python programming笔记>C9 文件和输入输出
- <PY><core python programming笔记>C6 序列:字符串和列表和元组(二)
- <PY><core python programming笔记>C20 Web编程
- <PY><core python programming笔记>C7 字典和集合类型
- <PY><core python programming笔记>C18 多线程编程
- <PY><core python programming笔记>C10 错误和异常
- <PY><core python programming笔记>C3 Python基础
- <PY><core python programming笔记>C5 数字
- <PY><core python programming笔记>C16 网络编程
- <PY><core python programming笔记>C13 面向对象编程
- <PY><core python programming 笔记>C1 概述