命名空间

  • 全局命名空间,记录整个文件的变量,函数体等

  • func()函数调用的时候,会开辟一个局部命名空间,存放函数里的变量,函数运行结束,就收回

  • 内置命名空间:python源码提供的内置函数,input(),print()

  • 空间加载到内存的先后顺序:内置,全局,局部

  • 取值顺序,就近原则LEGB:局部,全局,内置(单项不可逆)

作用域

  • 全局作用域:包括内置名称空间,全局名称空间
  • 局部作用域:局部名称空间(可以从全局作用域获取变量,是引用,但是不能改变)
date = 'Monday'
def func():
    print(date)
func()
date = 'Monday'
def func():
    date='sss' #这里只是在局部作用域 又创建了一个date变量,区别于全局的date
    print(date)
func()
count = 1
def func():
    count+=1 #解释器认为你在局部已经定义了一个count ,结果没找到,就报错
    print(count) #return  UnboundLocalError: local variable 'count' referenced before assignment
func()

高阶函数

def func():
    count = 1
    def inner(): #函数func()里面定义一个inner()函数
        print(count)
    inner()
func()

内置函数

  • globals() locals()
a=1
b=2
def func():
    name = 'Tom'
    age = 25
print(globals())  #全局作用域,调
print(locals())

参数补充

def func(name,list1=[]): #默认参数是可变数据类型,那么调用多少次的函数,这个默认参数都是同一个
    list1.append(name)
    return list1
r1 = func('tom')
print(r1)  #return ['tom']
r2 = func('Jerry')
print(r2) #return  ['tom', 'Jerry']
def func(a,list=[]):
    list.append(a)
    return list
print(func(10))  #return [10] list用默认的
print(func(20,[]))  #return [20]  list用新的
print(func(100))  #return [10, 100]  list继续用默认的
  • 把print位置变化一下
def func(a,list=[]):
    list.append(a)
    return list
r1 = func(10)
r2 = func(20,[])
r3 = func(100)
print(r1)  #return [10, 100],这里只不过是最后才打印的
print(r2)  #return [20]
print(r3)  #return [10, 100]
count= 1
def func():
    print(count) #这里先引用,下面才定义count
    count = 3
func() #return UnboundLocalError: local variable 'count' referenced before assignment

global

  • 在局部作用域生命一个全局变量
name = 'tom'
def func():
    name = 'jerry'
    print(name)  #return jerry
func()
print(name) #return tom
name = 'tom'
def func():
    global name #global在局部声明一个全局变量
    name = 'jerry'
    print(name)  #return jerry
func()
print(name) #return jerry
#nonlocal
#不能操作全局变量
count = 1
def func():
    nonlocal  count
    count+=1
func() #return  SyntaxError: no binding for nonlocal 'count' found
#局部作用域,内层函数对外层函数的局部变量进行修改
def func1():
    count=1
    def func2():
        nonlocal count
        count+=1
    print(count)  #return 1
    func2()
    print(count)  #return 2
func1()

函数名的应用

  • 函数名加()可以执行次函数
  • 函数名是个变量
def func():
    print(11)
print(func,type(func)) #return <function func at 0x03638778> <class 'function'>
def func():
    print(1)
f1=func
f2=f1
f2() #return 1
def func1():
    print(1)
def func2():
    print(2)
func2=func1
func2() #return 1
  • 函数名可以作为容器类数据类型的元素
def func1():
    print(1)
def func2():
    print(2)
def func3():
    print(3)
l1=[func1,func2,func3]
for i in l1:
    i() #return  返回1,2,3
  • 函数名可以作为函数的参数
def func():
    print(1)
def func1(x):
    x()
func1(func) #return 1
  • 函数名可以作为函数的返回值
def func():
    print(1)
def func1(x):
    return x
result = func1(func) 
result() #return 1

补充

#新特性 格式化输出
name = 'tom'
msg = f'hello {name}'
print(msg)

#可以加表达式
dic = {'name':'jerry','age':25}
msg = f'my name is {dic["name"]}'
print(msg)

#
count = 7
print(f'最终结果是{count**2}') #return 49

#
def sum(a,b):
    return a+b
print(f'最终结果是 {sum(10,20)}') #return 30

迭代器

  • 内部含有__iter__方法的对象,是可迭代对象。
  • str list tuple dict set range 句柄 都是可迭代对象
  • 获取一个对象的所有方法,并且以字符串的形式表现
posted on 2020-07-07 19:58  94小渣渣  阅读(76)  评论(0编辑  收藏  举报