1,定义函数 num1 = input('num1:') operate = raw_input('operate:') num2 = input('num2:') def add(num1,num2): return num1+num2 def diff(num1,num2): return num1-num2 if operate == '+' or '-' or '*' or'/': dic = {'+':add(num1,num2),'-':diff(num1,num2)} print dic[operate] else: print "please input rightvalue" 2,未定义函数 num1 = input('num1:') operate = raw_input('operate:') num2 = input('num2:') dic = {'+':num1+num2,'-': num1-num2,'*':num1*num2,'/':num1/num2} if operate in dic.keys(): print dic[operate] else: print "please input rightvalue" #####################函数#################################### 函数在执行过程中一旦遇到return,函数就执行完毕,并将结果返回。 函数在执行过程中没有遇到return时,返回值None。 如果要定义一个什么也不做的空函数时,可以用pass语句,作为一个占位符,让代码先运行起来。 1,函数的参数检查: def myabs(x): if isinstance(x,(int,float)): ##判断是否是整形或浮点型 return abs(x) else: print "please onevalue" print myabs(x) 2,输入名字,返回名字 def func(name): return name print func(name) 3,函数返回多个值,实质上是返回一个元组tuple,返回时元组可以省略括号。 函数调用接收返回值,按照位置赋给变量。 def func(num1,num2): average = (num1 + num2)/2.0 if num1>num2: return num1,average else: return num2,average print func(1,2) 4,默认函数容易出错点: 先定义一个函数,传入一个list,添加一个END再返回。 def fun(li=None): if li is None: return 'END' li.append('END') ###在列表末尾加'END' return li print fun([1,2,3]) print fun() print fun() 5,可变参数,选出最大值 def fun(*args): print type(args) return max(args),min(args) li = 1,2,3,45,6,7 print fun(*li) 6.##默认参数,必选参数同时在函数中存在时,一定要将必选参数放在默认参数前面; ##设置默认参数时,把变化大的参数放前面,变化小的参数放后面,变化小的参数可以设置为默认参数。 def power(x,n=2): return x**n print power(2,3) def enroll(name,age=22,myclass="西部开源运维班"): print 'name':+name print 'age:%d' % age prit 'class:'+ myclass enroll('lilei') enroll('xiaoming',18) enroll('fentiao',6,'全能班') 7.#参数定义的顺序:必选参数 > 默认参数 > 可变参数 > 关键字参数 ##*args,可变参数,args接收的tuple. ##**kwargs,关键字参数,kwargs接收的是字典。 关键字参数: def enroll(name ,age=22,**kwargs): print 'name'+name print 'age:%d' % age for k,w in kwargs.items(): print '%s: %s'%(k,w) print type(kwargs) enroll(' fentiao',myclass='全能班') 8.全局变量/局部变量 b = 2 ##全局变量,在整个代码中生效 def a(): global b b=1 ##局部变量,只在函数内生效 print b a() print b ########################################递归############################ 1.递归函数,求阶乘: ####1,在写递归函数时要有一个明确的结束条件; ####2,在递归时,问题规模要越来越小; ####3,递归函数效率不高,函数调用时通过栈的数据结构实现的; 每调用一次,栈就会多一层,最多999层,否则会出现栈溢出。 1! = 1 2! = (2-1)! x2 3! = (3-1)! x 2 def fact(n): if not isinstance(n,int): print "This is anumber" else: if n == 1: return 1 return fact(n-1) * n print fact(4.5) 2.递归二分法: def fun(n): if not isinstance(n, int): ###判断是否是整数 print "This is not a intnumber" else: print n if int(n/2) >0: return fun(int(n/2)) fun(9.9) 3.高级特性: [1,2,3,4]----->[1x1.,2x2,3x3,4x4] b = [] def fun(): for i in range(1,9): b.append(i*i) print b fun() 4.字符串的连接 print [ str(i)+y for i in range(1,4) for y in str('ABC')] print [ i+y for i in '123' for y in 'ABC'] 结果: ['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C'] 5. li = ['Hello','World'] print [i.lower() for i in li if isinstance(i,str)] #############################迭代####################### 迭代:(可进行for循环) 1.查看数据类型是否可迭代: from collections import Iterable In [3]: isinstance('hello',Iterable) Out[3]: True In [4]: isinstance([1,2,3],Iterable) Out[4]: True In [5]: isinstance(1,Iterable) ---->整型不可迭代 Out[5]: False In [6]: isinstance({1,2,3},Iterable) Out[6]: True In [7]: isinstance({"name":"fentiao"},Iterable) Out[7]: True In [8]: isinstance((1,2,3),Iterable) Out[8]: True 2.在for循环里面引用两个变量 shopinfo = [ ('Iphone',1000), ('book',200), ('fentiao',3500) ] for k,v in shopinfo: print k,v 3.枚举方法,显示为索引-元素对 shopinfo = [ ('Iphone',1000), ('book',200), ('fentiao',3500) ] for i,v in enumerate(shopinfo): ###索引-元素对 print i,v 4.while循环:(规律函数) 例:1,1,2,3,5,8.......... def fib(max): n,a,b = 0,0,1 while n < max: print b a,b = b,a+b n +=1 fib(4) ##加入生成器: def fib(max): n,a,b = 0,0,1 while n < max: yield b a,b = b,a+b n +=1 for i in fib(4): print i 5.yield生成器 def hello(): print 'a' yield 1 print 'b' yield 2 print 'c' yield 3 a = hello() a.next() a.next() a.next() 6. def consumer(name): print '%s 准备吃粉条了!'%(name) while True: fentiao = yield print ('粉条[%s]做出来了,被[%s]吃了')%(fentiao,name) g = consumer('xiaoming') g.next() g.send('麻辣味') g.send('酸辣味') 7. import time def consumer(name): print '%s 准备吃粉条了!'%(name) while True: fentiao = yield print ('粉条[%s]做出来了,被[%s]吃了')%(fentiao,name) #g = consumer('xiaoming') #g.next() #g.send('麻辣味') def producer(name): c1 = consumer('xiaoming') c2 = consumer('wangying') c1.next() c2.next() print '开始制作粉条了.......' for i in range(1,11): time.sleep(1) print '[%s]做了两份粉条,两个人一起吃' %(name) c1.send(i) c2.send(i) producer('liurong')
