函数的对象

python中一切皆对象

函数对象的四大功能

引用

def f1():
print('from f1') f1() #调用函数
print(f1)
print('*'*50)
f = f1 # 将函数名f1赋值给f
f() # f也可以调用函数
print(f) from f1
<function f1 at 0x000001FB05534620>
**************************************************
from f1
<function f1 at 0x000001FB05534620>

函数名相当于一个变量名,既能接收函数体返回的值,也能赋值。

当做参数传给一个函数

def f1():
print('from f1') def f2(a):
return a
f3 =f2(f1)
f3()
print(f3) from f1
<function f1 at 0x00000275FA914620>

可以当做函数的返回值

def f1():
print('from f1') def f2():
return f1 f3 =f2()
f3() print(f3) from f1
<function f1 at 0x0000014931304620>

可以当做容器类型的元素

def f1():
print('from f1') l = [1,2,3,f1]
l[3]() from f1

函数的嵌套

函数的嵌套定义

函数内部定义的函数,无法在函数外部使用内部定义的函数。

函数的嵌套调用

from math import pi
def circle(r,action):
if action == 'p':
def perimeter():
return 2 * pi * r
res = perimeter()
elif action == 'a': def area():
return pi * r**2
res = area()
else:
return ' '
return res
result = circle(2,'p')
print(result) 12.566370614359172

名称空间与作用域

名称空间

内存存储变量名与变量间的绑定关系的空间(存放变量名的空间),这个空间被称为名称空间。

内置名称空间

内置名称空间:存放python解释器自带的名字,如:int、float、len等

len()
int()

生命周期:在解释器启动时生效,在解释器关闭时失效。

全局名称空间

全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间,如:x、func、l、z

生命周期:在文件执行时生效,在文件执行结束后失效。

局部名称空间

局部名称空间:用于存放函数调用期间函数体产生的名字。

def f1():
x = 1
def f2(): # f2就是局部名称空间
pass
f2()

生命周期:在文件执行函数调用期间时生效,在函数执行结束后失效。

加载顺序 (考试必考)

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

查找顺序 (考试必考)

从当前名称空间开始查找,然后逐步往上,如果当前为局部,则顺序为局部—>全局—>内置

作用域

作用域:作用的区域

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

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

全局作用域

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


局部作用域

只适用于局部范围,在局部定义的名字只能在局部获取

x =100
def f1():
x =1
print(x) # 定义阶段
f1() 1

global 局部修改全局 (了解,面试常用)

x =100
def f1():
global x
x =1
# print(x) f1()
print(x) 1

nonlocal 把局部改成外部

xxxxxxxxxx9 1	def f1():2    x =13    def f2():4        nonlocal x 5        x =36    f2()7    print(x)8f1()93pythono

python-函数的对象、函数嵌套、名称空间和作用域的更多相关文章

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

    今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): y=func() print(y) def foo( ...

  2. Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...

  3. 【0809 | Day 12】可变长参数/函数的对象/函数的嵌套/名称空间与作用域

    可变长参数 一.形参 位置形参 默认形参 二.实参 位置实参 关键字实参 三.可变长参数之* def func(name,pwd,*args): print('name:',name,'pwd:',p ...

  4. day12 函数对象,名称空间与作用域

    """ 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...

  5. day11-函数对象、名称空间和作用域

    目录 函数对象 函数的嵌套 名称空间和作用域 内置名称空间 全局名称空间 局部名称空间 作用域 全局作用域 局部作用域 global和nonlocal 函数对象 在Python中,一切皆对象,函数也是 ...

  6. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  7. Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数

    本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...

  8. python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义

    复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...

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

    一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if de ...

  10. python基础知识13---函数对象、函数嵌套、名称空间与作用域、装饰器

    阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 1 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 ...

随机推荐

  1. Linux systemd 常用命令

    系统管理 systemctl 显示系统状态: $ systemctl status 立即激活单元: # systemctl start [单元] 立即停止单元: # systemctl stop [单 ...

  2. (转)命令passwd报错因inode节点处理记录

    命令passwd报错因inode节点处理记录 原文:http://blog.sina.com.cn/s/blog_506ed9e6010106kj.html 故障现象:      1.修改密码时报错 ...

  3. 传纸条(scrip)

    传纸条(scrip) 题目背景 Awson是某国际学校信竞组的一只菜鸡.每次竞赛考试都只能垫底.终于有一天,他决定不再苟活,发挥他的人脉优势,准备在一次竞赛考试时传纸条作弊. 题目描述 他预先知道了考 ...

  4. Java中的switch语句——通过示例学习Java编程(8)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=19 当我们在代码逻辑中有多个选项,而且需要为每个选 ...

  5. sql 2008 中不能创建数据库关系图

    执行以下命令: ALTER AUTHORIZATION ON DATABASE::[databasename] TO sa [databasename] 为数据库名: 此方法借鉴于<老高> ...

  6. Java基础语法(方法)

    Java基础语法 今日内容介绍 u 方法 第1章 方法 1.1 方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情( ...

  7. <Android HAL 之路> HAL 简介

    HAL层概述 名称: HAL, Hardware Abstracting Layer,中文名字:硬件抽象层. 作用:对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节.向上衔接Andro ...

  8. javaSe-常用的类之Calender

    Calendar是java中常用的类,比data类使用更加方便,更能更加强大,好吧多的不用你说了,直接上代码 import java.util.Calendar;//需要引进的包 public cla ...

  9. HDU 1850 Being a Good Boy in Spring Festival 在春节做乖孩子(Nim博弈,微变形)

    题意: 思路: 如果全部扑克牌数目异或的结果ans为0,则必输,输出0.否则,必须要给对方一个P状态,可以对所有扑克堆进行逐个排查,将ans^a[i]就可以得到除了a[i]之外其他扑克数的异或结果tm ...

  10. HTTP 错误 404.15 - Not Found请求筛选模块被配置为拒绝包含的查询字符串过长的请求

    web项目中,get方式传值是通过地址栏中的url参数进行传递的.除了浏览器对url长度的限制大小不一之外,出于安全考虑, IIS中对于URL中参数大小也是有限制的,默认为2048KB. 如果参数大于 ...