函数定义格式
def name():
函数体
函数在定义了以后,可以在任何需要它的地方调用。
#返回值
#返回值的3种情况
#没有返回值 -----返回None
#不写return
#只写return:结束一个函数的继续
#return None ------ 不常用
#返回一个值
#可以返回任何数据类型
#只要返回就可以接收到
#返回多个值
#用多个变量接收:有多少返回值就用多少变量接收
#用一个变量接收:得到的是一个元组
#参数------>形参,实参
#没有参数
#定义函数和调用函数时括号里都不写内容
#有一个参数
#传什么就是什么
#有多少个参数
#位置参数
###站在实参的角度上:
#按照位置传参
#按照关键字传参
#混着用可以:但是 必须先按照位置传参,再按照关键字传参数
#不能给同一个变量传多个值
##站在形参的角度上
#位置参数:必须传,且有几个参数就传几个值
#默认参数:可以不传,如果不传就是用默认的参数,如果传了就用传递值
#只有调用函数的时候
#按照位置传:直接写参数的值
#按照关键字: 关键字 = 值
#定义函数的时候:
#位置参数:直接定义参数
#默认参数,关键字参数:参数名 = ‘默认的值’
#动态参数 : 可以接受任意多个参数
#参数名之前加*,习惯参数名args,
#参数名之前加**,习惯参数名kwargs
#顺序:位置参数,*args(接收多个值形成元组),默认参数,**kwargs(接收多个值形成字典)
#记不住撞墙。。。。
#动态参数有两种:可以接受任意个参数
#*args :接收的是按照位置传参的值,组织成一个元组
#**kwargs :接受的是按照关键字传参的值,组织成一个字典
#args 必须再kwargs之前
#动态参数的另一个传参方式
def func(*args): #站在形参的角度上,给变量加上*,就是组合所有传来的值。
print(args)
func (1,2,3,4,5)
L = [1,2,3,4,5]
func(*L) #站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散
##函数的注释
def func():
'''
这个函数实现了某个功能~~~
参数1:
参数2:
:return:是字符串或者列表的长度
'''
pass