一.为什么要使用函数
函数能提高应用的模块性,和代码的重复利用率。
二.函数的参数
位置参数:从左至右进行匹配
一般情况,也就是我们迄今为止最常用的方法,是通过位置进行匹配把参数值传递给函数头部的参数名称,匹配顺序从左至右。
关键字参数:通过参数名进行匹配
调用者可以定义哪一个函数接受这个值,通过在调用时使用参数的变量名,使用name=value这种语法。
默认参数:为没有传入值的参数定义参数值
如果调用时传入的值过少的话,函数能为参数定义接受的默认值,再一次使用语法name=value
可变参数:收集任意多基于位置或关键字的参数
函数能够使用特定的参数,他们是以*开头,收集任意多的额外参数(这个特征性 常常叫做可变参数)
可变参数解包:传递任意多的基于位置或关键字的参数
调用者能够使用*语法将参数集合打散,分成参数。这个“*”与在函数头部的“*”恰恰相反:在函数头部他意味着收集任意多的参数,而在调用者中意味 着传递任意多的参数
KeyWord-only参数:参数必须按照名称传递
函数可以指定参数,参数必须用带有关键字参数的名字来传递。这样的参数通常用来定义实际参数 以外的配置选项。
"""参数匹配语法"""
# 对于调用者来说:
func(value) # 位置参数:通过位置进行匹配
func(name=value) # 关键字参数:通过变量名匹配
func(*sequence) # 将参数集合解包,作为独立的位置,或关键字参数传入函数
func(**dict) # 将成对存在的关键字/值,并作为独立的关键字参数传入函数
# 对于函数定义来说
def func(name) # 位置参数:通过位置或变量名进行匹配
def func(name=value)# 默认参数
def func(*name) # 匹配并收集(在元组中)所包含位置的参数
def func(**name) # 匹配并收集(在字典中)所包含位置的参数
def func(*args, name)# 参数必须在调用中按照关键字传递
""" 在函数调用中,简单的通过变量名位置进行匹配,但是使用name=value的形式
告诉python依照变量名进行匹配,这叫做关键字参数。在调用*sequence或者
**dict允许我们在一个序列或字典中相应的封装任意多的位置相关或关键字的对象
并且在将他们传递给函数的时候,将他们解包为分开的单个的参数
"""
"""
在函数定义的时候,一个简单的变量名是通过位置或变量名进行匹配的(取决于调用者如何传递参数)
但是name=value的形式定义了默认的参数值。*name的形式收集了任意的额外不匹配的参数到元组中,
并且**name的形式将会收集额外的关键字参数到字典中。python3之后跟在*name或者一个单独的*之后
的任何正式的或默认的参数名称,都是Keyword-only参数,并且必须在调用中按照关键字传递
"""
"""
在函数调用中,参数必须以此顺序出现:任何位置参数,紧跟着任何关键字参数和*sequence形式的组合,后面跟**dict
在函数定义时,参数必须以此顺序出现:一般参数,紧跟着任何默认参数,如果有的话后面是*name(或者*)的形式后面跟着name或者name=value,后面跟着**name
"""