python三之缺省函数(及字典)

来源:互联网 发布:稀土元素男装淘宝 编辑:程序博客网 时间:2024/06/03 16:54
#coding:utf-8def selfAdd(a):   a = a + a   return a   #返回def selfAdd1(a):   a  += aa_list = [ 1,2]print(selfAdd(a_list)) #赋值回来selfAdd(a_list)print a_listselfAdd1(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-8def 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即便数值不同位置显示一致

原创粉丝点击