请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

 找回密码
 立即注册
搜索
查看: 801|回复: 1

模块相关函数

[复制链接]

79

主题

79

帖子

292

积分

VIP会员

积分
292
发表于 2017-11-4 16:24:34 | 显示全部楼层 |阅读模式

1、__import__()
import 语句调用 __import__() 函数完成它的工作。提供这个函数是为了让有特殊需要的用户覆盖它, 实现
自定义的导入算法。
__import__() 的语法是:
__import__(module_name[, globals[, locals[, fromlist]]])
module_name 变量是要导入模块的名称, globals 是包含当前全局符号表的名字的字典,
locals 是包含局部符号表的名字的字典, fromlist 是一个使用 from-import 语句所导入符号的
列表。globals , locals , 以及 fromlist 参数都是可选的, 默认分别为 globals() , locals() 和[] 。
调用 import sys 语句可以使用下边的语句完成:
sys = __import__('sys')
2.globals() 和 locals()
globals() 和 locals() 内建函数分别返回调用者全局和局部名称空间的字典。 在一个函数内
部, 局部名称空间代表在函数执行时候定义的所有名字, locals() 函数返回的就是包含这些名字的字典。 globals() 会返回函数可访问的全局名字。

print "__main__'s globals:", globals().keys()
print "__main__'s locals:", locals().keys() foo()

要让模块中函数的局部命名空间,可以提升为全局命名空间,可使用global语句【注意是语句】
def testjin():
global name
name='jin'

testjin()
print name
这里要注意,函数testjin()要执行后,函数内testjin()中局部变量name才会提升为全局变量,函数外才能访问
但是一般都不用这种临时的方式,全局的就在全局定义,局部的就在局部定义

3、reload()
内建函数可以重新导入一个已经导入的模块。 它的语法如下:
reload(module)
module 是你想要重新导入的模块。使用 reload() 的时候有一些标准。 首先模块必须是全部
导入(不是使用 from-import), 而且它必须被成功导入。另外 reload() 函数的参数必须是模块自
身而不是包含模块名的字符串。 也就是说必须类似 reload(sys) 而不是 reload('sys')。


并行遍历函数:zip 和map
>>> L1=[1,2,3,4]
>>> L2=[5,6,7,8]
>>> zip(L1,L2)
[(1, 5), (2, 6), (3, 7), (4, 8)]
>>> for (x,y) in zip(L1,L2):
... print x,y,'--',x+y
当参数长度不同时,zip会以最短序列的长度为准来截断所得到的元组:
内置map函数,用类似的方式把序列的元素配对起来,但是如果参数长度,不同则会为较短的序列用None补齐。
>>> map(None,S1,S2)
[('A', 'x'), ('B', 'y'), ('C', 'z'), (None, '1'), (None, '2'), (None, '3')]
map对迭代对象中每一个元素都应用一个函数调用,类似于列表解析,有局限性,因需要函数,而不是任意表达式。
map(str.upper,open('/etc/rc.conf'))
内置range函数返回连续整数列表,可作为for中的索引。
>>> range(5),range(2,5),range(3,10,2)
([0, 1, 2, 3, 4], [2, 3, 4], [3, 5, 7, 9])
>>> range(5,-5,-1)
[5, 4, 3, 2, 1, 0, -1, -2, -3, -4]
用于for循环,步进2的更好for循环可为:
for x in S[::2]:print x
使用zip构造字典
>>> keys=['name','age','class']
>>> vals=['diege',18,2012]
dict(zip(keys,vals)) 构造字典
>>> dict(zip(keys,vals))
{'age': 18, 'name': 'diege', 'class': 2012}
>>> D5=dict(zip(keys,vals))
enumerate内置函数,同时产生偏移和元素
>>> S='diege'
>>> for (offset,item) in enumerate(S):
... print item,offset
...
d 0
i 1
e 2
g 3
e 4
这个方法有个next方法,每次遍历列表时,会返回一个(index,value)的元组,而我们能在for中通过元组赋值运算将其分解。
>>> E=enumerate(S)
>>> E.next()
(0, 'd')
>>> E.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> sorted(open('/etc/rc.conf')) #这个工具排序了,较新的内置函数,采用了迭代协议。应用于任何可迭代的对象上。
>>> sum([3,5,6,9]) #sum调用会计算任何可迭代对象内所有数字的和
any如果可迭代对象中的任何元素或者全部元素为True,内置函数就会返回True:all全部元素为True才返回True,有一个元素不为
True,都会返回flase
>>> any(['diege','',''])
True
>>> all(['diege','','ni'])
False
>>> all(['diege','a','ni'])
True



点评

海!外直播 t.cn/RxBC0c2 禁闻视频 t.cn/RJAQKcb 某省长说:“请全省人民对我严格监督。” 网友评论:人民拿什么监督你?报纸归你管,电视归你管,网络归你管,我这条信息都归你们管,说删就删,从来也没跟我商量过.   发表于 2019-4-15 18:36
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|大智能时代    

GMT+8, 2019-12-10 07:53 , Processed in 0.126038 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表