函数
一、介绍
定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
语法定义
def func():#函数名
print("Hello,world")
func() #调用函数
带参数
def add(a,b):
c = a+b
return c #返回函数执行结果
f = add(1,2)
二、函数参数
2.1形参和实参
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
def add(a,b): # a , b 为形参
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
2.2默认参数
def person_info(name,age,country,sex):
print("-----个人信息-----")
print("姓名:",name)
print("年龄:",age)
print("国籍:",country)
print("性别:",sex)
person_info("张三",23,"CN","M")
person_info("李四",24,"CN","F")
person_info("王五",25,"CN","F")
person_info("赵六",26,"CN","M")
country这个参数的值都是CN,一般而言国籍如果我们不填写,默认就是中国,这就是通过默认参数实现的。我们可以把country设置成默认参数。
def person_info(name,age,sex,country="CN")
这样这个参数在调用时,就不用指定了,默认就是"CN",如果指定的话,就是指定的值。
2.3关键字参数
一般情况下,函数传递要按照顺序,不想按顺序可以使用关键字参数,指定参数名,但是关键字参数必须放在位置参数之后。
person_info(name,age,country="CN")
三、参数组
- 非固定位置参数(*args)
- 非固定关键字参数(**kwargs)
3.1非固定位置参数
- 接收N个位置参数,转换成元组的形式
- 定义:
def test(*args):
print(args)
test(1,2,3,4,5)
#输出
(1, 2, 3, 4, 5) # 参数转换为元组
如果只有一个非固定参数:
def test(*args):
print(args)
test(1)
#输出
(1,)
3.传入列表
def test(*args):
print(args)
print("1".center(20,'-'))
test() #空
print("2".center(20,'-'))
test(*[1,2,3,4]) # 参数前面加*,输出的args = tuple([1,2,3,4])
print("3".center(20,'-'))
test([1,2,3,4]) # 参数前面不加* ,则列表被当作单个位置参数
#输出
---------1----------
()
---------2----------
(1, 2, 3, 4)
---------3----------
([1, 2, 3, 4],)
4.位置参数和非固定位置参数
def test(a,*args):
print(a)
print(args)
print("1".center(20,'-'))
test(1,2,3,4,5)
#输出
---------1----------
1
(2, 3, 4, 5)
5.关键字参数和非固定位置参数
def test(a,*args):
print(a)
print(args)
print("1".center(20,'-'))
test(x=1,2,3,4,5)
#输出
File "G:/python/untitled/study2/parament.py", line 7
test(x=1,2,3,4,5)
^
SyntaxError: positional argument follows keyword argument
位置参数要在关键字参数之后
3.2非固定关键字参数
- 吧N个关键字参数,转换为字典形式
- 定义:
def test(**kwargs):
print(kwargs)
test(name="bigberg",sex="M")
输出
{'name': 'bigberg', 'sex': 'M'}
3.传入字典
def test(**kwargs):
print(kwargs)
test(**{"name":"bigberg","sex":"M"})
#输出
{'name': 'bigberg', 'sex': 'M'}
#传入字典时,一定要加 ** ,否则会报错
4.位置参数和关键字参数
def test(a,**kwargs):
print(a)
print(kwargs)
print("1".center(20,'-'))
#只有位置参数
test("bigberg")
print("2".center(20,'-'))
test("bigberg",sex="M",country="CN")
print("3".center(20,'-'))
#只有关键字参数
test(a="bigberg",sex="M",country="CN")
#输出
bigberg
{}
---------2----------
bigberg
{'sex': 'M', 'country': 'CN'}
-------