• python基础-函数


    1.可变长参数:在调用函数时,实参值得个数不固定

       实参的形式有:位置实参和关键字实参

       形参的解决方案为 *,**

       位置形参例子:

      def foo(x,y,*args):

                print(x,y)
                print(*args)

           foo(1,2,*[3,4,5,6,7])
           #先将位置打散(1,2,3,4,5,6,7)在一一对应
        关键字形参例子,会被**保存成字典的形式

           def foo(x,y,**kwargs):

                 print(x,y)

                 print(kwargs)

      foo(x=1,**{'y':2,'a':3,'b':4,'c':5})
    #先将位置打散在一一对应
    #foo(x=1,y=2,a=3,b=4,c=5)

    2.函数对象函数是第一类对象:指的是函数可以当数据传递

          1.可以被引用 x=1,y=x

               def func(x,y):

                        print(x,y)

                 f=func

                 f(1,2)

          2.可以当做函数的参数传入

                def foo():

                      print('aaa')

                def  bar(func)

                      print(func)

                bar(foo)

          3.可以当做函数的返回值

                def foo():

                      print('aaa')

                def  bar():

                     return foo

               f=bar()

               f()

          4.可以当做容器类型的元素

             def foo():

                   print('aaa')

            def bar():

                   return foo

            l=[foo,bar]

            l[0]()

    3.函数的嵌套调用:调用了一个函数的过程中又调用了另一个函数

    def my_max(x,y):

           if x>=y:
    return x
    else:
    return y
    def max_max4(a,b,c,d):
    res1=my_max(a,b)
    res2=my_max(res1,c)
    res3=my_max(res2,d)
    return res3
    a=max_max4(5,6,4,2)
    print(a)
    1函数的嵌套定义:内部定义的函数还是要在内部调用
    def fu1():
    def fu2():
    print(fu2)
    2.名称空间:存放名字的地方,通过名字拿到内存地址后调用方法
    1.内置命名空间(解释器启动就有) python内置解释器内置的名字如len max min
    2.全局名称空间(执行Python文件时生效)
    3.局部名称空间(函数调用时生效,结束失效) 函数内部定义的名字
      加载顺序 内置》》》》全局》》》》局部名称空间
    访问名字的顺序:局部名称空间==》全局===》内置

            

          #全局作用域:(全局范围)内置名称空间与全局名称空间的名字,全局有效(globals())

            globals将变量设置为全局变量

          #局部作用域:(局部范围)局部名称空间的名字,局部有效locals()

       nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量

          #打破函数层级限制来调用函数:通过对象的概念

               def outter():

                     def inner():

                          print('inner')

                     return inner

              f=outter()

              f()

          #函数的作用域关系是在函数定义阶段就已经固定了,与调用位置无关

             x=111

             def outter():

            def inner():
    print('inner',x)
    return inner
    f = outter()
    def bar():
    f()
    x=1111111111111111111111
    bar()

    4.闭包函数:1.定义在函数内部的函数2.该函数的函数体代码包含对外部作用域(而不是全局作用域)名字的引用

                         3.通常将闭包函数用return返回,然后可以在任意使用

    5.无参装饰器

             1.开放封闭原则:对扩展开放,对修改是封闭的

             2.装饰它人的,器指的是任意可调用对象,现在的场景装饰器------>函数

                原则:1.不修改被装饰对象的源代码 2.不修改被装饰对象的调用方式

                装饰器的目的:在遵循1,2的前提下为被装饰对象添加上新功能

                在被装饰对象的正上方写上@装饰器名

         def timmer(func):
    def inner():
    start=time.time()
    func()
    end=time.time()
    print('run time is %s'%(end-start))
    return inner
    '''当解释器读取到@时会将@下方的函数名当做参数
    传递给timmer'''
    @timmer #==index=timmer(index)
    def index():
    time.sleep(3)
    print('welecome to index')
    index()
    1.1inner函数带返回值

            import time
            def timmer(func):
                  '''inner函数带返回值'''
                 def inner():
                    start=time.time()
                    res=func()
                    end=time.time()
                    print('run time is %s'%(end-start))
                 return res
            return inner
             '''当解释器读取到@时会将@下方的函数名当做参数
               传递给timmer'''
             @timmer #==index=timmer(index)
             def index():
                   time.sleep(3)
                   print('welecome to index')
                  return 1111
           res=index()
           print(res)

      1.2inner函数传参
       import time
       def timmer(func):
          def inner(*args,**kwargs):
               '''inner函数传参'''
                start=time.time()
                res=func(*args,**kwargs)
                end=time.time()
                print('run time is %s'%(end-start))
           return res
        return inner
         '''当解释器读取到@时会将@下方的函数名当做参数
           传递给timmer'''
         @timmer #==index=timmer(index)
       def home(name):
             print('welecome %s to index'%name)
       home('aa')

  • 相关阅读:
    2017/09/02笔记:ps
    207/08/3学习笔记:pc端网站如何实现移动端适配知识点
    2017/0828xueix笔记:图像替代文本&css绘制的图形
    20170824:面试题笔记
    目前比较全的CSS重设(reset)方法总结
    学习笔记:css3实现多行文字溢出显示省略号&display:box;
    SVG圆形<circle> 标签
    k8s节点分配nodeSelector, Affinity和Anti-Affinity 亲和性和反亲和性
    kubernetes网络介绍
    centos6.7 安装docker
  • 原文地址:https://www.cnblogs.com/lixiaoting/p/11926408.html
Copyright © 2020-2023  润新知