Python函数基础

函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件

函数用于将相关功能打包并参数化

在Python中可以创建4种函数

全局函数:定义在模块中 //仅限单个文件

局部函数:嵌套于其它函数中

lambda函数:表达式

方法:与特定数据类型关联的函数,并且只能与数据类型关联一起使用

Python提供了很多内置函数

语法

def functionName(parameters)

suite

一些相关的概念

def是一个可执行语句

因此可以出现在任何能够使用语句的地方,甚至可以嵌套于其它语句,例如if或while中

def创建了一个对象并赋值给一个变量名(即函数名)

return用于返回结果对象,其为可选;无return语句的函数自动返回None对象

返回多个值时,彼此间使用逗号分隔,且组合为元组形式返回一个对象

def语句运行之后,可以在程序中通过函数后附加括号进行调用

Python函数作用域

Python创建、改变或查找变量名都是在名称空间中进行过

在代码中变量被赋值的位置决定了其能被访问到方位

函数定义了本地作用域,而模块定义了全局作用域

1.每个模块都是一个全局作用域,因此,全局作用域的范围仅限于单个程序文件

2.每次对函数的调用都会创建一个新的本地作用域,赋值的变量除非声明(global)为全局变量,否者均为本地变量。

3.所有的变量名都可以归纳为本地、全局或内置的(由_bultin_模块提供)

变量名解析:LEGB原则

变量名引用分三个作用域进行:首先是本地、之后是函数内、接着是全局、最后是内置

local(funtion)\Enclosin function locals\Global(module)\Builtt-in(Python)

Python的闭包:

定义在外层函数内,却又在内层函数引用的变量,在外层函数返回时,如果说外层函数直接返回了内层函数作为返回结果,再次调用外层函数,可以直接仍然使用外层函数的变量。

函数的参数

def functionName()

l1 = [1,2,3]

def f4(x):

x.pop()

print x

f4.(l1)

f4.(l1[:]) //区别

参数传递形式

1位置参数:从左到右

2关键字参数:按关键名称匹配

混用上面两种方式时:所有位置参数在前,所有关键字参数

3默认参数:定义函数时使用"name=value"的语法直接给变量一个值,从而传入的值可以少于参数个数

混用默认和无默认值的参数时,无默认值放前面

4可变参数:定义函数使用*开头的参数,可用于收集任意多基于位置或关键字的参数。

def f1(*x) def f1(**x) 一个传参数,一个传字典 因此参数中不能有name=value

5可变参数解包:调用函数时,使用*开头的参数,可用于将参数集合打散,

匿名参数lambda

lambda运算符

lambda args:expression f20 = lambda x,y: x + y

args: 以逗号分割的参数列表

expression:用到args中各参数的表达式

lambda语句定的代码必须是合法的表达式,不能出现多条件语句(可使用if的三元表达式)和其他非表达十语句,如for和while等

lambda的首要用途是指短小的回调函数

lambda将返回一个函数而不是将函数赋值给某个变量名

注意1.lambda是一个表达式而非语句

2.lambda是一个单个表达式,而不是一个代码块。

def 语句创建的函数将赋值给某变量名,而lambda表达式则直接返回函数

def testFunc(x,y,z):return x+y+z testFunc(4,5,6)

lambda也支持使用默认函数

f20 = lambda x,y,z: x + y + zf(4,5,6)

f20 = (lambda x,y,z=10: x + y + z) f(4,5)

l3 = [(lambda x: x*2),(lambda y: y*2)]

for i in l3:

print i(4)

Python函数式编程

也称为泛函编程,是一种编程范型

它将电脑运算是为教学上的函数计算,并且避免状态以及可变数据

函数式编程语言的基础是lambda演算,而且lambda演算的函数可以接收函数作为当作输入和输出

Python支持有限的函数式编程功能

1.过滤器

filter() 为已知的序列的每个元素调用给定的布尔函数

调用中,返回值为非零值的元素将被添加至一个列表中

def f1():

2.映射器

map()将

yield 和生成器

def genNum(n):

while i > n:

yield i ** 2

i+=1

g1 = genNum(20)

for i in g1:

装饰器:

1.装饰器本身是一个函数,用于装饰其它函数

2.功能:增强被装饰函数的功能

装饰器一般接收一个函数对象作为参数,对其进行增强

def deco(func):

def wrapper():

print "plz say someting:"

func()

return wrapperprint "Nozuo dodai"

@deco

def show():

return "i am from Mars"

递归:

递归需要边界条件,递归前进段和递归返回段:

def fact(n):

if n

else:return n*fact(n-1)

fact(3)

协程:

函数的设计规范

耦合性

1.通过参数输入,以及通过return产生输出以保证函数的独立性

2.尽量减少使用全局变量今昔你个函数间通信:

3.不要在函数中修改可变类型的参数:

4.避免直接改变定义在另外一个模块中的变量

聚合性

1.单个函数都应该有一个单一的,统一的目标

2.每个函数的功能都应该相对简单

———————————————————————————————————————————————————————————

做有思想的新青年

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171220G0WIP400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励