Python学习笔记_函数

1、函数文档,在函数定义开头的字符串,一般介绍接口,fun.__doc__()查看。

2、关键字参数,fun(name=" "),可使用默认参数值。

3、可变参数,*args,**kargs,python只接受元组、字典格式的参数,可变参数一般放在参数列表的末尾,若要放在中间,后面的参数最好使用关键字。

4、python的函数均有返回值,无return也会返回None对象。

5、全局/局部变量

      

    在函数作用域内访问全局变量是可以的,但感觉若想改变全局变量的值则不被允许。图中,a,b,c三个全局变量,企图在函数func内部改变他们的值,a=10后打印出来的值仍然是10,因为函数内部a=10创建了一个局部变量a,所以全局变量没有被改变。我的理解是判断一个全局变量否被改变是看id是否变化,所以b[0]的值被改变,因为b的id未变化,变化的是b[0]的引用。python当然也提供了改变的方法,就是在函数内部利用global关键字,如c。

6、闭包

看了各种说法简直凌乱,个人理解是在一个函数中定义内定义另一个函数,在内嵌函数中引用了上层函数的对象就产生了闭包。

如图,在内嵌函数func2中引用了func1的便产生了闭包环境,在func2中企图改变x的值时会报错,报的错误是x在使用前不存在。

发现解决的方法有两种,在Python2中,只能将y改为列表就可以了,我的理解是原理跟上面一样(有的参考资料说是因为列表的存储不在函数的栈内,可能这个才是正确的吧,但这个是什么鬼,不懂啊哭,后面填坑)。在Python3中,就给出了nonlocal关键字的解决方法,类似global,从字面意思上来看一个是申明为全局变量,一个是申明为非局部变量。

7、lambda表达式

用来制造匿名函数,在函数作为参数时很方便。例如Python内建函数filter(),map()。

filter():第一个参数可以是默认的也可以是一个函数,将第二个参数中的每一个对象放到第一个函数里进行计算,返回为True的值。

map():将第二个参数中的每一个对象放到第一个函数里进行计算,返回所有值。

图中,lambda x: x%2 等价于下面的定义。

猜你喜欢

转载自blog.csdn.net/Torero_lch/article/details/77963599