参数
位置参数
函数调用时,实参数默认按位置顺序传递,需要和个数和形参匹配,按位置传递的参数,成为“位置参数”
// An highlighted block
def test01(a,b,c):
d=a*b*c
print(d)
#test01(20,30) #形参和实参的个数需要对应,不然会出错
test01(20,30,40)
默认值参数
参数在传递时可选,必须放在普通参数的后边。
// An highlighted block
def test01(a,b,c=40,d=50):
print(a,b,c,d)
test01(20,30) #这时传递的是a,b的值
test01(20,30,70) #这时传递的是a,b,c的值
命名参数
形参的名称传递参数
// An highlighted block
def test01(a,b,c):
print(a,b,c)
test01(8,9,10) #位置参数
test01(b=9,a=8,c=10) #命令参数,位置可以改变
可变参数
可改变数量的参数,将多个参数收集到一个“元组”,“字典”对象中。
- *param “元组”
- **param “字典”
// An highlighted block
def test01(a,b,*c):
print(a,b,c)
def test02(a,b,**c):
print(a,b,c)
test01(8,9,100,200) #元组
test02(8,9,name='一个小白的日常',age=24) #字典
lambda表达式和匿名函数
用来声明匿名函数,生成一个函数对象。只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是一个函数的返回值。
基本语法: lambda arg1,arg2,arg3…:<表达式>
arg1,arg2,arg3为函数的参数。
<表达式>相当于函数体,运行结果:表达式的运算结果。
// An highlighted block
f=lambda a,b,c:a+b+c
print(f)
print(f(2,3,4))
eval()函数
将字符串str当成有效表达式来求值并计算返回结果
基本语法:eval(source[,globals[,locals]])->value
source:一个python表达式或函数compile()返回的代码对象。
globals:可选,必须是dictionary.
locals:可选,任意映射对象。
// An highlighted block
s="print('abc')"
eval(s) #执行输出语句
s="print('一个小白的日常')"
eval(s) #当参数变得时候,也会跟着改变
a=10
b=20
c=eval("a*b")
print(c) #执行乘法运算
dict1=dict(a=100,b=200)
d=eval("a*b",dict1)
print(d) #执行元组的参数的乘法运算
递归函数
自己调用自己的函数
- 终止条件:表示递归什么时候结束,一般用于返回值,不再调用自己。
- 递归步骤:把第n步的值和第n-1步相关联。
递归函数由于会创建大量的函数对象,过量的消耗内存和运算能力。在处理大量数据时,谨慎使用。
// An highlighted block
def test01(n):
print("test01:",n,end="\t")
if n==0: #当n为0时,整个调用停止
print("over")
else: #控制调用次数n在一定范围就结束
test01(n-1)
print("test01***",n,end="\t") #不参与递归调用,就是普通调用
test01(5)
练习:递归实现阶乘
// An highlighted block
'''练习阶乘'''
def factional(n):
if n==1:
return 1 #求1的阶乘时,直接返回1
else:
return n*factional(n-1) #不为1时,则通过调用求阶乘
for i in range(1,6):
print(i,"!=",factional(i),end='\t') #1-5的阶乘