python-函数的对象、函数嵌套、名称空间和作用域
函数的对象
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-函数的对象、函数嵌套、名称空间和作用域的更多相关文章
- python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象
今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): y=func() print(y) def foo( ...
- Python 函数对象-函数嵌套-名称空间与作用域-闭包函数
今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...
- 【0809 | Day 12】可变长参数/函数的对象/函数的嵌套/名称空间与作用域
可变长参数 一.形参 位置形参 默认形参 二.实参 位置实参 关键字实参 三.可变长参数之* def func(name,pwd,*args): print('name:',name,'pwd:',p ...
- day12 函数对象,名称空间与作用域
""" 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...
- day11-函数对象、名称空间和作用域
目录 函数对象 函数的嵌套 名称空间和作用域 内置名称空间 全局名称空间 局部名称空间 作用域 全局作用域 局部作用域 global和nonlocal 函数对象 在Python中,一切皆对象,函数也是 ...
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
- Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数
本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...
- python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义
复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...
- python之函数对象、函数嵌套、名称空间与作用域、装饰器
一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if de ...
- python基础知识13---函数对象、函数嵌套、名称空间与作用域、装饰器
阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 1 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 ...
随机推荐
- codeforces540E-树状数组求逆序对
1-1e9的数据范围 但有1e5个区间 所以可以考虑把没有涉及到的区间缩成一个点 然后树状数组求逆序对 #include<bits/stdc++.h> #define inf 0x3f3f ...
- 2019-CCPC广东省赛总结
2018年11月第一次参加ICPC区域赛青岛赛区,打铁了! 2019年5月第一次参加CCPC广东省赛,4题滚粗,C题莫队TLE13发,只拿了个铜牌! 教训总结: 比赛时千万不能犹豫,不能犹豫,不能犹豫 ...
- Java EE学习笔记(九)
MyBatis的关联映射 1.关联关系概述 1).实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系.针对多表之间的操作,MyBatis提供了关联映射,通 ...
- WebApi访问方式配置
之前公司使用webapi开发项目,只知道怎么用对于怎么配置一直不了解,最近这段时间没什么事然后自己建一个webapi项目,只知道怎么用对于怎么配置一直不了解,最近这段时间没什么事然后自己建一个weba ...
- CF1088D Ehab and another another xor problem
思路: 根据异或的性质一位一位来搞.参考了https://blog.lucien.ink/archives/362/ 实现: #include <bits/stdc++.h> using ...
- ios中frame设置宽高计算的Demo
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ int totalHeightOfScrollView = scrollView.con ...
- Caused by: java.lang.ClassNotFoundException: org.springframework.web.socket.server.standard.ServerEndpointExporter
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/web/socket/ ...
- [课堂总结]C++课堂总结(二)
近期的面向对象程序设计的不容易记忆或者理解的东西进行一个总结,以后忘记了可以常来看下,C++是个很重要的东西,很多领域都用得到,加油,特种兵! 浅拷贝构造.深拷贝构造 浅拷贝构造是系统默认的拷贝构造函 ...
- java 自定义一个容器类
public class ArrayList { public int index = 0; Object[] objects = new Object[2]; public void add(Obj ...
- spring5之SAXParseException:cvc-elt.1: 找不到元素 “beans” 的声明
之前SSM项目一直报错,就是找不到错误 气啊 后来在网上找到了答案:燕来spring5之后就不再需要写版本号了