“Python 专项查缺补漏"
[toc]
闭包(Closure)
在内部函数中,对外部作用域变量引用,则内部函数被认为是闭包。(函数可以作为函数的返回值返回)
def print_msg():
msg = "Hello,world!"
def inner_print():
print(msg)
return inner_print
message = print_msg()
# 输出“Hello,world!”
message()
- 闭包无法修改外部函数的局部变量
def out_value():
x = 0
def inner_value():
x = 1
print('inner x: ',x)
print('out_value x before call func:',x)
inner_value()
print('out_value x after call func:',x)
out_value()
# 输出:
# out_value x before call func: 0
# inner x: 1
# out_value x after call func: 0
- 循环中不包含域的概念
l = []
for i in range(3):
def func(x):
return x*i
l.append(func)
for f in l:
print(f(2),end=' ')
# 输出
# 4 4 4
想要实现输出0,2,4只需要修改func
为闭包即可
l = []
for i in range(3):
def out_func(i):
def func(x):
return x*i
return func
l.append(out_func(i))
for f in l:
print(f(2),end=' ')
# 输出
# 0 2 4
- 应用
用于保存当前运行环境
复数
1、虚数不能单独存在,它们总是和一个值为 0.0 的实数部分一起构成一个复数
2、复数由实数部分和虚数部分构成
3、表示虚数的语法:**real+imagej**
4、实数部分和虚数部分都是**浮点数**
5、虚数部分必须有后缀**j或J**
装饰器
装饰器的作用是为已存在的函数添加额外的功能
Tuple
- 大小比较
(2,3)<(3,-1)
# True
Tuple是从第一个开始比较,相同则比较下一位,且数量多的大
- Tuple的值不可以改变
- 若只有一个值,则需要在值后加上一个逗号,以避免被认为成整型:
(1,)
无穷大
float('inf')
命名
- object:公用方法
- _object:半保护,只有类对象和子类对象能访问这些变量,在模块或类外不可以使用,不能使用
from module import *
导入 - __object:全私有、全保护,只有类对象自己访问,子类对象也不能访问到这个数据,不能用
from module import
导入,会导致Python解释器重写属性名称,以避免子类中命名冲突,叫做名称修饰_ _ classname _ _object
- __ object __:内建方法,比如关键字,用户不可这样定义
方法参数 *self.args、**kwargs
*self.args
表示接受元组类参数
**kwargs
表示接受字典参数
Class
作用域与命名空间
def scope_test():
def do_local():
spam = "local spam"
def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"
def do_global():
global spam
spam = "global spam"
spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)
scope_test()
print("In global scope:", spam)
# Out:
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
-
global
:所有引用和赋值将直接指向包含该模块的全局名称的中间作用域 -
nonlocal
:表明特定变量生存于外层作用域中并且应当在其中被重新绑定
ASCII 与字符转换
chr():
ASCII转字符
ord():
字符转ASCII
print(ord('A')) // 65
print(chr(65)) // 'A'