三元运算符
def my_max(a,b): return a if a>b else b #当a>b成立返回a,否则返回b
参数:
实参 : 1.位置参数 2. 关键字参数 3. 混合参数
形参 : 1.位置参数 2. 默认值参数
动态传参:
1. 动态接收位置参数
def func(a, b, *arg): #动态接受参数是:动态参数必须在位置参数之后 pass
2.接收默认值参数
def fruit(a, b, c='apple', *food): pass
三种参数顺序 : 位置参数, 动态参数*, 默认值参数
3.动态接受关键词参数
def func(**kwargs): pass func(a=1, b=2, c=3) func(a=1, b=2)
最终顺序(*): 位置参数 > *args > 默认值参数 > **kwargs
命名空间(存储变量)
分类
1.全局命名空间 → 直接在py文件中,函数外声明的变量都属于全局命名空间
2.局部命名空间 → 在函数中声明的变量会放在局部命名空间
3.内置命名空间 → 存放python解释器为我们提供的名字,list,tuple,str,int这些都是内置命名空间
取值顺序:
1.局部命名空间
2.全局命名空间
3.内置命名空间
作用域(作用范围)
分类
1.全局作用域 : 全局命名空间 + 内置命名空间
2.局部作用域 : 局部命名空间
globals() # 打印全局作用域中的内容
locals() #打印局部作用域中的内容
global 和 nonlocal
global表示不再使用局部作用域的内容,而改用全局作用域中的变量
a = 100 def func(): global a #可以修改全局变量a,仅限当前函数使用 a = 28 print(a) func() print(a) # ===>>28 28
nonlocal表示在局部作用域中,调用父级命名空间的变量
函数名的运用
1.函数名的内存地址 print(func) ==> <function func at 0x1101e4ea0>
2.函数名可以赋值给其他变量
3.函数名可以当做容器类的元素
4.函数名可以当做函数的参数
5.函数名可以作为函数的返回值
闭包 内层函数,对外层函数(非全局)的变量的引用
def outer(): name = "Amy" # 内部函数 def inner(): print(name) return inner #外部函调用内部函数 fn = outer() # 访问外部函数, 获取到内部函数的函数地址 fn()
闭包好处: 在外界可以访问内部函数; 内部函数访问了外层函数的变量.这个变量将会常驻内存,供后面的程序使用
from urllib.request import urlopen def web_content(): content = urlopen('https://tieba.baidu.com/').read().decode("utf-8") def get_content(): return content #储存content的内容,方便后续使用 return get_content fn = web_content() content = fn() print(content)