python.day10

本周内容:

  day01:函数的基本使用

    1、先定义,后调用

    2、函数参数的使用

      形参

        位置形参

        默认形参

      实参

        位置实参

        关键字实参

      *与**在实参与形参中的应用

  day02:函数的核心

    1、函数对象

    第一类对象(第一等公民)

    2、函数的嵌套

    3、名称空间与作用域(******)

        名称空间与作用域的关系是在函数定义阶段就确立的,与调用位置无关

    4、闭包函数 = 函数对象 + 函数嵌套 + 名称空间与作用域

  day03:装饰器

    1、无参装饰器

    2、有参装饰器

  day04:迭代器与生成器

    1、迭代器

    2、生成器——>自定义的迭代器

    3、三元表达式

    4、生成式

  day05:函数剩余

    1、函数递归——>重复执行代码

    2、匿名函数lambda

    3、匿名函数与内置函数的结合使用map、filter、reduce

    4、其他内置函数

一、函数介绍

  1、什么是函数

    ps:函数就是盛放实现某一功能的容器

    具备某一功能的工具就叫函数

    事先准备工具的过程称之为函数的定义

    遇到应用场景拿来就用称为函数的应用

    所以函数的使用原则:先定义,后调用

  2、为何要用函数

    解决下列问题

    1、代码组织结构越来越不清晰,可读性差

    2、代码可扩展差

    3、

  3、如何用函数

    定义的语法:

      def 函数名(参数1,参数2,参数3,...):

        """函数的文档注释"""

        代码1

        代码2

        代码3

        return 返回值

    调用的用法

        函数名()

二、定义函数

x = 10

      def 函数名(参数1,参数2,参数3,...):

        """函数的文档注释"""

        代码1

        代码2

        代码3

        return 返回值

  强调:定义函数只检测语法,不执行代码

  定义函数发生的事情:

  1、申请内存空间把函数体代码放进去

  2、将函数内存地址绑定给函数名

    def login():  #login = 函数的内存地址

      print(11111)

      print(22222)

      print(33333)

    print(login)  #输出login的内存地址

三、调用函数

  login()

  发生的事情:

  1、先通过函数名定位到函数的内存地址

  2、函数内存地址()——>触发函数体代码的运行

  强调:调用函数才会执行函数体代码

  例如:

  def func():

    print(11111

  例2:

  def func():

    print(11111)

    asdasd

    print(22222)#无语法错误,但是有逻辑错误,在执行时才会提示错误

四、定义函数的三种形式

  1、无参

    def func():

      print('xxxxx')

    func()

    例如:

    def say():

      print('==========')

      print('welcome')

      print('==========')

    say()

  2、有参

    def func(x):

      #x = 1111

      print(x)

    func(1111)

    例如:

    def max2(x,y):

      x = 10

      y = 20

      if x > y:

        print(x)

      else:

        print(y)

  3、空

    def login():

      pass

五、调用函数的三种形式

  1、语句

  len('hello')

  2、表达式

  res = len('hello')* 10

  print(res)

  3、可以当做参数传给另外一个函数

  print(len(''hello''))

六、函数参数

  1、形参:在函数定义阶段括号内指定的参数,称之为形式参数,简称形参——>变量名

  2、实参:在函数调用阶段括号内传入的值,称之为实际参数,简称实参——>变量值

  def func(x,y):  #形参

    print(x,y)

  func(12,34)  #实参

  形参与实参的关系是:

  在调用函数时,实参值会绑定给形参名,在函数调用完毕后解除绑定

  细分的话。。。

    (1)位置形参:

      在定义函数时按照从左到右的顺序以此定义的变量名,称之为位置形参

      特点:必须被赋值

      def func(x,y):

        print(x)

        print(y)

      func(1,2)

    (2)位置实参:

      在调用函数时,按照从左到右的顺序依次传入的值,称之为位置实参

      特点:按照位置为形参赋值,一 一对应

    (3)关键字实参:在调用函数时,按照key=value的形式传值,称之为关键字实参

      特点:可以打乱顺序,但是仍然能够指名道姓的为指定的参数赋值

      func(y=21,x=20)

      #注意:可以混用位置实参与关键字实参,但是

      1>位置实参必须在关键字实参的前面

      2>不能为同一形参重复赋值

      func(''egon'',y = 20)   #正确

      func(y = 20,''egon'')#语法错误

      例如:def foo(x,y,z)

           pass   

         func(1,y=2,3)  #语法错误

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

         func(1,y=2,z=3)  #正确

         func(1,y=2,z=3,x=2)  #错误

    (4)默认形参:在定义函数时,就已经为某个形参赋值了,称之为默认形参

      特点:调用函数时,可以不用为其赋值

      def func(name,age=18):

        print(name)

        print(age)

      func('egon')  #egon 18

      func('egon',19)  #egon 19

      #注意:可以混用位置形参与默认形参,但是

      1>位置形参必须在前面

      2>默认形参的值,通常应该是不可变类型的

      3>默认形参的赋值是在函数定义阶段赋值的

    (5)可变长参数:

      可变长参数指的是在调用函数时,传入的实参个数不固定,对应着必须有特殊形式的形参来接收溢出的实参

      溢出的位置实参——>*

      溢出的位置关键字实参——>**

      1>*在形参中的应用,*会将溢出的位置实参合并成一个元组,然后赋值给紧跟其后的那个形参名

      def func(x,*args):    # args = (2,3,4,5)

        print(x)

        print(args)

      func(1,2,3,4,5)

      2>**在形参中的应用,**会将溢出的关键字实参合并成一个字典,然后赋值给紧跟其后的那个形参名

      def func(x,**kwargs):    #kwargs = {''a'':2,"c":4,"b":3}

        print(x)

        print(kwargs)

      func(1,a=2,b=3,c=4)

      3>*在实参中的应用,是一种打散行为,*会将紧跟其后的那个值打散成位置实参

      func(*[11,22,33])  #func(11,22,33)

      func(*'hello')  #func(''h'',''e'',''l'',''l'',''o'')

      func(*{'k1':1111,'k2':2222}  #func(''k1'',''k2'')

      4>**在实参中的应用,**只能跟字典类型,**会将字典打散成关键字实参

      func(**{'k1':111,'k2':222})  #func('k2'=222,'k1'=111)

七、函数的返回值

  return详解:

  1、函数可以有多个return,但只要执行一次return,整个函数就立即结束,并且将return后的值当做本次调用的结果返回

  2、return后的返回值有三种情况:

    (1)return值:返回的就是这一个值

    (2)return值1,值2,值3:返回的是一个元组

      def func():

        return 111,''xxx'',[22,33]

      res = func()

      print(res)    #(111,'xxx',[22,33])

    (3)函数内可以没有return、或者return None、或者return,默认返回None

 

 

上一篇:day10-栈


下一篇:day10_课前考试