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

python 函数、函数式编程、变量作用域、函数__doc__属性

2017-08-16 21:25 531 查看

九、python 函数、函数式编程、变量作用域、函数__doc__属性

函数

定义函数:def func(x,y,z=v,*args,**kwargs)

 

参数

参数没有类型,python不做类型检测

不支持重载,python不会区分参数名字和个数

多个同名函数时,后一个会覆盖前一个函数

位置参数和关键字参数(函数调用时)

 

--------------------------------------------------------------

def funA(x,y,z):

    print x,y,z

 

#def funA(x,y,z):

#    print x,y+1,z

 

funA(1,100,True)  #位置参数

funA(y=True,x=100,z='hello') #关键字参数

------------------------------------------------------------

 

常用参数

任意数量的参数: *
和 **

在定义函数时:*
和 **是收集任意个参数

* : 用元组收集任意个不匹配的参数

** : 用字典收集任意个不匹配的参数

def func(*args,**kwargs)

在调用函数时:*
和 ** 是对参数解包

* : 把一个集合打散成多个参数

** :把一个字典打散成多个参数

func(*args,**kwargs)

 

---------------------------------------------------

def funB(x,y,z,*args): #args可以是随便的名字

    print x,y,z

    print args

funB(1,2,3,4,5,6,7,8)

 

def funC(x,y,z,*args,**kwargs): #args可以是随便的名字

    print x,y,z

    print args

    print kwargs

funC(1,2,3,4,5,6,7,8)

funC(1,2,3,4,5,6,7,8,a=9,b='hello',c=True)

 

def funD(x,y,z):

    print x,y,z

x = [1,2,3]

#print funD(x) #参数个数不对

funD(*x)   #*在调用函数时是拆分列表来做参数

y = {'x':100,'y':'hello','z':True}

#print funD(y)  #y或者是*y都不行

funD(**y)

------------------------------------------------

总结

定义函数时,参数的样式

定义函数语法 解释

def func(value) 常规参数

def func(name=value) 默认参数

def func(*list) 用元组收集所有位置参数

def func(**dict) 用字典收集所有关键字参数

def func(*args,**kwargs) 分别收集位置参数和关键字参数

 

 

调用函数时,参数的样式

调用函数语法 解释

func(value) 按照位置进行匹配

func(name=value) 按照关键字(变量名)匹配

func(*list) 把list打散,作为位置参数传递

func(**dict) 把字典打散,作为关键字参数传递

func(*args,**kwargs)
同上

 

注意:

参数传递的是"引用"

函数内部的修改会影响外部

--------------------------------------------------

print 'x=',id(x)  #id()打印对象地址

def funa(a):

    print 'a=',id(a)

    a[1] = 'hello world'

funa(x)

print x,'-------------不想改变则做如下操作'

x = range(1,6)

print 'x=',id(x)

funa(list(x)) #用工厂函数list包装一下,相当于copy一个新的元组

print x

--------------------------------------------------------

 

函数的返回值

函数可以有多个返回值

可以用一个tuple对象接收返回值

也可以用多个变量接收

--------------------------------

def funb():

    return 1,True,'hello'

x,y,z = funb()

m=funb()

print x,y,z

print m

----------------------------------------

 

变量的作用域

LEGB原则:

L(local):函数本地

E(enclose):任意上层的嵌套函数。相当于list里面可以再定义list,

G(global):全局作用域(模块或python文件),importpython文件不算

B(build-in):内置作用域

global:

 

---------------------------------------------------------

x = 10

def fun():

    x = 12  #再注释掉该行试试

    print "in fun:",x

fun()

print x

 

print '--------------'

x = 10

def fun():

    x = 12

    def fun1():

        x=13

        print "in fun1:",x

        return x

    print "in fun:",x

fun()   #fun1() 看看怎么调用(会叫闭包)

print x

 

#global关键字的使用,,方法中修改全局变量

x = 10

def fund():

    #x = 10 #此时x又是一个新的对象

    global x #声明用全局变量

    x += 2

    print "in fun:",x

fund()

print x

---------------------------------------------------------

 

函数的文档属性(函数的帮助文档)

文档属性

定义函数的第一个没有赋值的字符串,可以通过__doc__访问

---------------------------------------------------------

x = 10

def fune():

    '''

       @author:aidon

       @:param

       @desc

       @example

       @:exception

       :return:

       '''

    print "in fun:",x

print fune.__doc__   #函数当成一个对象,有属性

 

-----------------------------------------------------------

 

函数是个对象,可以给函数增加属性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: