上节课复习

位置实参,按照从左到右的顺序与形参一一对应

Regiser(‘egon’,18,’male’)

 

关键字参数:按照key=value形式指名道姓地为形参传值,可以完全不按照顺序

1,  关键字实参必须在位置参数后面

2,  可以混用实参,但是不能为同一个形参传值

Register(‘egon3’,sex=’female’,age=18)

 

默认参数

形参有默认值

Def register(name,age,sex=’male’);
Pass
Register(‘egon’,18)

可变长参数

形参:*args,**kwargs

实参:

foo('a',*[1,2,3])#foo('a',1,2,3)
  foo(x='bbb',*[1,2,3],)
  foo(**{'x':1,'y':2})


新知识

函数的嵌套定义:在函数内又定义其他函数

def func1():
     print('from func1')
     def func2():
         print('form func2')
         print(func2)
     func2()
 func1()

 

重要重要重要

名称空间和作用域

1,  名称空间:存放名字与值绑定的地方

2,  名称空间分为三大类:

(1),内置名称空间:python解释器自带名字。在解释器启动时生效。解释器关闭失效

(2),全局名称的空间:文件级别的名字,x=1,在文件启动时生效时生效,在文件执行期间被删除或者文件结束

(3),局部名称:内部定义的,调用时才产生。存放函数内的名字,在函数调用时生效函数结束时失效,函数的参数以及函数内的名字,都存放与局部名称空间

 

加载顺序:内置名称空间——全局名称——局部名称空间

查找名字:局部——全局——内置

 

 

# len='global'
# def f1():
#     # len=1
#     def f2():
#         # len=2
#         print(len)
#     f2()
#
# f1()



   

  三,作用域

全局作用域:包含的是内置名称空间与全局名称空间的名字

特点:在任何位置都能够访问的到,访问范围内的名字会伴随程序整个生命同期

局部作用域:包含的是局部名称空间的名字

特点:

1,  只能在函数内使用

2,  调用函数时生效,调用结束失效

3,  #可以被引用x=1

y=x

def bar():
     print('from bar')
 f=bar
 f()

#2,可以当参数传入x=1
def func(a):
     print(a)
 func(x)

def bar():
     print('form bar')
def wrapper(func):
     func()
 wrapper(bar)

# 3,可以当函数中的返回值x=1
def foo():
     return x
 res=foo()
 print(res)

def bar():
     print('form bar')
def foo(func):
     return func
 print(bar)
 f=foo(bar)
 print(f)
 f()

#4,可以当容器类型的元素x=1
 l=[x,]
 print(1)

def get():
     print('from get')
def put():
     print('from put')
 l=[get,put]
 l[0]()

def func():
     print('from func')
     #func可以被引用
     #f=func
     #2 func可以当参数传给x
     def bar(x):
         print(x)
         x()
     bar(func)
     #3,func还可以当作返回值
     def bar(x):#x=func
         return x
     res=bar(func)
     print(res)
#4 可以当容器类型的元素def auth():
     print('登陆。。。')
def reigster():
     print('注册。。。。')
def sarch():
     print('查看。。。')
def transfer():
     print('转账。。。。')
def pay():
     print('支付。。。')

 dic={
     '1':auth,
     '2':reigster,
     '3':sarch,
     '4':transfer,
     '5':pay,
 }
def interactive():
     while True:
         print('''


        1,
登陆
        2,注册
        3,查看
        4,转账
        5,支付

''')
         choice=input('>>: ').strip()
         if choice in dic:
             dic[choice]()
         else:
             print('非法操作')
 interactive()

 

重重重

   闭包函数

闭:☞的是定义在函数内部的函数

作用域关系 在函数定义阶段就规定死了,与调用位置无关

def outter():
     x=2
     def inner():
         print('form inne',x)
         
     return inner
 f=outter()
 print(f)
 x=111111111
 f()

def foo():
     x=11111111111
     f()
 foo()

闭包函数

1,  定义在函数内部的函数

2,  并且该函数包含对外部函数作用域中的名字的引用,该函数就称为闭包函数

def outter():
     name='egon'
     def inner():
         print('my name is %s' %name)
     return inner
 f=outter()

了解

为函数体传值的方式

方式1:将值以参数的形式的传入
import  requests

def get(url):
     response=requests.get(url)
     if requests.status_code==200:
         print(requests.text)

 get('https'://www.baiducom)

#方式2:import requests
import  time

def outter(url):
     def get():
         response=requests.get(url)
         if response.status_code==200:
             print(response.text)
     return  get
 baidu=outter('https://www.baidu.com')
 python=outter('https://www.python.org')
 baidu()

def outter(x):
     def foo():
         print(x)
     return  foo
 f_10=outter(10)
 f_10()

 f_100=outter(100)
 f_100()