python基础- 函数介绍及定义
函数介绍
引子
如今我们已经编写一些简单的程序, 但是随着功能的增多, 代码量随之增大. 此时如果仍然不区分把实现不同的功能的代码放到一起, 将会使得程序结构不清晰, 代码的可读性差, 和代码的冗余.
什么是函数
函数就是具备某一功能的"工具"
为什么用函数
- 为了解决代码的冗余
- 为了使代码有更强的可读性.
函数应该怎么用
函数和变量一样, 应该先定义, 后使用.
函数的定义方式.
函数的定义是用 def 关键字进行定义, 格式如下
def index():
pass
- def 表示定义函数的关键字
- index 表示这个函数的名字.
- ()形参位置
- : 冒号是必须要的.
- 函数下代码有四个空格缩进.
函数的调用方式.
函数定义后, 就可以使用, 函数的定义是,在内存中开辟内存空间, 将函数体代码放进内存空间中, 并和函数名建立映射关系.
# 打印函数
def index():
pass
print(index)
# 输出结果
<function index at 0x000002C1C4141EA0>
输出的结果是 函数所在的内存空间地址.
# 函数的调用
def index():
print("我运行了")
index()
# 用函数名+() 就是函数的调用方式.
# 输出结果
我运行了
函数的分类
- 无参函数
在函数定义的时候, 没有形参, 即在函数运行的时候, 也没有参数的传入,
称之为无参函数
def index():
print("我运行了")
- 有参函数
def index(a,b):
print(a,b)
- 空函数
为什么要用空函数? 因为在写项目的时候, 会去实现很多功能, 定义空函数就是为了先进行项目的功能分类, 让项目的架构更清晰. 然后再逐一实现对象的功能函数代码
def index():
pass
形参和实参
形参
在函数的定义阶段, 函数名后括号内, 填入的占位用的 变量名 称之为形参.
def index(a,b):
pass
# a,b 就是形参
实参
在函数的调用阶段, 传入的值即为实参.
def index(a,b):
print(a,b)
index(1,2)
# 1,2 就是实参.
函数的传参方式.
位置传参
位置参数就是, 依照前后的顺序,依次传参, 就是位置参数.
def index(a,b):
print(a,b)
index(1,2)
这种传参方式就是位置参数.
关键字参数.
以关键字和值这种 对应的方式传参, 即为关键字参数.
def index(a,b):
print(a,b)
index(a=1, b=2)
a= 1,b=2 就是关键字参数.
默认参数
# 当一个参数的值重复传入的时候, 就可以设置默认参数, 即在 形参处
def index(name, age, gender="male"):
print(f"我的名字是{name}, 年龄{age},性别{gender}")
index("张", 18 )
# 输出结果
我的名字是张, 年龄18,性别male
使用默认参数时, 如果不传参,则自动传入设置的默认值. 传参的话, 覆盖掉默认值.
def index(name, age, gender="male"):
print(f"我的名字是{name}, 年龄{age},性别{gender}")
index("张", 18 )
index("王",19,"female")
# 输出时间
我的名字是张, 年龄18,性别male
我的名字是王, 年龄19,性别female
ps: 注意,当位置参数和关键字参数同时使用的时候, 位置参数要在关键字参数的前面.
可变长参数 *args **kwargs
当用户不知道要传入几个参数的时候, 就出现会多传参的情况, 这时 我们就需要找个万能的形参来接收用户多传来的值.
# *args
用来接收多传进来的位置参数,
def index(a,b,*args):
print(a,b)
print(*args)
index(1,2,3,4,5)
# 输出结果
1,2
3,4,5
# 例2
def index(a,b,*args):
print(a,b)
print(args)
index(1,2,3,4,5)
# 输出结果
1,2
(3,4,5)
# 原理是, 将多传入的未知参数打包到元组中, 并赋值给args ,
# 所以args 只是python中官方认证的方法, 可以用任意的名称
# * 打散的功能, 可以看出上面两个立体中 args和*args的区别
# * 如果后面跟的是字典, 则返回的值是字典的所有key
# **kwargs
# 用来接收多传进来的关键字参数, 是以字典的方式接收, 即 关键字是字典的key 值为 value
def index(a, b, *args, **kwargs):
print(a, b)
print(kwargs)
index(1, 2, 3, 4, 5, d=13, c="wo")
# 输出结果
1 2
{'d': 13, 'c': 'wo'}