函数
什么是函数:就是一堆准备好分代码,在需要时调用这一堆代码
函数的声明,使用关键字def来声明
函数的执行逻辑,要和函数的名字一致
在python中用
# def 函数名()
函数要进行的操作
函数定义好之后需要调用才会运行
1.函数的参数
可以按照位置一一对应传入参数,也可以按照变量名传入(此时可以无序)
2.函数的返回值,函数的文档说明
返回值就是函数执行的结果,并不是所有函数都必须要有返回值
return表示一个函数的执行结果
def add(a:int, b:int):
"""
这是一个注释
:param a:
:param b:
:return:
a和b冒号后为建议传入参数类型
"""
c = a + b
# c只有在函数内部使用,没有返回值则result无法获取函数结果
result = add(1, 2)
print(result ** 4)
函数调用
3.全局变量和局部变量
全局变量在整个py文件中都可以访问
局部变量只能在函数内部访问,在函数内部定义
如果局部变量和全局变量同名,则是在函数内部定义一个新的局部变量,不是修改去全局变量
如果想要在函数内部修改全局变量,使用global方法
内置函数globals可以查看全局变量, locals可以查看局部变量
在python中,只有函数能够分割作用域
4.多个返回值
一般情况下,一个函数最多只会执行一个return语句
特殊情况(finally语句)下,一个函数可能会执行多个return语句
def test(a, b):
x = a // b
y = a % b
return x, y #返回的本质是元组,用[]包裹则为列表,{}是时字典
#可以用列表,元组,字典将返回值作为整体返回
print(test(2, 3))
5.函数的缺省函数
默认参数(若没有传递参数,会使用默认值,如果有参数传入,则使用传入的参数)
如:print(”hello world“,end=‘’)
若end未传入则使用默认的换行
如果有位置参数和关键字参数,则位置参数要放在关键字参数之前
6.可变参数的使用
可使用元组或列表打宝传入
*args表示可变位置参数(可变参数会以元组的方式保存到args里,缺省参数需要放在位置参数后)
**kwargs表示关键字可变参数(多出的关键字参数会以字典的形式保存)
7.可变类型和不可变类型传参
def test(a):
print('修改前a的内存地址0x%X'%id(a))
a=100
print('修改后a的内存地址0x%X'%id(a))
def demo(nums):
print('修改前nums的内存地址0x%X'%id(nums))
nums[0]=10
print('修改前nums的内存地址0x%X'%id(nums))
x=1
print('修改前x的内存地址0x%X' % id(x))
test(x)
print('修改后x的内存地址0x%X' % id(x))
print(x)
y=[3,5,9,4,6,7,0]
print('修改前y的内存地址0x%X' % id(y))
demo(y)
print('修改前y的内存地址0x%X' % id(y))
print(y