您的位置:首页 > 编程语言 > Python开发

<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即可


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: