Python-函数基础(2)
可变长参数
形参
*形参
接收多余的位置实参,以元组形式保存
**形参
接收多余的关键字实参,以字典形式保存
实参
*实参
将元组类型打散,传给*形参
**实参
将字典类型打散,传给**形参
函数对象
-
可以作为引用
x = 'hello nick' y = x f = func print(f)
-
作为容器元素
l = [x] function_list = [func] function_list[0]()
-
作为函数参数
len(x) def foo(m): m() foo(func)
-
作为函数函数返回值
def foo(x): return x res = foo(func) print(res) res()
函数嵌套
打印九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print(f"{i}*{j}={i*j}",end="")
print()
名称空间与作用域
名称空间
内置名称空间
放置内置方法
生命周期:在解释器启动时生效,在解释器关闭时失效
局部名称空间
函数中定义的变量和函数
生命周期:在函数调用期间生效,执行结束失效
全局名称空间
除了内置和局部都放在全局名称空间
生命周期:在文件执行时生效,文件结束后失效
执行顺序
内置--》全局--》局部
搜索顺序
从当前位置 局部--》全局--》内置
作用域
全局作用域
全局有效,全局存活
局部作用域
临时存储,只包含局部名称空间
global
修改全局作用域中的变量。
x = 1
def f1():
x = 2
def f2():
global x # 修改全局
x = 3
f2()
f1()
print(x)
nonlocal
x = 1
def f1():
x = 2
def f2():
nonlocal x
x = 3
f2()
print(x)
f1()
注意点:
在局部想要修改全局的可变类型,不需要任何声明,可以直接修改。
在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量,即可直接修改。
lis = []
def f1():
lis.append(1)
print(f"调用函数前: {lis}")
f1()
print(f"调用函数后: {lis}")