栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python中函数参数传入为list元素时不改变

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中函数参数传入为list元素时不改变

在练习python实现数值排序问题时,遇到一个问题如下:
输入n个数,从小到大输出(没用sort方法):
#程序如下

num = str(input('input number:'))
num = num.split()
num =[int(k) for k in num]

def change(a,b):
    a,b = b,a
    return a,b
#冒泡排序
for i in range(len(num)-1):
	for j in range(len(num)-1-i):
		if num[j]>num[j+1]:
			change(num[j],num[j+1])
print(num)
#输入"3 2 1"
#理论输出 :[1,2,3],
#实际结果:[3,2,1],原封不动的输出

经过排查发现问题出在了change函数的参数上,原来python分为可变对象和不可变对象。当函数传入的为不可变对象时,值不会改变;若是可变对象,才会改变。
简单测试如下:

#c函数传入参数为number;为不可变对象
def c(a,b):
    a,b=b,a
    return a,b
m=1
n=2
print(c(m,n))
print(m)
#实际输出:
#(2,1)
#1
#稍作改变:
l=[1,2]
def c(l):
    l[0],l[1]=l[1],l[0]
    return l
print(l)
#结果:[2, 1]

发现传入参数为list(可变对象)时,原输入参数会变。

因此原排序函数可改为如下(为了说明上述原因,其实可不用写change函数):

num = str(input('input number:'))
num = num.split()
num =[int(k) for k in num]

def change(l,n):  #输入l为可变对象list
	l[n],l[n+1]=l[n+1],l[n]
	
#冒泡排序
for i in range(len(num)-1):
	for j in range(len(num)-1-i):
		if num[j]>num[j+1]:
			change(num,j)
print(num)

总结:
python函数传入参数时,需要根据自己的原意,输入可变或不可变类型的参数。其分类如下:
不可变(immutable):int、字符串(str)、float、(数值型number)、元组(tuple)、None(空)
可变(mutable):字典型(dictionary)、列表型(list), set(集合)

*菜鸡CSDN第一篇文章——勇敢迈出第一步 *

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839829.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号