Python函数
全球变量 < 局部变量
传参方法:
- 位置传参 和 关键字传参(常用关键字传参)
函数里定义参数默认值需放在最后
错误的
Def func_name(arg=100,arg1,arg2,arg,3):
正确的
Def func_name(arg1,arg2,arg,3,arg=100):
可变位置函数(所谓的可变是指传参数量可变)Def func_name(*arg): 打包-->元组可变关键字函数 Dfe func_name(**kwarg): 打包-->字典
可变位置传参: 解包-->func_name(*li)
#!/usr/bin/env python
def func_name(*args):
print args
func2_name(args)
li.append(5)
def func2_name(b):
global li ###若不加global则会报错
for i in range(len(li)):
print b[i]
li = [1,2,3,4]
li = [1,2,3,4,5,6,7,8,9]
func_name(*li) ###解包,若不加*则函数打印出来的a为一个元素,元素为列表
print li
可变关键字传参:
1.
#!/usr/bin/env python
def func_name(**kwargs):
For k,v in kwargs.items():
print k,v
d = {‘name‘:‘nick‘,‘age‘:20,‘sex‘:‘male‘}
func_name(**d) ###解包,将一个字典解包到函数里,d = kwargs
2.
#!/usr/bin/env python
def func_name(**kwargs):
name = kwargs[‘name‘]
sex = kwargs[‘sex‘]
age = None
print name
print sex
if kwargs.has_key(‘age‘):
age = kwargs[‘age‘]
print age
func_name(name=‘tom‘,sex=‘male‘,age=20)
混合函数:可变参数应放在不可变参数后面
错误的
def func_name(*arg,x,y):
print x,y
print arg
有副作用的函数指的是带print的函数,所以函数中尽量不出现print语句
return语句
def func_name(x,y):
if x>y:
return x-y
else:
return y-x
a = func_name(1832/32.0,77) ###此处需要将函数的返回值赋给a,否则执行不会返回数值
print a
若return返回两个值则需要两个变量来接,若只有一个变量则return返回值会打包成元组,如:
def func_name(x,y):
if x>y:
return x-y,x
else:
return y-x,y
若a = func_name(88,77),则a = (11,88)
若a,b = func_name(88,77),则a = 11,b = 88
递归函数:函数体内直接或间接调用自身
两个点:1、最深1000层 2、有退出条件(e.g. return)
#!/usr/bin/env python
def func_name(n):
if n <= 1:
return n
return func_name(n-1)*n
a = func_name(10)
print a
def func_name1(n):
ret = 1
for i in range(1,n+1):
ret = ret * i
return ret
b = func_name1(10)
print b
两个函数都是求阶乘,但是for循环比递归函数好
a = func_name 和 a = func_name()是不一样的,前者a是函数,后者是a是函数输出的值
#!/usr/bin/env python
def func_name(f):
print ‘this is func1‘
f(6,25) ###在哪调用在哪里传参!!!
def func2_name(x,y):
print ‘this in func2‘
print x+2*y
func_name(func2_name)
高阶函数:
过滤函数filter(函数,列表)
#!/usr/bin/env python
li = [5,7,32,72,6,235,6,2532,632,1]
def func_name(f,l):
li = []
for i in l:
if f(i):
li.append(i)
return li
def func_name1(n):
return (n+1)%2==0
a = func_name(func_name1,li)
print a
分布过程map(函数,列表)
#!/usr/bin/env python
li = [5,7,32,72,6,235,6,2532,632,1]
def func_name2(f,l):
li2 = []
for i in l:
li2.append(f(i))
return li2
def func_name3(n):
return n*2+1
b = func_name2(func_name3,li)
print b
总结过程reduce(函数,列表)
#!/usr/bin/env python
def func_name(x,y):
return x+y
sum=reduce(func_name,(1,2,3,4,5,6,7))
print sum
另外可以使用lambda表达式
sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))
print sum