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

python的函数---python入门学习(三)

2016-12-08 11:00 232 查看
    从实用角度出发,根据数据挖掘中最长使用的语法和数据类型出发,对python进行学习,主要包含一下几个模块:数据类型、文件系统、函数、类和对象。学习了一段时间python之后,python相较于matlab最大的区别是编程思想和BIF。由原来的面向过程到现在的面向对象,python无处不对象,这句话体会会随着对python的了解而更加深刻。初学难免有疏漏或者错误,欢迎大家指正。

函数  

有C语言或者其他编程语言基础,对函数都不会陌生,这里只是关注一些和C语言不一样的点

1. 关键字参数

调用的时候添加上关键字,python就不会按照顺序去索引参数了,而是用关键字去索引

def add(num_1,num_2):

    return num_1+num_2

add(num_1 = a,num_2 = b) 

 
2. 默认参数 

def add(num_1 = 1,num_2 = 0):

    return num_1+num_2 

add(num_2 = 5)  得到的结果是 6  

  
3. 全局变量与局部变量  

全局变量是存在堆区,作用域是整个代码段,代码段的任意函数都可以访问到全局变量,但是,在函数内部仅仅去访问全局变量就好,不要试图去改变它,因为那样的话,python会使用屏蔽的方式“保护”全局变量,程序会在栈内重新创建一个同样名称的局部变量来代替。对变量进行修改,只是栈区的局部变量,对全局变量没影响。

如何改变这种情况?在函数内用global关键字来声明变量,强制声明这是全局变量,此时函数内部操作的变量就是全局变量。

4. 内嵌函数和闭包

python的函数定义允许嵌套,即在函数内部创建另一个函数

def fun1():

    print(fun1正在被调用)
def fun2():
   print(fun2正在被调用)
fun2()  

闭包:内部函数只能对外部函数的变量进行引用,而不改变外部函数变量

def funx(x):

    def funy(y):
   return x*y
return funy()

i = funx(5)

i(8)

或者 funx(5)(8)

def fun1():

    x = 5

    def fun2():

        x *= x
return x
return fun2()

执行fun1()

上面的这个小程序会报错,错误是因为:fun2中使用x的时候会重新声明一个局部变量在栈里,

而这种操作是还没有声明直接使用了,所以会有错。解决方法是,声明这个变量是nonelocal的

即:

def fun1():

    x = 5

    def fun2():
   nonlocal x

        x *= x
return x
return fun2()

总结:只要是在一个新的函数里面使用到的变量都是在栈区里面定义的,跟全局变量在堆区是不一样的,栈区的代码不能使用堆区的变量,如果要是使用的话需要特别声明,比如上面需要使用到外部的变量则需要声明这个是nonlocal的。

5. lambda表达式

不用考虑命名问题:对于比较抽象并且执行下来只需要一两次的函数,有时候给函数起个名字是件头疼的事,使用lambda表达式不需要考虑命名的问题。
简化代码可读性:使用lambda表达式不需要看函数的定义跳到def的部分。

>>> g = lambda x:x*2+1

>>> g(5)

11

6.两个很有用的函数---filter()和map():

filter(function or none,iterable):

filter()有两个参数,第一个参数可以是一个函数,也可以是none,如果是一个函数的话,后面的可迭代数据中的元素会挨个作为前面函数的变量,进行计算,返回为true的元素留下。

>>> list(filter(lambda x:x%2,range(10)))

[1, 3, 5, 7, 9]

map(funtion,iterable):

map()有两个参数,第一个参数是一个函数,第二个参数是一个可迭代的对象(序列),将序列的每一个元素作为函数的参数进行计算,然后返回计算的结果所构成的新的序列。  

>>> list(map(lambda x:x*2,range(10)))

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: