Python:函数的命名空间、作用域与闭合函数
1,参数陷阱
2,三元运算
3,命名空间与作用域
3.1命名空间的种类
依赖倒置原则:上层模块应该依赖下层模块,不能反向依赖
def input():
print('in input now')
def func():
input() func()
4,作用域有两种
全局作用域与局部作用域
a =1
def func():
global a
a+=1
func()
print(a)
# a = 1
# b = 2
# def func():
# x = 'aaa'
# y = 'bbb'
# print(locals())
# print(globals())
#
# func()
# print(globals())
# print(locals()) #本地的--->在函数体的外部使用locals,作用与globals是相同的
a =1
b =2
print(globals())
print(locals())
5,函数的嵌套调用
def max(a,b)
return a if a>b else b
def the_max(x,y,z):
c =max(x,y)
return max(c,z)
print(the_max(1,2,3))
在一个函数的函数体内调用另一个函数叫做函数的嵌套调用
6,函数的嵌套定义
内部函数可以使用外部函数的变量叫做函数的嵌套
def outer():
def inner():
print('inner')
def inner2():
a+=1 #不可变数据类型的修改
print(a,b)
print('inner2')
inner2()
inner()
outer()

def outer():
a =1
def inner():
b =2
print(a)
print('inner')
def inner2():
a+=1
print('inner2')
inner2()
inner()
print('**a**:',a)
outer()
a =1
def outer():
a=1
def inner():
b=2
print(a)
print('inner')
def inner2():
nonlocal a
a+=1
inner2()
inner()
print('**a**:',a)
outer()
print('全局:',a)
7,作用域链
a =0
def outer():
def inner():
def inner2():
print(a)
inner2()
inner()
outer()
def func():
print(123)
func2 =func
func2()
def func():
print(123)
func() #函数名就是内存地址
func2 = func #函数名可以赋值
func2()
l = [func,func2] #函数名可以作为容器类型的元素
print(l)
for i in l:
i()
def func():
print(123)
def wahaha(f)
f()
wahaha(func)
def func():
print(123)
def wahaha(f)
f()
return f
qqxing =wahaha(func)
qqxing()
8,闭包:嵌套函数,且内部函数要调用外部函数的变量
def outer():
a =1
def inner():#--->inner是一个闭包
print(a)
print(inner._closure_)
outer
def outer():
a =1
def inner():#--->inner是一个闭包
print(a)
return inner
outer
inn =outer()
inn()
def get_url():
urlopen('http://www.xiaohua100.cn/index.html').read()
def inner():
ret = urlopen(url)
print(ret)
return inner
get_func =get_url()
get_func()
Python:函数的命名空间、作用域与闭合函数的更多相关文章
- 九. Python基础(9)--命名空间, 作用域
九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...
- Python学习日记day10------函数的命名空间、作用域与闭合函数
1,参数陷阱 如果默认参数的只是一个可变数据类型,那么每一次调用的时候,如果不传值就共用这个数据类型的资源. 2,三元运算 c=a if a>b else b#如果a>b返回a,否则,返回 ...
- python函数对象-命名空间-作用域-02
函数对象 函数是第一对象: # 函数名指向的值可以被当做参数传递 函数对象的特性(*****灵活运用,后面讲装饰器会用到) 函数名可以像变量一样被传递 # 变量可以被传递 name = 'jason' ...
- day10 python学习 函数的嵌套命名空间作用域 三元运算 位置参数 默认参数 动态参数
1.三元运算 #1.三元运算 利用已下方法就可以实现一步运算返回a b中大的值 def my_max(a,b): c=0 a=int(input('请输入')) b=int(input('请输入')) ...
- python之路day10-命名空间和作用域、函数嵌套,作用域链、闭包
楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print ...
- Python之函数对象、函数嵌套、名称空间与作用域、闭包函数、装饰器
目录 一 函数对象 二 函数的嵌套 三 名称空间和作用域 四 闭合函数 五 装饰器 一.函数对象 1.函数是第一类对象 #第一类对象的特性:# 可以被引用 # 可以当做参数传递 # 返回值是函数 # ...
- python 函数的作用域,闭包函数的用法
一.三元表达式 if条件成功的值 if 条件 else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c ...
- 类1(this指针/const成员函数/类作用域/外部成员函数/返回this对象的函数)
假设我们要设计一个包含以下操作的 Sales_data 类: 1.一个 isbn 成员函数,用于返回对象的 book_no 成员变量 2.一个 combine 成员函数,用于将一个 Sales_dat ...
- python变量的命名空间
首先必须要提一下python程序执行过程中变量的查找规则 较官方的查找机制是: 局部作用域--外部函数作用域--全局作用域--内建函数作用域 其实一般内建函数中的作用域很少会涉及到,因为内建函数其实是 ...
随机推荐
- Python+Selenium定位元素的方法
Python+Selenium有以下八种定位元素的方法: 1. find_element_by_id() eg: find_element_by_id("kw") 2. find_ ...
- zabbix-proxy 层级制监控
一,zabbix服务规划 zabbix-server 10.0.0.71 zabbix-proxy 10.0.0.72 172.16.1.72 web01 172.16.1.7 二,zabbix 客 ...
- Flask中的的SQLAlchemy
好久没有更新Blog了 今天来聊一聊 Python 的 ORM 框架 SQLAlchemy 有的孩子已经听说过这个框架的大名了,也听说了 SQLAlchemy 没有 Django 的 Models 好 ...
- VIRTIO概述和基本原理
http://smilejay.com/2012/11/virtio-overview/ (KVM连载)5.1.1 VIRTIO概述和基本原理(KVM半虚拟化驱动) 11/15/2012MASTER ...
- css3之transition、transform、animation比较
css3动画多少都有些了解,但是对于transition.transform.animation这几个属性一直是比较模糊的,所以啊,这里做一个总结,也希望大家都可以对此有一个更好地理解. 其实, ...
- pat1003. Emergency (25)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- netstat参数
1.功能与说明 netstat 用于显示linux中各种网络相关信息.如网络链接.路由表.接口状态链接.多播成员等等. 定义:Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TC ...
- URAL —— 1255 & HDU 5100——Chessboard ——————【数学规律】
用 k × 1 的矩形覆盖 n × n 的正方形棋盘 用 k × 1 的小矩形覆盖一个 n × n 的正方形棋盘,往往不能实现完全覆盖(比如,有时候 n × n 甚至根本就不是 k 的整倍数). 解题 ...
- HDU 5222 ——Exploration——————【并查集+拓扑排序判有向环】
Exploration Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- python学习(五)--打印错误信息
from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...