函数和函数式编程

1.定义函数

def functionname(x,y,z,*args,**kwargs)python

2.参数

  • 参数没有类型,python不作类型的检查
  • 不支持重载,python不区分函数的名字和个数;在python中多个同名的函数,后一个会覆盖前面的一个
  • 位置参数和关键字参数的调用

位置参数匹配代码示例:

>>> def funa(x,y,z):
...     print x,y,z
... 
>>> funa(1,2,3)
1 2 3函数


关键字参数匹配代码示例:

>>> funa(x=1,y=4,z=8)
1 4 8
>>> 
3.任意参数的匹配ui

格式:def funa(*args,**kyargs):spa

定义时两个符号的做用:.net

"*"用元组收集没有匹配到的参数,返回一个元组htm

示例代码ci

>>> def funa(x,y,z,*arges):
...     print x,y,z
...     print arges
... 
>>> funa(1,2,3,4,5,6)
1 2 3
(4, 5, 6)
>>> 作用域

在调用的时候“*”会把元组拆开匹配到函数的参数中文档

In [1]: def funa(x,y,z):
   ...:     print x,y,z
   ...:    io

In [2]: x=[1,2,3]

In [3]: funa(*x)
1 2 3

“**”用字典收集没有匹配的参数,返回一个字典

>>> def funa(x,y,z,**kyarges):
...     print x,y,z
...     print kyarges

>>> funa(1,2,3,a=3,b='hello')
1 2 3
{'a': 3, 'b': 'hello'}
>>> 
在“**”的调用中会把字典拆开,匹配到函数的参数中

In [9]: def funa(x,y,z):
   ...:     print x,y,z
   ...:    

In [10]: A={"x":1,"y":2,"z":3}

In [11]: funa(**A)
1 2 3

注意调用和定义函数的格式

调用函数 定义函数
   
   

 

参数

如下是调用函数时可以使用的正式参数类型:

  • 必备参数
  • 关键字参数
  • 默认参数
  • 不定长参数

必备函数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的同样

关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来肯定传入的参数值。

使用关键字参数容许函数调用时参数的顺序与声明时不一致,由于 Python 解释器可以用参数名匹配参数值。

默认参数

默认参数若是在调用时没有赋值,则按默认的值调用

不定长参数

不定长参数即*arges和**kyarges

注意:如何辨别一个参数的性质?

参考此博文:http://www.jb51.net/article/64966.htm

 

函数的参数传递,内外变化

In [24]: x=range(1,9)

            print ‘x=’,id(x)

In [25]: def funa(a):

    ...:      print ‘a=’,id(a)
    ...:     a[1]='hello word'
    ...:     print a
    ...:    

In [26]: funa(x)#funa(list(x))不变
[1, 'hello word', 3, 4, 5, 6, 7, 8]

In [27]: print x
[1, 'hello word', 3, 4, 5, 6, 7, 8]

函数的返回值

python返回值有多个,但实际是返回的一个元组。

函数变量的做用域

定义在函数内部的变量拥有一个局部做用域,定义在函数外的拥有全局做用域局部变量只能在其被声明的函数内部访问,而全局变量能够在整个程序范围内访问。调用函数时,全部在函数内声明的变量名称都将被加入到做用域中。

legb原则:

L(local)本地函数

E(enclose)任意上层的嵌套函数

G(global)全局做用域(一个python文件中,跨文件不能够)

B(build-in)内置做用域

In [36]: t=0

In [38]: def sum (x,y):
    ...:     t=x+y
    ...:     print"函数内变量:",t
    ...:     return t
    ...:

In [39]: sum(10,20)
函数内变量: 30
Out[39]: 30

In [40]: print t
0

函数内要使用全局变量必须使用global进行定义;函数外的变量至关于一个全局变量,能够使用这个方法去改变全局变量的值。

文档属性

文档的使用说明,帮助属性。能够使用注释加文字。

打印时使用print 函数名+__doc__

相关文章
相关标签/搜索