python函数

函数产生

减少重复代码使用

使代码逻辑性更强

函数定义

1 def function(参数):
2     pass
3     return 结果
View Code

参数传递

传值:整数、字符串、元组。传递的只是值,没有影响a对象本身。比如在 function(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

传址:列表,字典。如 function(a),则是将 a 真正的传过去,修改后fun外部的la也会受影响。这里主要是深浅拷贝,以列表为例,因为a指向的是列表作为整体的地址,列表本身中的元素,又指向元素本身存储的地址。列表元素的变化不会影响列表做为整体的地址变化。

函数参数分类

必须参数

参数必须选择;顺序不能有错误;参数类型需要正确。

关键字参数

顺序不做要求;需要使用关键字来明确传入的数据。

默认参数

如果没有传递参数,则使用默认参数,如果定长参数,默认参数必须放在最后,不定长参数需要放在参数的最左边。

不定长参数

 传入的参数超过函数定义的参数,

function(*args, **kwargs),顺序位置很重要,*args参数要放在左边,*kwargs参数要放在右边

简单理解:参数的优先级为必须,默认,元组,字典。

如果传入列表,列表前面需要加上符号*,否则整个列表作为单个元素传入到函数中;字典同样如此。

函数返回值

返回某种数据类型,如果有多个数据,则会返回元组。

返回的内容给调用者

结束函数

函数作用域

LEGB

local局部作用域,函数中定义的变量

enclosing嵌套的父级函数局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的。

global全局变量,就是模块级定义的变量。

built_in,系统固定模块里面的变量。

作用域的优先顺序

作用域局部>外层作用域>当前模块中的全局>python内置作用域

函数本身

函数名能进行赋值,因为函数名字是变量。

函数名可以作为函数参数,还可以作为函数的返回值。

关键字

global,全局作用域变量声明

nonlocal,外层作用域变量声明

高阶函数

满足函数名可以作为参数输入;函数名还可以作为返回值。

递归函数

如果一个函数在内部调用自身本身,这个函数就是递归函数。

必须有函数的出口,也就是结束条件。

使用递归的程序,循环都能解决。

递归效率低下,不推荐使用。

filter(function, iterable)

过滤序列,过滤掉不符合条件的元素,返回符合条件的迭代器对象。

map(function, iterable, ....)

根据提供的函数对iterable里面的每个元素处理返回迭代器对象。

reduce(function, iterable[, iterable])

根据function函数先对iterable里面前两个元素进行操作,返回的额结果再与第三个元素操作,依次类推,返回一个结果。

lambda x, y: x+y

洛必达匿名函数,实际上是个表达式,返回的是一个结果。

 

 

 

 

 

 

 

posted on 2018-03-23 09:55  Artisan正传  阅读(82)  评论(0)    收藏  举报