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

函数对象

函数使用方法

之前说函数类似于变量,那么有些变量的使用方法在函数上也是适用的

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 f1():
    return f2

print(f1())
f = f1()    #因为调用f1函数返回值为f2,所以f = f1() = f2
f()       #f2()
<function f2 at 0x0000025DC8949378>
from f2

3. 当作函数的参数

def f1():
    print ('from f1')
def f2(m):
    return m

f = f2(f1)      #以f1作为m进入函数f2,所以return  f1,所以f = f1
f()
from f1

4. 作为容器元素的元素

def f1():
    print('from f1')

l = ['str',1,f1]
l[2]()
from f1

函数的嵌套

函数的嵌套可以对比循环的嵌套来看,循环的嵌套是在一个循环之内还有循环,函数的嵌套就是一个函数内还有一个函数

def f1():
    def f2():
        代码块
    f2()
f1()

名称空间和作用域

名称空间:存放名字的空间

1. 内置名称空间

内置名称空间就是在python启动的时候,就会定义出一些函数比如len(),存放在一块内存空间里,这个内存空间就叫做内置名称空间

生命周期:python启动时产生,python关闭时结束

2. 全局名称空间

除了内置名称空间和局部名称空间,就是全局名称空间

生命周期:程序/文件运行的时候产生,运行完毕就结束

3. 局部名称空间

函数内部就叫做局部,所以局部名称空间就是函数内部定义的名称存放的空间

生命周期:函数运行的时候开始,这个函数结束就结束

执行顺序

内置名称空间--->全局名称空间--->局部名称空间

查找顺序

从当前名称空间开始查找,如果查找不到就逐步往上查找

作用域

全局作用域

适用于全局+内置,即全局可以修改内置,内置可以修改全局

局部作用域

只能适用于局部范围(函数内部),在局部定义的名字只能在局部获取

作用域关系在函数定义阶段就已经确定了

函数与函数之间可能会有相同名字的变量,但这两个变量之间毫无关系,他们的作用域不同

补充

#global:从局部修改全局
x = 100
def f1():
    global x
    x = 1
f1()
print(x)
1
#nonlocal:把局部改成外部
def f1():
    x = 1
    def f2():
        nonlocal x
        x = 3
    f2()
    print(x)
print(f'xxx:{x}')
f1()
xxx:1
3

原文地址:https://www.cnblogs.com/acate/p/10951482.html

时间: 2024-10-07 05:38:02

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

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

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

命名关键字参数,函数对象,嵌套,名称空间与作用域,闭包

一.命名关键字参数 对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数  .至于到底传入了哪些,就需要在函数内部通过kw检查. 仍以person()函数为例,我们希望检查是否有city和job参数: def person(name, age, **kw): if 'city' in kw: # 有city参数 pass if 'job' in kw: # 有job参数 pass print('name:', name, 'age:', age, 'other:', kw) 但是调用者仍

可变长参数、函数对象、嵌套、名称空间和作用域

目录 可变长参数.函数对象.嵌套.名称空间和作用域 一.可变长参数 1.1 可变长形参之* 1.2 可变长实参之* 1.3 可变长形参之** 1.4 可变长实参之** 二.函数对象 2.1.引用 2.2.当做实参参数传给一个形参参数 2.3.可以作为容器类数据类型中的元素 2.4 可以当做函数的返回值 三.函数的嵌套 3.1 函数的嵌套定义 3.2 函数的嵌套调用 四.名称空间和作用域 4.1 名称空间 4.1.1 内置名称空间 4.1.2 全局名称空间 4.1.3 局部名称空间 4.1.4 三

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

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

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

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

学习10.内容# 1.函数的动态参数 # 2.函数的注释 # 3.名称空间 # 4.函数的嵌套

1.函数的动态参数 def func(a, b=1): print(a, b) func(1) *args def func(a, b, *args): # *args 是万能(接受任意多个)的未知参数 *在函数定义的时候叫做聚合 print(a, b, args) func(1, 2, 3, 4, 5, 6) def func(a, b, *args): # *args 是万能(接受任意多个)的未知参数 *在函数定义的时候叫做聚合 print(a, b, *args) func(1, 2, 3

函数参数补充、名称空间与作用域、global与nonlocal

函数参数补充 # 1. 命名关键字参数(了解)# 命名关键字参数:在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数# 特点:# 1.命名关键字实参必须按照key=value的形式为其传值# def func(x,y,*,a,b): # 其中,a和b称之为命名关键字参数# print(x,y)# print(a,b)## # func(1,2,b=222,a=111) # 示例# def func(x,y,*,a=11111,b):# print(x,y)# print(a,b)##

函数名传递与名称空间

1.关键字参数(了解即可)# 命名关键字参数:在函数定义阶段 写在*与**可变长参数之间的形参# 在给命名关键字参数传值的时候 只能用关键字为其传值# 在定义阶段 给你感觉好像是z是默认值参数 放在了m这个位置参数的前面了 应该报错# 其实z和m都是命名关键字参数 不是默认值参数和位置参数def func(x, y=1, *args, z=3, m, **kwargs): print(x, y) print(args) print(z, m) print(kwargs) func(1, 2, 1