6.2函数的定义
定义一个函数只需要用“def”开头即可。
如:
def function_name(arg1,arg2):
function body
return value
函数名(function_name)
函数参数(arg1,arg2) 调用一个函数可以传递的参数
函数内容(function body) 任何有效的代码都可以出现在函数内部
函数返回值 ( return value) 函数执行完成后返回的值,也可以不返回内容
6.3函数参数
参数类型: 必须参数、关键字参数、默认参数、可变参数、组合参数
顾名思义就是函数定义的参数调用时必须传入,并且在调用的时候数量和顺序必须和和定义的函数保持一致。
例如:
def add(a,b):
print("a+b=",a+b)
add(1,2)
关键字参数: 使用关键字参数可以不按函数定义时的参数来调用函数 例如:
def hello(name,age):
print("姓名:",name)
print("年龄:",age)
hello(age="18",name="袁良武")
//////
def hello(name,age):
print("姓名:",name)
print("年龄:",age)
hello(name="袁良武",age="18")
默认参数: 在定义函数时我们可以给参数添加默认值,如果调用函数时没有传入参数,函数就会使用默认值,并且不会像必须函数那样报错 (默认函数必须定义在最后)如:
def default_value(name,age=18):
print("我的名字是:",name)
print("我今年",age,"岁")
default_value("袁良武")
默认参数非常有用,可以帮助我们少写很多代码、如果有多地方调用函数,但部分参数的值又是相同情况的时候,默认参数就非常有用了。
def student_score(name,score=60,locatiom="上海"):
print("姓名:",name)
print("成绩:",score)
print("地区:",locatiom)
print("-----传入所有参数-----")
student_score("袁良武",100,"北京")
print("-----不传最后一个参数-----")
student_score("小明",89)
print("-----不传成绩-----")
student_score("小红",locatiom="广州")
print("-----只传必须参数-----")
student_score("小蓝")
print("-----只传关键字参数-----")
student_score(name="小绿")
可变参数 :在某些情况下我们不能在 定义函数的时候就确定参数的数量和内容,这时候就可以使用可变参数,可变参数声明时不会命名。基本语法如下:
some——func(*args,**kwargs)
参数说明:
函数名:some——func
*args和**kwargs为可变参数
*args会输出说明?
def foo(*args):
print(args)
foo()
foo(1,2)
foo("袁良武","长沙","20")
输出内容:
()
(1, 2)
('袁良武', '长沙', '20')
“*args”是获得了一个元组,这也正是它能作为可变参数的原因
“**kwargs”会输出什么呢?
def foo(**kwargs):
print(kwargs)
foo()
foo(name="袁良武")
输出内容:
{}
{'name': '袁良武'}
可见“**kwargs”获得到的是一个字典,所以我们调用函数时必须要使用关键字参数的方式来传递函数。
经常使用*args和**kwargs用于解决一些未知的情况
def calculate_sum(*args,**kwargs):
s = 0
for i in args:
s += i
print("输入的数字之和是:",s)
for k,v in kwargs.items():
print(k,v)
calculate_sum(1,2,3,4,5,姓名="袁良武")
输出结果:
输入的数字之和是: 15
姓名 袁良武
注意:.items()函数以列表返回可遍历的(键, 值) 元组数组。
不只在函数定义时可以使用“*”与“**”来声明参数,在函数调用时我们也可以使用相同的方式来传递未知参数。
def exp(*args,**kwargs):
print(args)
print(kwargs)
l = [1,2,3,4]
d = {
"参数1":"arg1",
"参数2":"arg2"
}
exp(*l,**d)
输出内容为:
(1, 2, 3, 4)
{'参数1': 'arg1', '参数2': 'arg2'}