1.函数的定义与调用
2.函数的参数及返回值
3.变量的作用域
4.函数的递归调用
5.函数式编程
6.1 函数的定义与调用
格式: def<函数名>(<参数列表>):
<函数体>
与c不同的是,没有规定返回值类型
调用时:<函数名>(<参数列表>)
tips:
python不允许在函数未声明之前进行引用或调用
6.2函数的参数和返回值
1.参数的传递与修改 对于不可变类型int float string tuple,直接将值传给形参,引用了值的地址
def func1(n):
n=20
print(n)
a=10
func1(a)
打印a的值仍为10,但func1的结果为20
2.如果实际参数的数据类型是可变的对象(列表,字典),则参数的传递方式将采用引用传递方式
def func2(n):
n[1] = 10
print(n)
a=[1,2,3]
func2(a)
print(f"传递前的a变为{a}")
结果为:
[1, 10, 3]
传递前的a变为[1, 10, 3]
为了保证原始列表的安全,可以把列表的切片作为实参传递给函数
tips:
1.当一个函数有多个参数时,实参默认采用的是按位置顺序传递给形参
2.函数定义时可以给默认值
def func1(a,b,c = 3):
print(a,b,c)
3.python可以接受非固定的数目的参数
def func1(*a):
print(a)
func1(1,2,3)//结果为(1,2,3)
func1(1,2)//结果为(1,2)
默认为元组
4.函数的返回值
定义函数时不需要声明函数的返回值类型
函数返回值类型与return语句返回的表达式类型一致
可以返回元组类型,类似返回多个值
list1=[]
def fun(*n):
a=sum(n)/len(n)
for i in n:
if(i < a):
list1.append(i)
return a,list1
print(fun(1,2,3,4))
6.3变量的作用域
标识符的作用域为其声明在程序里的可应用范围
全局变量与局部变量
全局变量与全局变量的生命周期
a = 1
def func1():
b = 10
global c
c = 20
print("Local:",b)
func1()
print("Global:",a)
print("Global:",c)
内嵌函数:在函数里面再定义一个新的函数(不是嵌套调用)
如果在函数体内不调用内嵌的函数,那么无法在外部调用
标识符解析的LEGB法则:
local(局部作用域) ---->enclosing(函数范围作用域)
global(全局作用域)----->build-in(内建对象作用域)
在 if while for等语句中定义的变量,后续仍可以继续使用,并不产生新的作用域,只有module class def才会出现新的作用域
x=1
def f1():
print("f1:",x)
def f2():
x =3
print("f2:",x)
f1()
f2()
x = 1
def f1():
# print("f1",x)
global x
x = 2
print("f1:",x)
f1()
print(x)
f1: 2
2