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')
python-函数
最新推荐文章于 2022-06-04 22:58:12 发布