函数
自定义函数
函数的参数
函数的返回值
函数的作用域
函数介绍
函数
函数介绍 ( 熟悉 )
函数介绍:
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数作用:
提高 应用的模块性 与 代码的复用性
自定义函数 ( 掌握 )
定义规则:
- 函数代码块以 def 关键词 开头 ,后接 函数标识符名称 和 圆括号()
- 圆括号中间 可以 放入参数
- 函数内容以 冒号 起始,并且 缩进。
注意:
- 函数 只有在调用时才会执行,通过 function_name(param) 进行调用
函数的参数
- 形参与实参
- 可变类型参数与不可变类型参数
- 位置参数
- 关键字参数
- 默认值参数
- 可变长度参数
形参与实参:
- 形参 就是 函数定义中的 参数,没有实际的值,通过别人赋值后才有意义,相当于变量。
- 实参 就是 调用函数时传入的 参数,是一个实际存在的参数。
def test_one(b): # 函数定义时传入:形参
print(b)
a = 1
test_one(a) # 函数调用时出入:实参
'''
这整个过程,相当于
a = 1
b = a
'''
可变类型参数与不可变类型参数:
- 不可变类型参数在函数体内对变量重新赋值,相当于重新开辟了一块内存来保存值
- 可变类型参数在函数体内***可以改变原有的值****.
def test_one(a):
# 整数为不可变对象
a = 10
print('inner:', a, id(a))
# inner: 10 496030912
a = 1
test_one(a)
print('outer:',a , id(a))
# outer: 1 496030768
def test_one(li):
# 列表时可变数据类型
li.extend([1, 22])
print('inner:', li, id(li))
# inner: [1, 2, 3, 4, 1, 22] 23983968
li = [1, 2, 3, 4]
test_one(li)
print('outer:',li ,id(li))
# outer: [1, 2, 3, 4, 1, 22] 23983968
位置参数:
-
位置参数也就是实参与 形参 顺序 一一对应,而不论变量名
关键字参数: - 以 形参 = 实参 形式指定,不论参数位置
# 实现两个数字相加
def sum_nums(num1,num2):
res = num1 + num2
print(f'num1:{num1}')
print(f'num2:{num2}')
print(f'{num1} + {num2} = {res}')
num1 = int(input('请输入num1:'))
num2 = int(input('请输入num2:'))
# sum_nums(num1,num2)
# 位置参数:实参于形参的顺序是一一对应。无论变量名。实参于形参个数一致
sum_nums(num1=num1, num2=num2)
# 关键字参数:不受位置影响
默认值参数:
-
形参处进行赋值,所以当调用时不传该参数就默认使用形参处的值。当调用时传了该参数,则覆盖
掉默认参数。
# 默认值参数,当不传时,就为形参指定的值。
# 如果在实参中传了,会覆盖掉形参中指定值。
def test_one(a, b=2):
a = a + b
print(a, b)
a = 1
test_one(a, 10) # 11 10
可变长度参数:
- *args 接收时会转为元组数据类型
- **kwargs 接收时会转为字典数据类型
# *age-->可变长度的参数,你可以传也可以不传,并且长度不做限制。但是会给你统一打包为元组。
def test_one(*args): # 形参
print(args)
test_one('amy', 2, 3, 4, 5, 7) # amy 2 3 4 5 7
# *age-->可变长度的参数,你可以传也可以不传,并且长度不做限制。但是会给你统一打包为元组。
def test_one(*args): # 形参
print(args)
test_one('amy', 2, 3, 4, 5, 7) # ('amy', 2, 3, 4, 5, 7)
# 注意:python3.0以后,*args参数后面只能跟关键字参数
def test_one(*args, a=1, b): # 形参
print(args)
test_one("amy", 2, 3, 4, 5, 7, a=10, b=20)
# ('amy', 2, 3, 4, 5, 7)
# **kwargs-->可变长度的参数,你可以传也可以不传,并且长度不做限制。实参传需要传入键值对,然后形参将它打包成字典
def test_one(**kwargs):
print(kwargs)
test_one(a=1, b=2, c=3)
# {'a': 1, 'b': 2, 'c': 3}
解包:
- a,b,c = (1,2,3)
# 拆包
# a, b, c = (1, 2, 3)
# print(a,b,c,sep='\n')
# 位置参数 形参实参个数一致 并且一一对应
def test_one(a, b, c):
print(a, b, c)
tu = (1, 2, 3)
test_one(*tu) # 1 2 3
test_one(1, 2, 3) # 1 2 3