Python基础–详细记录Fifth_Chapter
1、函数概念
2、函数分类
3、函数定义和调用
3.1 形参和实参
3.2 文档字符串
3.3 返回值
3.4 函数是对象
def test01():
print("abc")
test01()
c = test01
c()
print(id(test01))
3.5 全局变量和局部变量
a = 3
def f():
a =5
b = 4
print(a)
f()
print(a)
3.6 参数的传递
可变对象传递:
指向同一个对象,不产生新内存
b=[10,20]
def f2(m):
print("m",id(m))
m.append(30)
f2(b)
print("b",id(b))
print(b)
不可变对象传递:
a=1
print(id(a))
def f1(a):
print(id(a))
a +=1
print(id(a))
f1(a)
3.7 浅拷贝和深拷贝
浅拷贝只拷贝地址(左栈右堆,拷贝对象地址):
深拷贝拷贝所有对象:
浅拷贝:
import copy
a = [10,20,[5,6]]
b = copy.copy(a)
print("a",a)
print("b",b)
b.append(30)
b[2].append(7)
print("浅拷贝")
print("a",a)
print("b",b)
传递不可变对象是浅拷贝
传递对象为不可变对象,不可变对象包含子集可变,修改次对象,源对象也发生变化
a = (10,20,[5,6])
print("a",id(a))
def test01(m):
print("m",id(m))
m[2][0] = 888
print(m)
print("m:",id(m))
test01(a)
print("a",id(a))
深拷贝:
a = [10,20,[5,6]]
b = copy.deepcopy(a)
print("a",a)
print("b",b)
b.append(30)
b[2].append(7)
print("深拷贝")
print("a",a)
print("b",b)
a和b完全独立:
3.8 函数参数
位置参数:
默认值参数:
命名参数:
可变参数:
强制命名:
3.9 lambda函数
形参:函数体
f = lambda x :x+2
print(f(1))
3.10 eval函数
3.11 递归函数
3.12 嵌套函数
什么时候使用嵌套函数:
例子中,内部函数只是为外部函数服务
nonlocal声明:
a = 100
def outer():
b=10
def inner():
nonlocal b #内部函数可直接饮用外部变量,如若修改需加nonlocal声明
print("inner",b)
b = 20
global a
a =1000
inner()
print("outer",b)
outer()
print(a)
3.12 LEGB
def outer():
# str = "bbb"
def inner():
# str ="aaa"
print(str)
inner()
outer()