进阶函数的学习
1. 动态传参
*, ** :
形参: 聚合
位置参数* -> 元组
def func(*args, a, b, c): print(a, b , c, args) func(1,2,3,4,5,6,7, a=8, b=9,c=10)
关键字** -> 字典
def func(**kwargs): print(kwargs) func(a=1, b=2, c=3, haha="呵呵", good="not bad")
实参: 打散
列表, 字符串, 元素 -> *
字典 -> **
形参顺序:
位置, *args, 默认值, **kwargs
"无敌传参"
def func(*args, **kwargs): arguments参数 keyword-arguments关键字参数
pass
def hash(*args, **kwargs): pass def id(*args, **kwargs): pass def input(*args, **kwargs): pass
这几个函数都是这种"无敌传参"的模式
2. 作用域和名称空间
名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的
1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....
2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)
3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)
名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰
作用域:
1. 全局作用域: 内置+全局
2. 局部作用域: 局部
globals() 查看全局作用
locals() 查看当前作用域
def num(): a = 20 b = 30 print(locals()) # 查看当前作用域中的内容 print(globals()) # 查看全局作用域中的内容 num()
3. 函数的嵌套
在函数中声明函数
在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置
def func1(): print("1") def func2(): print("2") def func3(): print("3") print("4") func3() print(5) print("6") func2() print("7") func1() # 1 6 2 4 3 5 7
4. nonlocal和global关键字
global: 在局部引入全局变量
nonlocal: 在局部...内层函数引入外层离他最近的那个变量.
只举一个全局变量的例子
flag = false def login(): global flag # 全局变量的调用 uname = input("用户名:") upwd = input("密码:") if uname == "alex" and upwd == "123": flag = true else: flag = false
上一篇: Java 继承
下一篇: Python基础(字符串)第二天