#coding:utf-8 def selfAdd(a): a = a + a return a #返回 def selfAdd1(a): a += a a_list = [ 1,2] print(selfAdd(a_list)) #赋值回来 selfAdd(a_list) print a_list selfAdd1(a_list) print a_list """ 在python中,a=a+a是先创建一个新的对象并让变量a引用这个对象, a+=a是让a所引用的对象的值变成a+b的值 赋参数在python是用assignment (分配)不是reference(参考), 所以你赋a过去函数赋的是a的值,而不是a本身。 若你要改动a本身就需要用return赋值回來 分配的地址似乎一直在改变。 原因在于,Python中的数据结构分为可变(mutable)和不可变(immutable)。 对于可变类型,=和+=有着明显的不同,如上面的list: +表示连接操作,+=表示追加 对于不可变类型,=和+=就是一样的操作,如上面的tuple 可变类型与不可变类型的本质在于内存空间是否可变 """
#coding:utf-8 def fun (a,b,*args,**kwargs): print('a',2) print('b',3) print('args',args) print('kwargs',kwargs) for x in kwargs: print(x,kwargs[x]) print(x) """ 我们会发现运行结果p显示在最前面,注意到细节可知,字典的遍历结果的显示顺序是随机的。 Python的字典实现其实就是个哈希表(当然里面有一些优化), 每次赋值其实就是计算key的哈希值然后放到哈希表的指定位置中。 遍历的话就是从前向后遍历整个哈希表。 这里不讲处理冲突,就说最简单的往一个空字典中插入两个值。 """ fun(1,2,3,4,5,0,n=6,m=7,p=9) fun(1,2,3,4,5,0,m=6,n=7,o=9) fun(1,2,3,4,5,0,m=6,n=7 ) fun(1,2,3,4,5,0,o=6,n=7 )#运行结果O在前面 fun(1,2,3,4,5,0,n=6,o=7 ) fun(1,2,3,4,5,0,m=6,n=7,p=9) ''' fun(1,2,3,4,5,m=6,n=7,p=9,0) 这样写是错误的,因为最后一类的类型需要是字典, 并且不定长元祖参数需要放在不定长字典参数之前 ''' c=(9,10,11) d={'m':12,'n':13,'p':14} fun(1,2,*c,**d)
#coding:utf-8
def int (name,age = 20 ):
print("name",name)
print("age",age)
int(name='kouys') #print("********************8888")
def int (name,age = 20):
print("name",name)
print("age",age)
print int(name='kouys')
#只输入了name的初值,因此输出时age输出默认值,name输出给定值
#print int(name='kouys',2)这样写会报错,因为前面name用了关键词锁定,而age没有用,在python这里是不被允许的
#print int(name='kouys',age=2) or print int('kouys',2)这样写是正确的,格式统一
print("********************8888")
def int (name,age = 20):
return name
#此处用了函数返回值return
return age
print int(name='kouys')
print("********************8888")
def int (name,age = 20):
return name
return age
print int('kouys',2) #此时name,age都输入了初值,因此输出的name为kouys,age为2
print("********************8888")
这里给出两个参数的不同输出,输入方法,以及一些相关性质,还有一些注意事项,具体看一下上例应该会明白一点。
接下来,我们会针对不确定参数个数,所以我们要用特殊的方法符号来表达自己的函数,例如*args、*kwargs,这两个是特殊的符号,前者代表元组,后者代表字典,将后期不定长参数进行总合输出。在此给出一个例子,本人也有不懂之处,有错望指出。此处摘自别人指点(Python的字典实现其实就是个哈希表(当然里面有一些优化),每次赋值其实就是计算key的哈希值然后放到哈希表的指定位置中。遍历的话就是从前向后遍历整个哈希表。这里不讲处理冲突,就说最简单的往一个空字典中插入两个值。)
关于字典的输出,是根据key值,而不是根据value值。话说随机,但是看到每次的输出结果又莫名感觉有点规律,但是又说不出其中缘由,看代码中的fun(1,2,3,4,5,0,n=7,m=6,p=9)以及fun(1,2,3,4,5,0,m=6,n=7,p=9)可知p.m.n即便数值不同位置显示一致
python三之缺省函数(及字典)
最新推荐文章于 2022-07-25 11:15:35 发布