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 可以当作参数传递 ...
随机推荐
- CodeForces - 581B-Luxurious Houses
The capital of Berland has n multifloor buildings. The architect who built up the capital was very c ...
- Python大战机器学习——基础知识+前两章内容
一 矩阵求导 复杂矩阵问题求导方法:可以从小到大,从scalar到vector再到matrix. x is a column vector, A is a matrix d(A∗x)/dx=A d( ...
- input密码自动填充
自动填充样式修改 input: -webkit - autofill, input: -webkit - autofill: hover, input: -webkit - autofill: foc ...
- NET高性能IO
System.IO.Pipelines: .NET高性能IO https://www.cnblogs.com/xxfy1/p/9290235.html System.IO.Pipelines是一个新的 ...
- NET Core 2.0 的 REST API
用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目 上一部分预备知识在这 http://www.cnblogs.com/cgzl/p/9010978 ...
- 四则运算二(java web)
最近我和我的小伙伴yaoyali结成对子,共同写网页版的四则运算.虽然现在还没弄好,但是比起上次用纯java写的四则运算有了很大改进. 一.存放四则运算题目和答案的类 package com.jaov ...
- Ubuntu上源码安装golang并设置开发环境
安装go #wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz #tar -xzf go1.10.3.linux-amd64.tar.g ...
- PHP&Java 调用C#的WCF
步骤一:用C#声明WCF [ServiceContract] public interface IService1 { [OperationContract] void DoWork(); [Oper ...
- 【转载】Ubuntu16.04安装最新版nodejs
安装最新版nodejs 更新ubuntu软件源 sudo apt-get update sudo apt-get install -y python-software-properties softw ...
- 树莓派连接启动SSH
树莓派的官方更新消息发布:http://downloads.raspberrypi.org/raspbian/release_notes.txt SSH禁用的启用方法: 2016年11月25日: * ...