#Python作用域:
• 定义:Python程序的一块文本区域,是变量或函数访问的时候查找名称的范围空间
• 分类:
局部作用域(函数内)local L;
外部嵌套函数作用域 Enclosing function locals E
函数定义所在模块(文本)的作用域 Global(Module)G
Python内置模块的作用域 built-in python B• 展示4个作用域
"""
展示4个作用域 __doc__
"""
v = 100 #全局作用域G
def fun1():
v = 200 #外部嵌套函数作用域E
print("fun1.v=",v)
def fun2():
v = 300 #局部作用域L
print("fun2.v=",v)
fun2()
fun1()
print("v=",v)
print(__doc__) #__doc__是内建作用域的变量,打印注释的内容。• 变量名的查找规则:
访问变量时,先本地,后嵌套函数,之后是全局,最后是内置
L-->E-->G-->B• 全局和局部作用域:
v = 100
def fn():
v = 200
print(v) #v=200
fn()
print(v) #v=100• 全局声明 global
v=100
def fn(v):
global v #error ,v出现在了参数列表里
print(v)
fn(200)• global 说明:
1,全局变量在函数内部被赋值时,则必须经过全局声明,否则被认为是局部变量
2,全局变量在函数内部不经过声明就可以直接读取访问(前提是变量已经存在)
3,不能先声明局部变量,再用global声明为全局变量,此做法不符合语法规则
4,global变量列表里的变量名不能出现在此作用域的参数列表里,for循环控制目标,类定义,函数定义及import导入名字中。• 函数嵌套
内部函数为类的成员方法• nonlocal语句
1,作用:告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量
2,语法:nonlocal var1,var2,....
var = 100
def outer():
var = 200
def inner():
nonlocal var
#global var
var+=1
print("inner.var=",var)
inner()
print("outer.var=",var)
outer()• globals()/locals()函数
globals(),返回当前全局作用域内的变量的字典
locals(), 返回当前局局作用域内的变量的字典#函数式编程思想
• 函数式编程的定义
• 有边界效应的函数:(不可重入的函数)
使用了全局变量,静态变量,或者处理的数据不全是来自函数的输入(比如来自硬件)的。• 纯函数式:(可重入的函数)
类似数学函数的映射,给定输入,就会得到指定输出,没有任何副作用的。• 函数式编程的好处:
*逻辑可证:逻辑上证明程序是正确的(而不是通过测试)
*模块化:一个函数做一个事,将大的功能拆分成尽可能小的模块。小的函数更易于阅读和检查错误。
*组件化:小的函数更容易加以组合形成新的功能。
*易于混淆:细化的、定义清晰的函数,使得调试更加简单。
*易于测试:不依赖于系统状态的函数无须在测试前构造测试桩,使得编写单元测试更加容易。
*更高的生产率#函数式编程的基础风格特征
• 函数是一等公民:函数能作为参数传递,或者是作为返回值返回。
• 函数变量:函数名是变量,他在创建函数时绑定一个函数对象。
def fn():
print("hello,world")
f1 = fn() #"hello,world" 被浅拷贝
f1() #等同于调用fn()• 高阶函数
什么是高阶函数:满足以下任意一条
1,函数接受一个或多个函数作为参数传入
2,函数返回一个函数
def getfn():
def print_hello():
print("hello")
return print_hello
fn = getfun()
fn()
def tab(x,y):
return "|"+x.center(13)+\
"|"+y.center(13)+"|"
def string(x,y):
return "name:"+x+"age:"+y
def myprint(fx,x,y):
s = fx(x,y)
print(s)
myprint(tab,"midu","15")
myprint(tab,"张三","18")• 偏函数:
函数有很多参数时,如果固定住某些参数,可以利用functools模块Partial得到一个偏函数,方便以后的使用。
>>>int("1234")
1234
>>>int("12345",base=8)
5349
>>>int("12345",16)
74565
>>> import functools
>>> int2 = functools.partial(int,base=2)
>>> int2("111")• 迭代器,后面讲
可以用for循环变量的可迭代对象• 生成器,同上
生成器(generator)是一种创建迭代器的方法• 封装控制结构内置模板函数
Python中内置(builtins)的高阶函数
map,filter,reduce,sorted• map函数:
map(func,*iterable) 用函数func和可迭代对象iterable中的每个元素作为参数计算出新的可迭代对象,当最短的一个可迭代对象完成迭代后,此迭代生成结束。• reduce函数:
reduce(function,iterable[,initializer])
对参数序列中元素进行累积。函数将一个数据集合(链表、元组等)中的所有数据进行下列操作:用传给reduce中的函数function(有两个参数)先对集合中的第1,2个元素进行操作,得到的结果再与第三个数据用function函数运算,最后得到一个结果。
>>>def add(x,y):
return x+y
>>>reduce(add,[1,2,3,4,5])
15• filter函数
filter(function or None,iterable)
作用:筛选iterable中的数据,返回一个可迭代对象,此迭代对象将对iterable进行筛选。
说明:function将对iterable中的每个元素进行求值,返回false则将此数据丢弃,返回True,则保留该数据。
实例:
def is_odd(n):
return n%2 == 1
newlist = filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
pirnt(newlist)• sorted 函数
作用:将原可迭代对象的数据进行排序,生成排序后的列表
格式:sorted(iterable,key = None,reverse=False)
说明:key函数用来提供一个值,这个值作为排序的依据。
实例:
L=[-5,2,-3,-1,6]
L2 = sorted(L,reverse=True) #[6,2,.....]
L3 = sorted(L,key=abs) #[1,2,3,5,6]• lambda表达式(匿名函数)
作用:创建一个匿名函数对象
同def类似,但不提供函数名
语法:
lambda[参数1,参数2,....]:表达式 注:[]内的部分可以省略
实例:
def myadd(x,y):
return x+y
可以改写为:
myadd = lambda x,y:x+y
print("20+30=",myadd(20,30))
python临界区 python中linprog
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
临界区
程必须互斥地对它进行
临界区 临界资源 #include