zoukankan      html  css  js  c++  java
  • 第九天函数

    ---恢复内容开始---

    一.定义

    形参:在定义函数时括号内的参数,其实就是变量名

    实参:在调用函数时括号内的参数,其实就是变量的值

    举个例子:

    def func(x,y):(x,y就是形参)

    print(x)

    print(y)

    func(10,5):(10和5就是实参)

    二.位置参数

    位置即顺序,就是按位置从左到右的的顺序依次定义的参数

    2.1位置形参:在定义函数时按照位置定义的形参

    def func(x,y,z)

         print(x,y,z)

    注意点:再调用函数的时候必须为其传值,一个也不能多一个也不能少。

    2.2位置实参:在调用函数时,按照位置定义的实参

    func(1,2,3)

    注意:位置实参会和形参一一对应

    三.关键字参数

    定义:在调用函数时以key=value的形式来定义的实参,称之为关键字实参

    def foo(x,y,z)

    print(x,y,z)

    需要注意一下几点:

    1相当于指名道姓的为形参传值,意味着即便不按顺序定义也能够为形参传值

    foo(x=1,y=2,z=3)

    2.在调用函数时,位置实参和关键字实参可以放一起使用但必须遵循以下规则:

    ①必须遵循形参规则

     foo(1,z=3,y=2)

    foo(1,z=3)#少一个参数都不行

    ②不能为同一个形参重复传值

    foo(1,x=1,y=2,z=3)

    ③位置实参必须放到关键字实参前面

    foo(z=3,y=2,1),错

    foo(1,z=3,y=2)

    四:默认参数

    定义:在定义阶段已经为某一个形参赋值,那么该形参就会默认参数

    注意事项:

    ①在定义阶段有值,意味着调用阶段可以不用传值

    ②位置形参必须在默认参数的前面

    ③默认参数的值只在定义阶段赋值一次,也就是说默认参数的值在定义阶段就已经赋值死了

    ④默认参数的值应该设置为不可变类型

    五.可变长度的参数

    定义:可变长指的是实参值的个数不固定
            而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs

    5.1形参中包含

    ①*args:*会将溢出部分的参数全部接收,然后保存成为元组的形式赋值给args

    def func(x,y,z,*args)

    print(x,y,z,args)

    func(1,2,3,4,*[5,6,7,8])

    ②**kwargs:**会将溢出的部分的参数全部接收,然后保存成字典的形式赋值给kwargs

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

         print(x,y)

         print(kwargs)

    foo(1,y=2,a=1,b=2,c=3)

    5.2实参中包含*:就把该实参的值打散

    def foo(x,y,*args):

         print(x,y)

         print(args)

    foo(1,2,*[3,4,5])

     

    def foo(x,y,z)

          print(x,y,z)

    foo(*[1,2,3]) #foo(1,2,3)

    foo(*[1,2])#foo(1,2)#报错

    5.3实参中包含**,就是把实参的值打撒

    def foo(x,y,z):
    print(x,y,z)

    foo(1,**{'z':3,'y':2}) #foo(1,z=3,y=2)
    foo(1,**{'z':3,'y':2,'x':111}) #foo(1,z=3,y=2,x=111)#报错,不能给一个形参多重赋值

    5.4
    组合使用

    def wrapper(*args,**kwargs): #args=(1,2,3),kwargs={'x':1,'y':2,'z':3}
         print(args)
         print(kwargs)
    index(*args,**kwargs) # index(*(1,2,3),**{'x':1,'y':2,'z':3}) # index(1,2,3,z=3,y=2,x=2)

    
    

    wrapper(1,2,3,x=1,y=2,z=3)

    6.命名关键字参数:

    定义:在*后面的参数都是命名关键字参数
    特点:①必须被传值

         ②约束函数的调用者必须用key=value的形式传值

         ③约束函数调用者必须用指定的key名

    例子:

    1.

    def foo(x,y,*,z)

        print(x,y,z)

    foo(1,2)

    foo(1,2,3)

    foo(1,2,z=3)#正确

    2.

    def auth(*args,name,pwd)

    print(name,pwd)
    auth(pwd='213',name='egon')

    7.1函数的嵌套调用:在函数内又调用了其它函数

    例如:

    def max2(x,y):

      if x>y:
        return x

         else:

               return y

    def max3(x,y,z):
      res1=max2(x,y)

      res2=max2(res1,z)

          return res2

    print(max3(11,199,2))

    结果输出:199

    7.2函数的嵌套定义:在函数内又定义其它函数 

    def func1():

          print('from func1')

         def func2(): #func2=内存地址
              print('from func2')

         print(func2) #<function func1.<locals>.func2 at 0x0000024907A098C8>
         func2()
        func2()
        func2()
    func1()

    8.名称空间与作用域

    一.名称空间:存放名字与绑定关系的地方

    二.名称空间分三类:
    1.内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭就失效

    2.全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者文件执行期间被删除则失效

    3.局部名称空间:存放函数内定义的名字(函数的参数内的名字都存放与局部名称空间)在函数调用时临时生效,函数结束时则失效

    加载顺序:内置名称空间==》全局名称空间==》局部名称空间

    查找名字:局部名称空间==》全局名称空间==》内置名称空间

    三.作用域

    ①全局作用域:包含的是内置名称空间与全局名称空间的名字

    特点:1️⃣在任何位置都能访问的到

             2️⃣在该范围内的名字会伴随程序整个生命周期

    ②局部作用域:包含的是局部名称空间的名字

    特点:1️⃣只能在函数内使用

             2️⃣调用函数时生效,调用时结束

    9.函数在python中时第一类对象

    1️⃣可以被引用

    2️⃣可以当作参数引用

    3️⃣可以当作函数的返回值

    4️⃣可以当作容器类型的元素

    10.闭包函数

    1️⃣指的是定义在函数内部的函数

    2️⃣并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数

    作用域关系:在函数定义阶段就规定死了,与调用位置无关

    ---恢复内容结束---

  • 相关阅读:
    CSS 换行
    CSS div仿table样式
    CSS 选择器优先级
    ajax 请求前后处理
    JQuery 数组按指定长度分组
    JQuery .width()/.css("width")方法 比较
    JS 生成唯一值UUID
    JS/jQuery点击某元素之外触发事件
    JS/Jquery关系
    利用Nginxcp为cPanel/WHM服务器开启nginx支持
  • 原文地址:https://www.cnblogs.com/shengg/p/8657596.html
Copyright © 2011-2022 走看看