python 基础2
来源:互联网 发布:intouch组态软件下载 编辑:程序博客网 时间:2024/05/19 19:42
# encoding=utf-8from math import sqrtif __name__==('__main__'): #序列解包 x,y,z=1,2,3 print x,y,z x = ['gjl','xff','ccc'] y = ['gjj','xoo','cee'] print [(a,b) for a in x for b in y if a[0] == b[0]] letterys = {} for a in x: letterys.setdefault(a[0],[]).append(a) print letterys print( [(a,b) for a in x for b in letterys[a[0]]]) #循环中的else子句 注意他仅在没有执行break 句子的时候执行 """ while True: name = raw_input('please input your name:') if name: print('your name is '+name) break """ for x in range(99,0,-1): root = sqrt (x) if root == int (root): print root break else: print('dint find it') #抽象 参数 作用域 fibs = [0,1] for x in range(10): f = fibs[-2]+fibs[-1] fibs.append(f) print fibs def try_to_change(n): n[0] = 's' name = ['mr','s'] try_to_change(name) print name #关键字参数和默认值 关键字参数就是使用参数名 来调用参数 这样使得每个参数具有集体的意义 def saysomething(name,greeting): print( greeting+','+name) saysomething(greeting='hello',name='gjl') #很多时候可以让用户输入任意多的参数是非常有用的 可以 用* 支持 用** 支持关键字参数的收集 def print_params(**paras): print paras print_params(name ='a',gr='b') #输出{'name': 'a', 'gr': 'b'} #s收集参数的逆过程 def add(x,y): return x+y print add(*(1,2)) params ={ 'name':'gjl', 'greeting':'hello'} saysomething(**params) #下面的函数是对之前多讲的练习 主要是对于关键字参数的把握 以及参数收集 总体记住一点 *(**)可以传递元组 字典 def power(x,y,*others): if others: print 'redudunt paramters' return pow(x,y) def interval(start,stop=None,step=1): if stop is None: start,stop=0,start result = [] for x in range(start,stop,step): result.append(x) return result def sayHello(**kwds): print '%(greeting)s you are %(name)s are you ' % kwds sayHello(**{'greeting':'hello', 'name':'gjl'}) print power(*(2,3)) power(2,3,'hello') print power(x=2,y=3) print interval(0,10,2) print interval(10) #嵌套作用域 python中 函数是可以嵌套的 嵌套函数有一个很突出的作用 就是利用函数创建函数 下面的被创建的函数就可以访问 创建函数 的 参数, # 类似 被创建函数 存储子作用域的行为 叫做 closure # def multiplier(factor): def mutiplyByFactor(numbers): return numbers*factor return mutiplyByFactor double = multiplier(2) print(double(3)) #递归recursion 阶乘 幂 def recn(n): if n==0: return 1 return n*recn(n-1) print 102,recn(3) def power1(x,y): if y ==1: return x return x*power1(x,y-1) print 107, power1(2,3) #二分查找的基本要求是 列表有序 def search(lower,upper,x,seq): if(lower == upper): if (seq[upper]==x): return upper else:return None mid =(upper +lower)/2 if(x>seq[mid]): return search(mid+1,upper,x,seq) else: return search(lower,mid,x,seq) l =[1,2,4,5,7] print 120,search(0,len(l)-1,9,l) #利用关键字参数改写 def searchNew(x,seq,lower=0,upper=None): if upper is None: upper = len(seq)-1 if(lower == upper): if (seq[upper]==x): return upper else:return None mid =(upper +lower)/2 if(x>seq[mid]): return searchNew(x,seq,mid+1,upper) else: return searchNew(x,seq,lower,mid) print 136, searchNew(1,l)
阅读全文