本文主要是介绍python中的函数调用的传递方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python中的元素有可变和不可变之分,如整数、浮点数、字符串、元组都属于不可变元素。列表和字典属于可变的。
对于整数、浮点数的不可变:
“=”的作用是将对象引用过与内存中的对象进行绑定,既然整数是不可变的,那么怎么改变一个指向整数的变量的值的呢? 答案是直接在内存中创建一个新的整数,然后将变量引用与其绑定,这虽然本质上和其他高级语言不同,但是在使用上是有差
别的,但若将其提供给函数作为参数,则效果不同。
在函数调用时,若提供的是不可变的参数,那么在函数内部对其进行修改时,在函数外部是不变的‘若提供的是可变参数,则
在函数内部对其进行修改,在函数外部其值也是会改变的。
def change(anit,alst): #定义函数anit=0 #修改anit值alst[0]=0 #修改alst中第一个数alst.append(4) #在alst中添加一个元素4print("函数中anit:",anit)print("函数中alst:",alst)anit=3
alst=[1,2,3]
print('调用前anit:',anit)
print("调用前alst:",alst)
change(anit,alst)
print('调用后anit:',anit) #调用后值和调用前相同
print("调用后alst:",alst) #调用后值和调用前不同
运行结果如下:
可以看出,在调用前后不可变量anit的值虽然在函数内部进行了改变,但函数退出之后仍然不变;而可变的列表alst则完全不同,在调用函数后,显示了函数内部的一切改变都应用了。但是在函数中,可变的和不可变的量的值的改变是应用的。
列表、字典是可变对象,它在作为函数的默认参数时们要注意一个陷阱。
def myfun(lst=[]): #定义有一个默认值为空列表的参数lst.append('abc')print(lst)
myfun() #此后三次调用该函数
myfun()
myfun()
运行结果如下:
每次调用函数按照默认值的理解,应该是每次传入空列表,列表中只有一个元素'abc',但是事实并非如此。
如果要想实现空列表的默认参数,可以修改函数代码如下:
def myfun(lst=None):lst=[] if lst is None else lstlst.append('abc')print(lst)
myfun()
myfun()
myfun()
运行结果如下:
这篇关于python中的函数调用的传递方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!