函数之定义函数
2018-11-04 本文已影响8人
endmoon
定义函数
def 函数名(参数):
#内部代码
return 表达式
1.以def关键字开头
2.参数通过函数名()中定义传递至函数内部
3.函数内部第一行可以使用文档注解
4.return默认返回None(函数内部没写默认会自动给一个return None),只能放函数内最后一行
调用函数
函数名(参数值)
return语句
返回的内容:可以返回一切对象
接收返回值:使用变量接收,一个变量接收一个返回值
参数传递
参数处理:
1.传递的是实际对象的内存地址
2.分为可变数据类型和不可变数据类型
## 传递可变数据类型参数
```python
a=[1,2,3] #内存中会根据给定的值动态创建一块内存对象给数据类型为列表的值[1,2,3]的对象,并创建一个指向该对象的内存地址(变量a)
def func(a): #将变量a作为函数的参数
print(id(a)) #打印变量a的内存地址
a[1]=4 #修改变量a的内存地址对应的内存空间中存放的对象(列表的下标为1的元素)
print(id(a)) #重新打印对象a的内存地址
return a #返回变量a的值
result=func(a) #将函数的执行结果赋值给result
print(result) #打印函数的返回值
```
## 传递不可变类型参数
```python
a=1 #内存中会根据给定的值动态创建一块内存对象给数据类型为整数的数值1的对象,同时创建一个指向该内存对象的内存地址(变量a)
def func(a): #定义函数func,把变量a作为函数的参数,这里的a是已经赋值过的数值1的内存地址引用
id(a) #查看变量a的内存地址(这里显示的肯定是数值为1的地址值)
a=2 #由于数值是不可变的类型参数,无法从内存空间中对对象为1的数值进行修改,所以会另外创建一块内存空间给数据类型为整数2的内存对象,此时a的内存地址变量数值为2的内存地址了
id(a) #这里显示的为内存对象2的内存地址了
return a #返回变量a的值
result=func(a) #将函数的返回值(这里为重新创建的a变量的指向数值2的内存地址)赋值给变量result
print(a) #打印变量a的值(这里是函数内给a重新赋值2前的a变量的指向数值1的内存地址
#这个是函数传参的机制,会通过区分数据类型是否为可变的前提下判断参数的值是可以修改还是重新创建,函数内部继续创建a变量,和外部的a的值不一样也说明了函数的封装性,把内部的a和外部的a隔离了,这两个a已经不是同一个了
```