zoukankan      html  css  js  c++  java
  • 第十天

    函数

    一、函数的定义与调用:

    定义函数时发生的事情:

      1、申请内存空间把函数体代码放进去
      2、将函数内存地址绑定给函数名
      强调:定义函数只检测语法,不执行代码
    

    调用函数时发生的事情:

      1、先通过函数名定位到函数的内存地址
      2、函数内存地址()->触发函数体代码的运行
      强调:调用函数才会执行函数体代码
    

    1.1什么是函数:

      函数就是盛放代码的容器
    
      具备某一功能的工具->函数
      事先准备工具的过程-》函数的定义
      遇到应用场景拿来就用-》函数的调用
    
      所以函数的使用原则:
      先定义
      后调用
    

    1.2为什么要学函数:

      解决下述问题:
        1、代码组织结构不清晰、可读性差
        2、可扩展性差
    

    1.3如何用函数:

      定义的语法:
    def 函数名(参数1,参数2,参数3,...):         #定义的方法
        '''函数的文档注释'''
        代码1
        代码2
        代码3
        return 返回值
    函数名(参数1,参数2,参数3,...)      #调用的方法
    

    二、定义函数和调用函数的的三种形式:

    2.1定义函数的三种方式

      1、无参(无需为代码块传值)
            例:
                def say():                     #无参函数的定义,括号内可以不用写参数
                  print("hello")
                say()                          #无参函数的调用,如果定义时没有参数那调用时也可以没有参数
      2、有参(需要为代码块传值)
            例:
                  def compare(x,y):             #有参函数的定义,括号内写了参数
                      if x > y:
                        print(x)
                      else:
                        print(y)
                  compare(10,20)              #有参函数的调用,定义时有参数那调用时应该也有参数
      3、空
            例:
                def x():    #空函数的调用,多用与在建立功能结构时先占位,等以后再补充
                  pass
    

    2.2调用函数的三种方式:

      1、语句式
            例:
            len("hello")       
      2、表达式
            例:
            res=len("hello")*10
            print(res)
      3、可以当作参数传给另一个函数
            例:
            print(len("hello")
    

    三、参数的形式:

    3.1形参(在定义阶段,相当于变量名)

      1、位置形参与默认值形参
      例:
        def func(x,y):      #位置形参的定义,括号内的参数必须被赋值
            print(x)
            print(y)
        func(10,20)
        def func(x,y=20)     #默认值形参的定义,在函数定义阶段就默认赋值了,在调用阶段可以不用为其赋值
            print(x)                              如果实参传入了新值那么代码块内所用的值为新值
            print(y)
        func(10)
      ps:位置形参与默认形参可以混用,但是位置形参必须在关键字形参的前面
    

    3.2实参(在调用阶段,相当于变量值)

      1、位置实参与关键字实参
      例:
       def func(x,y):
            print(x)
            print(y)
       func(10,20)           #位置实参的定义,从左到右依次为形参赋值,不能多也不能少
       func(y=20,x=10)       #关键字实参的定义,以key:value的形式为形参传值,可以无需,不能多也不能少
      ps:位置实参与关键字实参的方式可以混用,但是位置实参必须在关键字实参的前面
    

    四、可变长参数:*与**在形参与实参中的作用

    4.1*与**在形参中是一种汇总行为

      例:
        def func(x,*args)     #*在形参中的作用:*会接收溢出的位置实参,组合成一个元祖,并赋值给args
            print(x)
            print(args)
        func(1,2,3,4,5)
        def func(x,**kwargs)    #**在形参中的作用:**会接收溢出的关键字实参,组合成一个字典,并赋值给kwargs
            print(x)
            print(kwargs)
        func(x=10,y=20,z=30)
    

    4.2*与**在实参中是一种打散行为

      例:
        def func(x,y,z):
            print(x)
            print(y)
            print(z)
        func(*[1,2,3])           #*在实参中的作用:*后面可以跟一个能被for循环使用的值,*会将紧跟其后的值打散成位置实参
        func(**{x=10,z=30,y=20)    #**在实参中的作用:**后面只能跟一个字典,**会将字典打散成关键字实参
    

    了解:命名关键字形参(用处不多,只用于了解)

      例:
        def func(x,*args,y=20,z,**kwargs)    #在*与**之间的参数叫做命名关键字形参,这时y=20,z就叫命名关键字形参而不是关键字形参与位置形参
            print(x)                              如果z接在*后面那z永远不会被传值,所以顺序不能写反
            print(args)
            print(y)
            print(z)
            print(kwargs)
        func(1,2,3,4,z=30,a=10,b=20,c=30)
  • 相关阅读:
    学机器学习,不会数据分析怎么行——数据可视化分析(matplotlib)
    关于 tensorflow-gpu 中 CUDA 和 CuDNN 版本适配问题
    人工智能学习资料
    JAVA Socket通信 打造属于自己的网盘
    在 Windows 10 中使用 OpenAI Spinning Up
    【LeetCode】回文串专题
    【LeetCode】45.跳跃游戏2
    【LeetCode】23.最大子序和
    【LeetCode】3. 无重复字符的最长子串(典型滑动窗口)
    【LeetCode】202.快乐数
  • 原文地址:https://www.cnblogs.com/kk942260238/p/14202049.html
Copyright © 2011-2022 走看看