调用函数时使用的正式参数类型:
必选参数
形参和实参------对应(个数,数据类型,顺序)
形参:定义方法时的参数
实参;调用方法时的参数
def fun(a=3,b=2):
'''
:param a 第一个加数
:param b: 第二个加数
:return: a+b的和
'''
return a+b
h=fun(4,4)
print(h)
默认参数:
缺省参数必须写在后面,可以不指定参数名,但是顺序要一致,否则要写参数名
def printinfo(name,age=35):
print("名字:",name)
print("年龄:",age)
return
prntinfo('ok')
不定长参数(可变参数)
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple(用*标书)
def get(*nums):
sum=0
for i in nums:
sum+=1
return sum
s=[2,3,4,5]
t=(2,3,4,5,6,7,8)
print(get())
print(get(*s))
print(get(*t))
输出结果 0 14 35
命名关键字参数
1.一旦以name=value的传参数的形式存在 后面的也要是这种形式
2.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')
<span style="color:#ff0000;">show('OK',name='ok',age=30)</span>
>>> 姓名:OK 年龄:30成绩:90
姓名:OK 年龄:30成绩:90
姓名:OK 年龄:30成绩:80
<span style="color:#ff0000;"> 抛异常</span>
关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict;
关键字参数:**kw
**kw拷贝原内容,改动不会影响到函数外的extra;
[html] view plain copy
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)
>>> 姓名tom ,年龄30 other:{}
姓名ok ,年龄30 other:{}
{'一': 123, '二': 223, '三': 333}
{}
参数组合
[html] view plain copy
[html] view plain copy
def f1(a,b,c=0,*args,**kw):
print('a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw)
args=(1,2,3,4)
f1(args);
>>> a = 1 b = 2 c = 3 args = (4,) kw = {}<strong style="text-indent:2em;white-space:pre;font-family:'PingFang SC', 'Microsoft YaHei', SimHei, Arial, SimSun;font-size:16px;"></strong>
[html] view plain copy
[html] view plain copy
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
>>> a = A b = B c = 0 args = () kw = {'d': 99, 'x': '#'}
[html] view plain copy
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(*args,**kw)
>>> a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}
函数的作用域
原因就是: 位置不同-->作用域不同,全局变量与局部变量的作用域不同 生命周期不同;
[html] view plain copy
g_a=10;#全局变量
def changeNum(g_a):
# g_a=5;#局部变量
print("函数内部:",(g_a+10))
#
# print("调用前:",g_a)
# changeNum(1)
# print("调用后:",g_a)
>>> 调用前:10
函数内部: 11
调用后: 10
#当全局变量和局部变量同名时,局部变量优先 -->就近一致原则
5.匿名函数:
python 使用 lambda 来创建匿名函数;
(函数体内调用函数也叫高阶函数)
[html] view plain copy
sum=lambda a,b:a*b;
s=sum(2,3);
print(s);
>>> 6
[html] view plain copy
def dfdsfe(a,b):
return a+b;
def add(a,b,fun):
print(fun(a,b));
add(11,22,dfdsfe)
>>> 33
6.filter()过滤函数:
接收一个函数一个序列,将序列中的元素应用到函数内,返回值为真则保留,为假则丢弃。
当我在执行filter函数的时候,一直报<filter object at 0x03000750>。我的环境是Python3.6
应该讲filter函数转换成list;
[html] view plain copy
def chint (x):
return isinstance (x ,int)
lis = [1,2,'yao',3,'yi']
a = filter (chint , lis)
print(<span style="color:#ff0000;"><strong>list</strong></span>(a))
>>> [1,2,3]
7.map()函数将序列的每个元素传入函数中执行,并把结果作为新的list返回。
[html] view plain copy
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
print(<strong><span style="color:#ff0000;">list</span></strong>( map(lambda x:x%2,foo)))
>>> [0, 0, 1, 0, 1, 0, 0, 0, 1]
8.python reduce():每次迭代,将上一次的迭代结果与下一个元素一同执行一个二元的func函数;
[html] view plain copy
n = 5
print reduce(lambda x, y: x * y, range(1, n + 1))
>>> 120