函数:
1.函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
2.语法:
def 函数名(参数列表):
函数体
return XXX
def fun(a1):
a1="李四";
print("函数内部a1:",a1)
a="张三";
print("调用前:",a)
fun(a)
print("调用后:",a)
ff=['悟空','八戒','沙僧'];
def fun(nums):
# nums[0]="张飞";
# nums[1]="刘备";
nums=ff;
nums=["李逵","松江"];
print("调用前:",nums)
fun(nums)
print("调用后:",nums)
4.以下是调用函数时可使用的正式参数类型:
def fun1(a=3,b=2):
'''
:parama 第一个加数:
:param b:第二个加数
:return: a+b的和
'''
return a+b;
h=fun1(4,4);
print(h)
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print ("名字: ", name);
print ("年龄: ", age);
return;
printinfo('ok');
不定长参数(可变参数):
可变参数允许你传入0个或任意个参数,
这些可变参数在函数调用时自动组装为一个tuple
def GetSum(*nums):
sum=0;
for i in nums:
sum+=i;
return sum;
s=[2,3,4,5];
t=(2,3,4,5,6,7,8)
print(GetSum())
print(GetSum(*s))
print(GetSum(*t))
命名关键字参数
name=value
def show(name,age,sorce=90):
print('姓名:{} 年龄:{}成绩:{}'.format(name,age,sorce))
show('OK',30)
show(age=30,name='OK')
show(sorce=80,age=30,name='OK')
show('OK',name='ok',age=30)
关键字参数:关键字参数允许你传入0个或任意个含参数名的参数,
这些关键字参数在函数内部自动组装为一个dict
例:# 关键字参数:**kw
def student(name,age,**kw):
kw.clear()
print('姓名{} ,年龄{} other:{}'.format(name,age,kw))
#值传递
def fun3(kw):
kw.clear();
student('tom',30,hao='篮球',ai='足球');
dic={'一':123,'二':223,'三':333}
student('ok',30,**dic)
print(dic)
dic2={'一':123,'二':223,'三':333}
fun3(dic2)
print(dic2)
参数组合
比如定义一个函数,包含上述若干种参数:
def f1(a, b, c=0,*args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f1('A','B')
f1(b='B',a='A')
f1(b='B',a='A',c=9)
f1(*args)
f1('A','B',**kw)
f1(*args,**kw)
变量作用域:
原因就是: 位置不同-->作用域不同
全局变量与局部变量的作用域不同
生命周期不同
g_a=10;#全局变量
def changeNum(g_a):
g_a=5;#局部变量
print("函数内部:",(g_a+10))
print("调用前:",g_a)
changeNum(1)
print("调用后:",g_a)
当全局变量和局部变量同名时,局部变量优先 -->就近一致原则
匿名函数:
python 使用 lambda 来创建匿名函数
def fun1(a=3,b=2):
'''
:parama 第一个加数:
:param b:第二个加数
:return: a+b的和
'''
return a+b;
sum=lambda a,b:a*b;
s=sum(2,3);
print(s);
def dfdsfe(a,b):
return a+b;
def add(a,b,fun):
'''
:parama:
:paramb:
:paramfun 传递过来的函数:
:return:
'''
print(fun(a,b));
add(11,22,dfdsfe)
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
fun=lambda x: x%2!=0;
f=filter(fun,foo);
print(list(f))
mapmap将序列的每个元素传入函数中执行,并把结果作为新的list返回。
print(list( map(lambda x:x%2,foo)))
利用filter(),可以完成很多有用的功能,例如,删除None 或者空字符串:
def is_not_empty(s):
return s and len(s.strip())>0;
names=['ko',None,'','ok'];
l=list(filter(lambda s:s and len(s.strip())>0,names))
print(l)
python reduce():对于序列内所有元素进行累计操作
r=reduce(lambda a,b:a+b,foo);
sum =reduce(lambda a,b:a+b, (1, 2, 3, 4, 5, 6, 7))