Python核心编程阅读笔记(十一)

     Python函数使用过程中的几个疑点。

1.返回值与函数类型

       通常情况下我们都认为Python函数可以返回多个对象,其实Python返回的是一个元组。看一下下面的例子:

       test.py:

       def bar():

return "123","abs","vbn"

            testy = bar()

            print testy

            x,y,z = bar()

            print x,y,z

        运行结果:("123","abc","vbn")    123  abs vbn

      testy直接获得了函数隐式返回的整个元组,x,y,z则分别获得了与之对应的返回值。在Python函数中,当没有显式 的返回元素或者None时,Python会返回一个None,那么调用者接收的就是Python返回的那个对象,而且对象的类型不变。如果函数返回多个对象,Python把它们聚集起来以一个元组返回。尽管我们 声称Python比C那种只返回一个元素的语言灵活的多,但它也遵循相同的传统,只是让程序员误以为可以返回多个对象

       许多静态语言主张函数的类型就是返回值的类型,但Python是动态类型语言,Python动态的确定类型而且能返回不同类型的值,所以Python的函数没有类型

2.函数参数

    在很多地方看到这样的函数func(*agr, **kwargs),一开始不明白这样的参数表示什么意思,原来*agr表示的是传入的参数是元组,**kwargs表示传入的是字典,也就是Python允许程序员执行没有显式定义参数的函数。

   from operator import add,sub

   def testy(*arg, **kwargs):

           print arg, kwargs

           print kwargs[+"](arg[1], arg[2])

           print kwargs["-"](arg[3], arg(0))

    argsT = [1,2,3,4]

    argsD = {"+":add, "-":sub}

    testy(*argsT, **argsD)

   运行结果:(1, 2, 3, 4) {'+': <built-in function add>, '-': <built-in function sub>}
                       5
                       3

3.函数闭包和装饰器

       当一个内部函数调用外部函数定义的对象的时候,这个函数就成为闭包。装饰器的语法是以@开头,接着是装饰器的函数名字和可选参数,紧跟着装饰器的是被修饰的函数的名字和装饰函数的可选参数,装饰器看起来是这样的:

      @decorator(dec_opt_args)

       def func2Bdecorated(func_opt_args):

                pass

使用多个装饰器的例子:

        @decor1

        @decor2

        def func(args):  pass

这种用法相当于:decor2(decor1(func)) 。装饰器的作用就是修饰一个函数然后返回另外一个函数对象

4.匿名函数与lambda

    lambda [arg1,[, arg2,...,argn]] : expression

   lambda表达式返回一个可调用的函数对象

   >>>a = lambda x,y: x+y

   >>>a(3,4)

           7

   >>>b = lambda *z : z

   >>> b(23,"asd")

            (23, "asd")

  >>> b(23)

             (23,)

   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值