函数嵌套,名称空间,作用域,函数对象,闭包函数

函数嵌套

嵌套调用是在函数内又调用其他函数

def max(x,y):
    return x if x > y else y

def max4(a,b,c,d):
    res1=max(a,b)
    res2=max(res1,c)
    res3=max(res2,d)
    return res3
print(max4(1,2,3,4))

嵌套定义是在函数内又定义其他函数

# def f1():
#     print(‘f1‘)
#     def f2():
#         print(‘f2‘)
#         def f3():
#             print(‘f3‘)
#         f3()
#     f2()
# f1()

名称空间

名称空间分为三类:

1、内置名称空间

python解释器自带的名字,解释器启动的时候生效,关闭的的时候失效。

2、全局名称空间

文件级别的名字,在执行文件时生效,在文件结束或者文件执行期间被删除则失效

# x=1
# def func():
#     name=‘egon‘
#
# del func
#
# print(‘===‘)
# print(‘===‘)
# print(‘===‘)
# print(‘===‘)
# print(‘===‘)

3、局部名称空间

存放函数内定义的名字(函数的参数以及函数内的名字都存放于局部名称空间)

在函数调用时临时生效,函数结束时则失效

# def func(x):
#     y=2
#
# func(1)

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

查找顺序:局部名称空间>全局名称空间>内置名称空间

# len=‘global‘         # 第三查找目标
# def f1():
#     # len=1          # 第二查找目标
#     def f2():
#         # len=2      # 第一查找目标
#         print(len)
#     f2()
#
# f1()

作用域

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

特点:

1、在任何位置都可以访问的到

2、该范围会伴随这个生命周期

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

特点:

1、只能在函数内使用

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

函数对象

因为函数是第一类的对象,函数我们可以像变量一样引用,当做数据传递

1、可以被引用

# x=1
# y=x

# def bar():
#     print(‘from bar‘)
#
# f=bar
# f()

2、可以当做参数传入

# def bar():#     print(‘from bar‘)## def wrapper(func): #func=bar#     func() #bar()## wrapper(bar)

3、可以当做函数当中的返回值

# def bar():#     print(‘from bar‘)# def foo(func): #func=<function bar at 0x00000225AF631E18>#     return func #return <function bar at 0x00000225AF631E18># f=foo(bar)  #f=<function bar at 0x00000225AF631E18># # print(f)# f()

4、可以当做容器类型的元素

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

def auth():
    print(‘登陆。。。。。‘)

def reigster():
    print(‘注册。。。。。‘)

def search():
    print(‘查看。。。。‘)

def transfer():
    print(‘转账。。。。‘)

def pay():
    print(‘支付。。。。‘)

dic={
    ‘1‘:auth,
    ‘2‘:reigster,
    ‘3‘:search,
    ‘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():
#     name=‘egon‘
#     def inner():
#         print(‘my name is %s‘ %name)
#     return inner
# f=outter()

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

# def outter():
#     x=2
#     def inner():
#           x=1                          #  f在定义时固定死了
#         print(‘from inner‘,x)
#     return inner
# f=outter
# def foo():
#       x=1111                         #  在此处调用也不会改变x的值
#       f()
# foo()

 1 db_path=‘db.txt‘
 2 def get_uname():
 3     while True:
 4         uname=input(‘用户名>>:‘).strip()
 5         if not uname.isalpha():
 6             print(‘\033[45m用户名必须为英文字母...\033[0m‘)
 7             continue
 8         with open(r‘%s‘ %db_path,‘r‘,encoding=‘utf-8‘) as f:
 9             for line in f:
10                 uinfo=line.strip(‘\n‘).split(‘,‘)
11                 if uname == uinfo[0]:
12                     print(‘\033[45m用户名已存在...\033[0m‘)
13                     break
14             else:
15                 return uname
16 def get_pwd():
17     while True:
18         pwd1=input(‘请输入密码>>: ‘).strip()
19         pwd2=input(‘再次输入密码>>: ‘).strip()
20         if pwd1 == pwd2:
21             return pwd1
22         else:
23             print(‘\033[45m两次输入的密码不一致,请重新输入...\033[0m‘)
24 def get_bal():
25     while True:
26         bal=input(‘请输入余额: ‘).strip()
27         if bal.isdigit():
28             # bal=int(bal)
29             return bal
30         else:
31             print(‘\033[45m钱必须是数字,傻叉...\033[0m‘)
32 def file_hanle(uname,pwd,bal):
33     with open(r‘%s‘ %db_path,‘a‘,encoding=‘utf-8‘) as f:
34         f.write(‘%s,%s,%s\n‘ %(uname,pwd,bal))
35 def register():
36     uname=get_uname() #拿到合法的用户名
37     pwd=get_pwd() #拿到合法的密码
38     bal=get_bal() #拿到合法的余额
39     file_hanle(uname,pwd,bal) #写入文件
40 register()

注册功能

原文地址:https://www.cnblogs.com/Yang-Sen/p/8665520.html

时间: 2024-11-07 07:44:45

函数嵌套,名称空间,作用域,函数对象,闭包函数的相关文章

函数对象.函数嵌套,名称空间作用域

函数对象 函数使用方法 之前说函数类似于变量,那么有些变量的使用方法在函数上也是适用的 python中一切皆对象,我们可以对它获取内存地址或者打印类型或者其他的操作 1. 引用,赋值 def self_max(x,y): if x > y: return x return y a = self_max #此时a就是函数self_max max_num = a(20,39) print(max_num) 39 2. 当作函数的返回值 def f2(): print('from f2') def f

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

python_day04 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式

本节课重要知识点内容如下: 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式 1.函数嵌套 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数 def bar(): print('from nbar')def foo(): print('from foo') bar()foo()def max2(x,y): if x > y: return x else: return ydef max4(a,

python基础之函数(动态参数,注释,名称空间,第一类对象及使用和函数嵌套)

函数的动态参数 1.函数的动态参数 位置参数,默认参数 动态参数的作用 *args ? 1.能够接受不固定长度参数 ? 2.位置参数过多时可以使用动态参数 动态参数的用法: def func(*c): #形参位置上的 * 是聚会 print(*c) #函数体中的 * 就是打散 #func(1,2,3,4,5,6,7,8,9,0) **def eat(a,b,*args): #位置参数,动态位置参数** print(a,b,args) #结果:面条 包子 ('饺子', '馅饼', '馒头') pr

python 函数的名称空间及作用域

一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周期为:在python解释器启动时创建,在解释器关闭时销毁 全局名称空间:除了内置的,函数内的都是在全局名称空间中 生命周期为:在执行文件时,创建全局名称空间,所有文件中的代码全部执行完毕后,销毁名称空间(即解释器关闭时) 局部名称空间:只要在函数内的名称空间就是局部的 生命周期为:调用函数时创建,函

函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用

一 函数的名称空间 内置空间:存放python解释器内置函数的空间 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 局部空间:函数定义时,会记录下函数名与函数体的对应关系(什么都没有,只要内存地址,只有执行时才会在内存中临时开辟一个临时空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失) 加载顺序:内置空间 > 全局空间 > 局部空间 取值顺序:局部空间 > 全局空间 > 内置空间 作用域 全

函数对象,函数的嵌套,名称空间与作用域,闭包,装饰器,迭代器,内置函数

一,函数对象 函数对象:函数是第一类对象,即函数可以当做数据传递 1,可以被引用 2,可以做参数的传递 3,返回值可以是函数 4,可以当作容器类型的元素 二,函数嵌套 1,函数的嵌套调用 2,函数的嵌套定义 三,名称空间与作用域 名称空间:存放名字的地方叫名称空间,存放这些值与名字的绑定关系 查看内置名称的两种方法: 三种名称空间 1,内置名称空间:随着python解释器的启动而产生 2,全局名称空间:文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入该空间 3,局部名称空间:调用函

11.11函数对象,名称空间,作用域,命名关键字参数

函数对象 函数是一个对象 函数名可以被引用 函数名可以当做一个参数进行传参 函数名也可以当成返回值,但是不能加括号,不然会直接调用函数 函数名可以当做容器类的元素 函数的嵌套 就是函数内部定义或调用函数 例 def x(): print('x') def y(): print('y') y() x() 名称空间 内置名称空间 python解释器自带的名称空间,开机就有了 全局名称空间 打开python解释器后就形成的名称空间, 局部名称空间 函数内部的名称空间 查找顺序 先从局部查找,在查找全局

python学习笔记第五节(函数,名称空间,作用域)

python2中 默认存为unicode需要再字符串前加u 循环打印每一行 循环打印整个文件内容方式二下面这种同一时间取一行 先定义后执行 函数定义的时候,只检测语法错误,不执行 函数返回值,默认是元组模式return 只能返回一次 形参与实参 形参就是变量名实参就是值 打破顺序限制 经常变化的值用位置形参,值通常不变的用默认参数.默认参数通常定义成不可变类型.默认参数只在定义时被赋值一次. 可变长参数就是* 关键字参数(关键字参数指的是实参当中指定y=2,z=3等等) *等同于位置参数 函数内

函数的名称空间与作用域

1.名称空间namespaces 存放名字与值绑定关系的地方 2.名称空间分为三大类 内置名称空间: 作用:存放python解释器自带的名字 生命周期: 在解释器启动时生效,在解释器关闭时失效 全局名称空间: 作用:除了内置的与局部的名字外,其余都是全局名字 生命周期: 在文件执行时生效,在文件执行完毕时失效 例如:x,func,y,l,z都是 x=1 def func(): a=1 y=2 l=[1,2] if 3 > 2: if if if z=3 局部名称空间: 作用:用于存放函数调用期间