1 函数参数类型
1.1 不可变参数类型
如整数、字符串、元组
函数内部修改参数的值,只是修改另一个复制的对象,不会影响变量本身
s = "春江花朝秋月夜"
print("函数外变量s的id", id(s)) # 函数外变量s的id 2867034036528
# 将s传递到下面定义额函数
def test(a):
print("传递到参数a的id值", id(a)) # 传递到参数a的id值 即a=s 2867034036528 # 将s传给参数a,相当于a=s
print("a的值:", a) # a的值: 春江花朝秋月夜
# 修改a的值
a = "往往取酒还独倾" # 相当于在函数内部定义了一个名字也叫a的变量,但并不是参数的a,未影响到s
print("修改后a的id", id(a)) # 修改后a的id 2867034744368
print("修改后的a", a) # 修改后的a 往往取酒还独倾
test(s) # 输出结果见上面注释
print("a值修改后,s的值", s) # a值修改后,s的值 春江花朝秋月夜 # s的值并没有改变
print(id(s)) # 2867034036528
1.2 可变类型参数
如列表,字典
将参数真正传递过去,修改后函数外部的变量也会受影响
lst_out = ["春江花朝秋月夜", "往往取酒还独倾"]
print("函数外lst的id值", id(lst_out)) # 函数外lst的id值 1721062216264
# 将lst_out传到以下函数
def test(lst_in):
print("lst_in的值和id", lst_in, id(lst_in)) # lst_out传到lst_in,即lst_in=lst_out
# lst_in的值和id ['春江花朝秋月夜', '往往取酒还独倾'] 1721062216264
lst_in.append("岂无山歌与村笛") # 修改了lst_out
print("修改后的lst_in的值和id", lst_in, id(lst_in))
# 修改后的lst_in的值和id['春江花朝秋月夜', '往往取酒还独倾', '岂无山歌与村笛'] 1721062216264
test(lst_out) # 输出结果见上面注释
print("函数外lst的id值", id(lst_out)) # 函数外lst的id值 1721062216264 始终是同一个地址lst_out也被修改
## 2 命名空间 ### 2.1 命名空间 命名空间指的是保存程序中的变量名和值的地方,本质是一个字典,字典的key是变量的名称,字典的value对应的是变量的值
2.2 命名空间分类
局部空间
每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数的参数和局部定义的变量
全局空间
每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其它导入的模块
内置命名空间
任何模块均可访问它,它存放着内置的函数和异常
2.3 命名空间的访问
locals() 访问局部名称空间空间
globals() 访问全局命名空间
def test()