一、函数定义

1.什么是函数

函数其实就好比是一个工具,我么随时需要用的时候,就拿过来用。

2.如何用函数

  • 先定义函数
  • 在调用函数

3. 如何定义函数

  • 定义函数的时候不执行函数体内的代码,只检查语法错误
'''
def 函数名():  # 定义阶段(造车轮阶段)
    """函数注释写在这里"""  # 函数相当于工具, 注释相当于工具的说明书
    <代码块>

# 使用  # 调用阶段
函数名()
'''

二、函数的三种定义方式

  • 无参函数
  • 有参函数
  • 空函数
  • 参数其实就是用来接收外部传进函数体的值的,其实就是一个变量名

1.无参函数

  • 定义无参函数的时,就代表我们调用这个函数的时候也不需要传入参数。
  • 也就代表着这个工具是可以直接拿来使用的
  • 如果函数体内的代码逻辑是不需要外部来传入值的话,就必须定义成无参函数
def func():
	x = input('num1':)
    y = input('num2:')
    
    print(int(x)+int(y))
func()

2.有参函数

  • 定义有参函数时,代表我们在调用这个函数的时候是一定需要从函数体外部传入参数的
  • 有参函数也就是说我虽然定义了这个工具,但是我需要其他东西的协助才能够使用
  • 如果函数体内的代码逻辑是需要外部来传入值的话,就必须定义成有参函数
def add(x, y):
    return int(x) + int(y)

num1 = input("num1:")
num2 = input('num2:')
res = add(num1,num2)
print(res)

3.空函数

  • 当我们之我知道函数的功能是什么,但是却不知道他怎么实现的时候,我们就可以先写一个空函数
def fun():
	pass

三、函数的调用

  • 函数的调用其实就是去使用这个函数的功能
  • 写完函数体内的代码后,直接写函数名加括号就是实现我们说的函数的调用,执行函数体内的代码,直到碰到return或者执行完函数体内的所有代码后结束
  • 函数运行完毕所有代码,如果函数体不写return,则会返回None。

1.调用函数的方式

  • 函数体代码写完后,无参函数是最后函数名+括号。有参函数是函数名+括号,括号里面传入参数
  • 有参函数可以用一个变量去接收这个函数调用,然后进行变量值的打印
  • 有参函数可以在一个程序内进行多次调用

四、函数的返回值

  • 返回值就是函数内部的代码经过运行获得的结果
  • 在函数提里面我们在运行完代码后,我们的到结果一般都是用return来返回,并不是向我么以前写代码一样用print方法去把结果打印出来。
  • 如果在函数体内用print方法打印的话,我们最后返回结果值以后,函数最后会默认返回一个None
  • return是一个函数结束的标志,函数内可以有多个return,只要函数执行到return,函数就会结束
  • return的返回值可以返回任意的数据类型
  • return的返回值可以是多个,可以用逗号隔开返回多个值,不加括号返回多个值时,默认元祖的形式返回

五、函数的参数

1.形参和实参

1.形参

  • 在函数定义阶段括号内定义的参数,称之为形式参数,简称形参,本质就是变量名
def fun(x,y)----x,y就是形参

2.实参

  • 在函数调用阶段括号内传入的参数,称之为实际参数,简称实参,本质就是变量的值。
fun(1,2)

2.位置参数

1.位置形参

  • 在函数定义阶段,按照从左到右的顺序依次定义的形参,称之为位置形参。
def fun(x,y)---x,y就是位置形参

2.位置实参

  • 在函数调用阶段,按照从左到右的顺序依次定义的实参,称之为位置实参
fun(1,2)

3.注意:

  • 有几个位置形参就对应有几个位置实参,按照从左到右的顺序意义对应,调用h时依次传值

3.默认形参

  • 在定义阶段就已经被赋值,意味着在调用时可以不用为其赋值。
  • 不需要传参,可以使用默认值; 传参就使用你传的值。
  • 默认形参必须放到位置形参后面
  • 默认形参的值只在定义阶段赋值一次,也就是说默认参数的值在函数定义阶段就已经固定了。
def shopping(name='nick'):  # 形参经常会引用同一个值
    goods_dict = {1: '特斯拉', 2: '奔驰', 3: 'nick'}
    print(f'恭喜{name},得到{goods_dict[1]}一个')


shopping('yongjiu')

4.关键字实参

  • 按照形参名给定具体的值,可以打破位置形参必须得一一对应传值的规定,位置实参必须在关键字实参之前
def shopping(x, name='nick'):
    goods_dict = {1: '特斯拉', 2: '奔驰', 3: 'nick'}
    print(f'恭喜{name},得到{goods_dict[x]}一个')


shopping(1, name='yongjiu')