python-函数

来源:互联网 发布:淘宝平台刷 编辑:程序博客网 时间:2024/06/11 04:16


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')