函数:
1.函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
2.语法:
def函数名(参数列表):
函数体
returnXXX
deffun(a1):
a1="李四";
print("函数内部a1:",a1)
a="张三";
print("调用前:",a)
fun(a)
print("调用后:",a)
ff=['悟空','八戒','沙僧'];
deffun(nums):
# nums[0]="张飞";
# nums[1]="刘备";
nums=ff;
nums=["李逵","松江"];
print("调用前:",nums)
fun(nums)
print("调用后:",nums)
4.以下是调用函数时可使用的正式参数类型:
deffun1(a=3,b=2):
'''
:parama第一个加数:
:paramb:第二个加数
:return: a+b的和
'''
return a+b;
h=fun1(4,4);
print(h)
defprintinfo( name, age =35):
"打印任何传入的字符串"
print("名字: ", name);
print("年龄: ", age);
return;
printinfo('ok');
不定长参数(可变参数):
可变参数允许你传入0个或任意个参数,
这些可变参数在函数调用时自动组装为一个tuple
defGetSum(*nums):
sum=0;
foriinnums:
sum+=i;
returnsum;
s=[2,3,4,5];
t=(2,3,4,5,6,7,8)
print(GetSum())
print(GetSum(*s))
print(GetSum(*t))
命名关键字参数
name=value
defshow(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
defstudent(name,age,**kw):
kw.clear()
print('姓名{} ,年龄{} other:{}'.format(name,age,kw))
#值传递
deffun3(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)
参数组合
比如定义一个函数,包含上述若干种参数:
deff1(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;#全局变量
defchangeNum(g_a):
g_a=5;#局部变量
print("函数内部:",(g_a+10))
print("调用前:",g_a)
changeNum(1)
print("调用后:",g_a)
当全局变量和局部变量同名时,局部变量优先 -->就近一致原则
匿名函数:
python 使用 lambda来创建匿名函数
deffun1(a=3,b=2):
'''
:parama第一个加数:
:paramb:第二个加数
:return: a+b的和
'''
return a+b;
sum=lambdaa,b:a*b;
s=sum(2,3);
print(s);
defdfdsfe(a,b):
returna+b;
defadd(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=lambdax: x%2!=0;
f=filter(fun,foo);
print(list(f))
mapmap将序列的每个元素传入函数中执行,并把结果作为新的list返回。
print(list( map(lambdax:x%2,foo)))
利用filter(),可以完成很多有用的功能,例如,删除None或者空字符串:
defis_not_empty(s):
return sandlen(s.strip())>0;
names=['ko',None,'','ok'];
l=list(filter(lambdas:sandlen(s.strip())>0,names))
print(l)
python reduce():对于序列内所有元素进行累计操作
r=reduce(lambdaa,b:a+b,foo);
sum =reduce(lambdaa,b:a+b, (1,2,3,4,5,6,7))