[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'