标签:不同的 函数 小知识 这一 逗号 nbsp 结果 result div
预习:
1 函数的返回值可以以元组的形式返回多个。
补充一个小知识:
判断是否为元组的核心是逗号,即便是没有()包裹起来,它也是元组。明白这一点,就会有恍然大悟的感觉。
例如:
a=1,2 print(a,type(a))
输出:
(1, 2) <class ‘tuple‘>
所以,下面就比较容易理解了:
def plus(x,y): return x,x+y #看起来是两个返回值,本质上是一个元组,因为有个逗号,所有python会认为x,x+y 就是元组(x,x+y)。下面的结果就是理所当然 print(plus(1,2))
等价于:
def plus(x,y): a=x,x+y #在这里,a就是一个元组。 return a print(plus(1,2))
输出:
(1, 3)
2 函数传参的时候注意可变类型与不可变类型。
传参的时候,一定要区分可变类型与不可变类型。两者会有本质的区别。
传的参数是不可变类型时:
name=‘hello‘ def func(x): return x.replace(‘l‘,‘g‘)
result=func(name) print(result) print(name)
输出:
heggo hello
会发现,传入的变量本身并没有变化。
传的参数是可变类型时:
l=[1,2,3,4] def func(x): x.append(5) return x
result=func(l) print(result)
print(l)
输出:
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
去上面不可变类型不同的是,可变类型作为参数传入的时候,会被函数所影响,会发生变化。
原因就在于,传参实际上是有这样一个过程。参数传进来的时候,会有一个赋值的过程。
name=‘hello‘ def func(x): return x.replace(‘l‘,‘g‘) result=func(name) # name=‘hello‘ # x=name # x=‘hello‘ #x,name在这个时候尽管都等于‘hello’,指向‘hello’在内存中的同一个地址。但是因为是不可变类型,所哟x.repalce()之后,x就会指向一个新的内存地址,表现出来x发生了变化。而name本身没有变化 print(result) print(name)
l=[1,2,3,4] def func(x): x.append(5) return x result=func(l) # l=[1,2,3,4] #x=l,实际上变量名x,变量名l,指向内存中同一个空间。列表是可变类型,对其的方法都会使其本身发生变化。 # x=l # x=[1,2,3,4] print(result) print(l)
标签:不同的 函数 小知识 这一 逗号 nbsp 结果 result div
原文地址:http://www.cnblogs.com/654321cc/p/7440273.html