函数

一.函数语法结构

eg: def 函数名(参数1,参数2):
'''函数注释'''
函数体代码
return 返回值

  1. def(必须的)

    是定义函数的关键字

  2. 函数名(必须的)

    是函数的名字 相当于变量名
    函数名的命名规范与风格遵循变量名的

  3. 参数1,参数2(可选的)

    参数可以没有也可以有多个
    表示在使用函数之前需要满足的一些条件

  4. 函数注释(可选的)

    类似于产品说明书
    主要用于介绍函数功能 参数使用 及其他情况

  5. 函数体代码(必须的)

    函数核心的代码逻辑(重要)

  6. return返回值(可选的)

    使用函数之后反馈给使用者的结果 可以有也可以没有

二.函数的定义与调用(很重要.很重要)

  1. 函数必须先定义后调用(顺序不能乱)
  2. 函数在定义阶段只检测语法不执行代码
  3. 函数在调用阶段才会执行函数体代码

如何调用函数?

函数名加括号, 如果函数在定义阶段有参数则在调用阶段也需要给参数

函数在定义与调用阶段底层原理
1.在内存空间中申请一块空间存储函数体代码
2.将函数体代码所在的空间地址绑定给函数名
3.函数名加括号则会执行函数体代码

三.函数的分类

  1. 内置函数

    python解释器自带的(提前给你定义好了 你直接使用即可)

  2. 自定义函数

    • 无参函数

      在函数定义阶段括号内没有写参数(变量名)

       def my_func():
           print('这个函数很牛逼')
      
    • 有参函数

      在函数定义阶段括号内写了参数(变量名)

       def my_func(a,b):
           print('这个函数更牛逼')
       my_func(1,2)
      
    • 空函数

      函数体代码为空(pass ...)

      def run():
          pass
      def fight():
          pass
      def talk():
          pass
      

      虽然空函数本身没有含义 但是空函数可以提前规定好编写代码的思路

函数参数的两大分类

1.形式参数

在函数定义阶段括号内所填写的参数 简称"形参"

def func(a, b):
            pass
       	# a和b就是函数func的形参

2.实际参数

在函数调用阶段括号内传入的参数 简称"实参"

func(1,2)
        # 数据1和2就是函数func的实参

形参与实参的关系:

我们可以将形参看成是变量名 实参看成是变量值

两者在函数调用阶段临时绑定 函数运行结束断开

形参的表现形式只有一种就是变量名

实参的表现形式有很多种(但是把握核心 就是 数据值)

image

3.形参2种形式

  • 位置形参

    在函数定义阶段括号内按照从左往右的顺序依次填入的变量名

    def func(x,y):  # x,y就是位置形参
        pass
    
  • 默认参数

​ 函数在定义阶段就可以给形参赋值了

1.该形参在函数调用阶段如果不给值 则使用默认的

2.该形参在函数调用阶段也可以继续给值 则使用你给的

def func(name, age, gender='male')  # gender='male'就是默认参数
	pass
register('jason', 18)  # 默认参数是可以省略的,这里默认就是male了
register('lili', 18, gender='female')  # 不省略就赋值

ps:位置形参与默认值形参在定义的时候
位置形参必须在默认值形参的前面

白话就是:格式越简单的越靠前 格式越复杂的越靠后

4. 实参2种形式

  • 位置实参

    在函数调用阶段括号内按照从左往右的顺序依次传入的数据值

    def func(x,y):  # x,y就是位置形参
    	pass
    func(1,2)  # 这里调用函数1,2就是位置实参
    
  • 关键字实参(可以打破位置顺序)

    在函数调用阶段通过形参名=数据值的形式指名道姓的传值

    def func(name,age,hobby)
    	print('%s:%s:%s' % (name,age,hobby))
    func(name='jason', hobby= 'read', age=18)  # 这里就是关键字实参 也不是一一对应,打乱了顺序
    

    ps:格式越简单的越靠前 格式越复杂的越靠后

5.可变长函数

  • 可变长形参

image

*号在形参中的使用

用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名

**号在形参中的使用

用于接收多余的关键字参数 并组织成字典的形式赋值给号后面的变量名

  • 可变长实参

image

*号在实参中的使用

会将列表、元组内的元素打散成位置参数的形式一一传值

**号在实参中的使用

会将字典内的键值对打散成关键字参数传入

6.函数参数补充(了解)

1.命名关键字参数
	def register(name,age,*,sex,height):
        pass

    # register('jason',18,'male',183)
    register('lili',18,sex='male',height='1.8m') #正确使用
    """
    sex height在传入实参的时候必须以关键字参数的形式

    ps:该类型的参数几乎不用 也几乎很少能碰到
    """
posted @ 2021-11-12 19:23  zong涵  阅读(62)  评论(0编辑  收藏  举报