函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
提高应用的模块性与代码的复用性。
def test(a):
print(a)
函数只有在调用时才会执行,通过函数名(参数)
进行调用。
参数类型 |
---|
形参与实参 |
可变类型参数与不可变类型参数 |
位置参数 |
关键字参数 |
默认值参数 |
可变长度参数 |
def test(name):
print(name)
test("kirito")
其中, name为形参,kirito为实参。
def test(age):
age=16
print("输出为:",a)
age=10
test(age) # ==>输出为:16
print("冒出为:",age) # ==>冒出为:10
因为16和10都是整数类型,是不可变类型,在函数外对age进行赋值,相当于在函数外重新开了开辟了一片内存空间。因而输出age时会输出10,而在函数内输出为16。
def test(li):
li.extend([1,100])
print("输出为:",li) # ==>输出为:[1,2,3,4,5,100]
li = [2,3,4,5]
test(li)
print("冒出为:",li) # ==>冒出为:[1,2,3,4,5,100]
因为li是列表,是可变数据类型,所以当函数执行时,li会将[1,100]扩展进去。然后再继续执行输出。虽然li内的元素发生了变化,但是内存地址没有改变,所以输出的结果自然也就相同。
def test(name,age):
print("姓名:",name,"年龄:",age)
test("kirito" ,16) # ==>姓名: kirito 年龄: 16
def test(name,age):
print("姓名:",name,"年龄:",age)
test(16 ,"kirito") # ==>姓名: 16 年龄: kirito
def test(name,age):
print("姓名:",name,"年龄:",age)
test(age = 16 , name = "kirito") # ==>姓名: kirito 年龄: 16
def test(name = "kiroto",age = 10):
print("姓名:",name,"年龄:",age)
test(age = 16) # ==>姓名: kirito 年龄: 16
函数调用时没有设置name的值,所以就默认使用kirito作为参数了。
def test(name = "eiji",age = 10):
print("姓名:",name,"年龄:",age)
test(name = "kirito" ,age = 16) # ==>姓名: kirito 年龄: 16
函数调用时如果输入了新的参数,则调用新的参数。
def test(*args):
print(args)
test(1,2,3,4,5,6) # ==>(1,2,3,4,5,6)
def test(**kwargs):
print(kwargs)
test(name = "kiroto" ,age = 16) # ==>{'name': 'kiroto', 'age': 16}
a,b,c=(1,2,3)
print(a, b, c) # ==>1, 2, 3
这个例子的过程就叫做拆包。
上例中,用*args和**kwargs传参也可以用该方法进行拆包。
示例:
sao = ("kiroto", "男", 16)
def test(a, b,c):
print("姓名:", a, "性别:", b, "年龄:", c)
test(*sao) # ==>姓名: kiroto 性别: 男 年龄: 16