python-函数

xiaoxiao2021-02-28  57



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循环:(规律函数)  例:112358.......... 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')

转载请注明原文地址: https://www.6miu.com/read-72618.html

最新回复(0)