python函数(一) 最后更新时间:2021年01月04日 ##### 函数介绍: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 ##### 函数作用: 提高应用的模块性与代码的复用性。 ##### 自定义函数 ###### 定义规则: - 函数代码块以 def 关键词 开头 ,后接 函数标识符名称和圆括号() - 圆括号中间可以放入参数 - 函数内容以冒号起始,并且缩进。 示例: ```python def test(a): print(a) ``` ###### 注意: 函数只有在调用时才会执行,通过`函数名(参数)`进行调用。 ##### 函数的参数 ###### 参数类型: |参数类型| |-| |形参与实参| |可变类型参数与不可变类型参数| |位置参数| |关键字参数| |默认值参数| |可变长度参数| ###### 形参与实参: - 形参就是函数定义中的参数,没有实际的值,通过别人赋值后才有意义,相当于变量。 - 实参 就是 调用函数时传入的 参数,是一个实际存在的参数。 示例: ```python def test(name): print(name) test("kirito") ``` 其中, name为形参,kirito为实参。 ###### 可变类型参数与不可变类型参数: - 不可变类型参数在函数体内对变量重新赋值,相当于重新开辟了一块内存来保存值 - 可变类型参数在函数体内可以改变原有的值 示例: ```python def test(age): age=16 print("输出为:",a) age=10 test(age) # ==>输出为:16 print("冒出为:",age) # ==>冒出为:10 ``` 因为16和10都是整数类型,是不可变类型,在函数外对age进行赋值,相当于在函数外重新开了开辟了一片内存空间。因而输出age时会输出10,而在函数内输出为16。 ```python 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内的元素发生了变化,但是内存地址没有改变,所以输出的结果自然也就相同。 ###### 位置参数: - 位置参数也就是实参与形参顺序一一对应,而不论变量名 示例: ```python def test(name,age): print("姓名:",name,"年龄:",age) test("kirito" ,16) # ==>姓名: kirito 年龄: 16 ``` ```python def test(name,age): print("姓名:",name,"年龄:",age) test(16 ,"kirito") # ==>姓名: 16 年龄: kirito ``` ###### 关键字参数: - 以 形参 = 实参 形式指定,不论参数位置。 示例: ```python def test(name,age): print("姓名:",name,"年龄:",age) test(age = 16 , name = "kirito") # ==>姓名: kirito 年龄: 16 ``` ###### 默认值参数: - 形参处进行赋值,所以当调用时不传该参数就默认使用形参处的值。当调用时传了该参数,则覆盖掉默认参数。 ```python def test(name = "kiroto",age = 10): print("姓名:",name,"年龄:",age) test(age = 16) # ==>姓名: kirito 年龄: 16 ``` 函数调用时没有设置name的值,所以就默认使用kirito作为参数了。 ```python def test(name = "eiji",age = 10): print("姓名:",name,"年龄:",age) test(name = "kirito" ,age = 16) # ==>姓名: kirito 年龄: 16 ``` 函数调用时如果输入了新的参数,则调用新的参数。 ###### 可变长度参数: - *args 接收时会转为元组数据类型,args会将接收的所有参数存入元组。 - **kwargs 接收时会转为字典数据类型,kwargs会将接收的所有参数存入字典。 示例: ```python def test(*args): print(args) test(1,2,3,4,5,6) # ==>(1,2,3,4,5,6) ``` ```python def test(**kwargs): print(kwargs) test(name = "kiroto" ,age = 16) # ==>{'name': 'kiroto', 'age': 16} ``` ##### 拆包 ```python a,b,c=(1,2,3) print(a, b, c) # ==>1, 2, 3 ``` 这个例子的过程就叫做拆包。 上例中,用*args和**kwargs传参也可以用该方法进行拆包。 示例: ```python sao = ("kiroto", "男", 16) def test(a, b,c): print("姓名:", a, "性别:", b, "年龄:", c) test(*sao) # ==>姓名: kiroto 性别: 男 年龄: 16 ```
Comments | NOTHING