如下图所示:
Python的函数参数传递:传值?引用?
对于变量(与对象相对的概念) , 其实,python函数参数传递可以理解为就是变量传值操作,用C++的方式理解,就是对void*赋值 。如果这个变量的值不变,我们看似就是引用,如果这个变量的值改变,我们看着像是在赋值 。有点晕是吧,我们仍旧据个例子 。
不可变对象参数调用
12345
def ChangeInt( a ):a = 10nfoo = 2 ChangeInt(nfoo)print nfoo #结果是2
这时发生了什么,有一个int对象2,和指向它的变量nfoo , 当传递给ChangeInt的时候 , 按照传值的方式 , 复制了变量nfoo的值 , 这样 , a就是nfoo指向同一个Int对象了,函数中a=10的时候,发生什么?(还记得我上面讲到的那些概念么),int是不能更改的对象,于是,做了一个新的int对象,另a指向它(但是此时,被变量nfoo指向的对象,没有发生变化),于是在外面的感觉就是函数没有改变nfoo的值,看起来像C++中的传值方式 。
可变对象参数调用
12345
def ChangeList( a ):a[0] = 10lstFoo = [2]ChangeList(lstFoo )print nfoo #结果是[10]
当传递给ChangeList的时候,变量仍旧按照“传值”的方式,复制了变量lstFoo 的值,于是a和lstFoo 指向同一个对象,但是,list是可以改变的对象,对a[0]的操作,就是对lstFoo指向的对象的内容的操作 , 于是,这时的a[0] = 10,就是更改了lstFoo 指向的对象的第一个元素,所以 , 再次输出lstFoo 时,显示[10],内容被改变了,看起来 , 像C++中的按引用传递 。
python函数调用的参数传递python的函数参数传递是"引用传递(地址传递)" 。
python中赋值语句的过程(x = 1):先申请一段内存分配给一个整型对象来存储数据1 , 然后让变量x去指向这个对象 , 实际上就是指向这段内存(这里有点和C语言中的指针类似) 。
在Python中,会为每个层次生成一个符号表,里层能调用外层中的变量,而外层不能调用里层中的变量,并且当外层和里层有同名变量时,外层变量会被里层变量屏蔽掉 。函数调用会为函数局部变量生成一个新的符号表 。
局部变量:作用于该函数内部,一旦函数执行完成,该变量就被回收 。
全局变量:它是在函数外部定义的,作用域是整个文件 。全局变量可以直接在函数里面应用,但是如果要在函数内部改变全局变量 , 必须使用global关键字进行声明 。
注意 :默认值在函数定义作用域被解析
在定义函数时,就已经执行力它的局部变量
python中不可变类型是共享内存地址的:把相同的两个不可变类型数据赋给两个不同变量a,b,a , b在内存中的地址是一样的 。
python在定义类的时候,如何把类函数传递给另一个变量,如下函数是组织好python类函数传递的python类函数传递,可重复使用的,用来实现单一,或相关联功能的代码段 。
函数能提高应用的模块性,和代码的重复利用率 。你已经知道Python提供了许多内建函数,比如print() 。但你也可以自己创见函数,这被叫做用户自定义函数 。
一、定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
1.函数代码块以def关键词开头,后接函数标识符名称和圆括号() 。
2.任何传入参数和自变量必须放在圆括号中间 。圆括号之间可以用于定义参数 。
3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明 。
4.函数内容以冒号起始,并且缩进 。
5.Return[expression]结束函数,选择性地返回一个值给调用方 。不带表达式的return相当于返回 None 。
推荐阅读
- 抖音直播开放平台手机版,抖音直播开发平台
- windows下mongodb的使用教程,mongodbwindows安装
- html简单的登录界面模板,html漂亮的登录界面
- javajdbc连接oracle数据库,jdbc连接oracle数据库步骤代码
- linux命令nyso linux命令窗口
- flutter图片拉伸,flutter下拉图片放大
- gis局部放电种类,gis放电后的产物有哪些
- vb.net二级 vb中二级菜单怎么设置
- 微信小程序开发聊天气泡,微信小程序界面有流动气泡