11、函数对象、函数的嵌套、名称空间与作用域

一、函数对象

  函数对象,函数是第一类对象,即函数可以当做数据传递

  具体特点:

    1、可以被引用;  

1 def foo():
2     print(‘from foo‘)
3
4 func=foo
5
6 print(foo)
7 print(func)
8 func()

    2、可以当作参数传递

1 def foo():
2     print(‘from foo‘)
3
4 def bar(func):
5     print(func)
6     func()
7
8 bar(foo)

    3、返回值可以是函数

 1 def foo():
 2     print(‘from foo‘)
 3
 4 def bar(func):
 5     return func
 6
 7 f=bar(foo)
 8
 9 print(f)
10
11 f()

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

1 def foo():
2     print(‘from foo‘)
3 dic={‘func‘:foo}
4
5 print(dic[‘func‘])
6
7 dic[‘func‘]()

具体应用场景:

 1 def select(sql):
 2     print(‘========>select‘)
 3
 4 def insert(sql):
 5     print(‘========>add‘)
 6
 7 def delete(sql):
 8     print(‘=======>delete‘)
 9
10 def update(sql):
11     print(‘-=---->update‘)
12
13
14 func_dic={
15     ‘select‘:select,
16     ‘update‘:update,
17     ‘insert‘:insert,
18     ‘delete‘:delete
19 }
20
21 def main():
22     while True:
23         sql = input(‘>>: ‘).strip()
24         if not sql:continue
25         l = sql.split()
26         cmd=l[0]
27         if cmd in func_dic:
28             func_dic[cmd](l)
29
30 main()
31 # def main():
32 #     sql = input(‘>>: ‘)
33 #     l = sql.split()
34 #     print(l)
35 #     if l[0] == ‘select‘:
36 #         select(l)
37 #     elif l[0] == ‘insert‘:
38 #         insert(l)
39 #     elif l[0] == ‘delete‘:
40 #         delete(l)
41 #     elif l[0] == ‘update‘:
42 #         update(l)

二、函数的嵌套

  1、函数的嵌套调用

 1 def max2(x,y):
 2     return x if x > y else y
 3
 4
 5 def max4(a,b,c,d):
 6     res1=max2(a,b)
 7     res2=max2(res1,c)
 8     res3=max2(res2,d)
 9     return res3
10
11 print(max4(10,99,31,22))

  2、函数的嵌套定义

1 def f1():
2
3     def f2():
4         print(‘from f2‘)
5         def f3():
6             print(‘from f3‘)
7         f3()
8     f2()
9 f1()

三、名称空间与作用域

名称空间:存放名字的地方,三种名称空间

  1、定义名字的方法

1 import time
2
3 name=‘egon‘
4
5 def func():
6     pass
7
8 class Foo:
9     pass

  2、三种名称空间

  1)内置名称空间:随着python解释器的启动而产生
 1 print(sum)
 2 print(max)
 3 print(min)
 4
 5
 6 print(max([1,2,3]))
 7
 8 import builtins
 9 for i in dir(builtins):
10     print(i)

  2)全局名称空间:文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入改空间

 1 x=1
 2 if x ==1 :
 3     y=2
 4 import time
 5
 6 name=‘egon‘
 7
 8 def func():
 9     pass
10
11 class Foo:
12     pass
13
14 #====================
15
16 x=1
17
18
19 def func():
20     money=2000
21     x=2
22     print(‘func‘)
23 print(x)
24 print(func)
25 func()
26 print(money)
27
28 func()
29 print(x)
3)局部名称空间:调用函数时会产生局部名称空间,只在函数调用时临时绑定,调用结束解绑定
1 x=10000
2 def func():
3     x=1
4     def f1():
5         pass

ps:

作用域:    1. 全局作用域:内置名称空间,全局名层空间    2. 局部作用:局部名称空间

3、名字的查找顺序:局部名称空间---》全局名层空间---》内置名称空间

 1 x=1
 2 def func():
 3     # x=2
 4     # print(x)
 5     # sum=123123
 6     print(sum)
 7 func()
 8
 9
10
11 def func():
12     x=2
13
14 func()
15
16 print(x)
查看全局作用域内的名字:gloabls()查看局局作用域内的名字:locals()
1 x=1000
2 def func():
3     x=2
4
5 print(globals())
6
7 print(locals())
8 print(globals() is locals())
1 x=1000
2 def func(y):
3     x=2
4     print(locals())
5     print(globals())
6
7 func(1)
#全局作用域:全局有效,在任何位置都能被访问到,除非del删掉,否则会一直存活到文件执行完毕

#局部作用域的名字:局部有效,只能在局部范围调用,只在函数调用时才有效,调用结束就失效
 1 x=1
 2
 3 def f1():
 4     print(x)
 5
 6 def foo():
 7     print(x)
 8
 9 def f(x):
10     # x=4
11     def f2():
12         # x=3
13         def f3():
14             # x=2
15             print(x)
16
17         f3()
18     f2()
19
20 f(4)
时间: 2024-10-14 07:13:22

11、函数对象、函数的嵌套、名称空间与作用域的相关文章

python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): return x**2 y=func(10) print(y) def foo(): return None res=foo() print(res) def foo(): return{'a':1} res=foo() print(res['a']) def foo(): return {'a':1},1,'a',[1,2] res=foo() p

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

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数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,

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

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

python基础(3):函数对象、函数嵌套、名称空间与作用域、装饰器

函数对象 函数嵌套 名称空间与作用域 闭包函数 装饰器 练习 一 函数对象 #1 可以被引用 def max(x, y): return x if x > y else y func = max print(func(1, 2)) #2 可以当作参数传递 def max(x, y): return x if x > y else y def max_1(x, func): return func(x, 1) print(max_1(2, max)) #3 返回值可以是函数 #4 可以当作容器类

函数对象、函数嵌套、名称空间与作用域、装饰器

一 函数对象 1.函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 2.利用该特性,优雅的取代多分支的if def foo(): print('foo') def bar(): print('bar') dic={ 'foo':foo, 'bar':bar, } while True: choice=input('>>: ').strip() if choice in dic: dic[choice]()

python基础之====函数对象、函数嵌套、名称空间与作用域、装饰器

阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if def foo(): print('foo') def bar(): print('bar') dic={ 'foo':foo, 'bar':bar, } while True: choice=input(

Day19_名称空间和作用域_函数的嵌套_函数第一类对象的使用_闭包函数

一. 上节课复习 为何要使用函数 解决代码重用问题 统一维护 程序的组织结构清晰,可读性强 定义函数 !!!先定义后使用 def funcname(arg1,arg2,....) #funcname = 函数体 '''描述信息''' 函数体 return value 定义无参函数 定义有参函数 定义空函数 调用函数 语句形式:foo() 表达式形式:foo(1,2) 函数调用作为另外一个函数的参数:print(foo(1,2)) 函数返回值 不写return--->None return 一个值

python之旅:函数对象、函数嵌套、名称空间与作用域、装饰器

一.函数对象 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 # 利用该特性,优雅的取代多分支的if 二.函数嵌套 三.名称空间与作用域 四丶装饰器 原文地址:https://www.cnblogs.com/moyand/p/8667266.html