1、关于apply的用法, 如果要使用字典参数, 而又元组为空的话, 元组也不能省略
python apply()函数
2、使用 __import__ 函数获得特定函数实现延迟( = = 虽然觉得并没有什么用, 大概好处是不用专门导入一个库?
def getfunctionbyname(module_name, function_name): module = __import__(module_name) return getattr(module, function_name) aa = getfunctionbyname('dumbdbm', 'open') #此时的aa已经是个函数了 >>> type(aa) <type 'function'>据这篇博文: Python 三种导入模块的方法和区别 中提到的:
“两者的区别是,import 后面跟的必须是一个类型(type),而__import__() 的参数是一个字符串,这个字符串可能来自配置文件,也可能是某个表达式计算结果”然而还是并不觉得有什么用 = =
据这篇博文: python动态导入模块并reload类及函数 中提到:
“比如你希望加载某个文件夹下的所用模块,但是其下的模块名称又会经常变化时,就可以使用这个函数动态加载所有模块了,最常见的场景就是插件功能的支持。”
感觉这个作用还行 ╭(′▽`)╯
3、使用 __import__ 函数实现延迟导入
# 使用 __import__ 函数实现延迟导入 class LazyImport: def __init__(self, module_name): self.module_name = module_name self.module = None def __getattr__(self, name): if self.module is None: self.module = __import__(self.module_name) return getattr(self.module, name) string = LazyImport('string') print string.lowercase</span>
# 使用 reload 函数 import hello reload(hello) reload(hello)</span>注意, 当你重加载模块时, 它会被重新编译, 新的模块会代替模块字典里的老模
5、dir 返回由给定模块、类、实例, 或其他类型的所有成员组成的列表。
>>> aa = [] >>> dir(aa) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__',</span>
6、vars 函数与此相似, 它返回的是包含每个成员当前值的字典. 如果你使用不带
参数的 vars , 它将返回当前局部名称空间的可见元素(同 locals() 函数 ).
>>> book = "library2" pages = 250 scripts = 350 print "the %(book)s book contains more than %(scripts)s scripts" % vars() the library2 book contains more than 350 scripts注: 这种做法的好处就是不用把需要输出的变量都放到一个额外的临时的字典里
7、isinstance 函数可以接受任何对象作为参数, 而issubclass函数在接受非类对象参数时会引发 TypeError 异常
8、eval 函数将一个字符串作为 Python 表达式求值
# os库
9、读取某文件夹的所有文件名
import os for file in os.listdir("D:\\test"): print file
import os # 获取当前目录 cwd = os.getcwd() print "cwd:", cwd # 改变当前目录到指定目录 os.chdir("D:\\test") print "cwd2:", os.getcwd() # 获取当前目录的父目录字符串名 os.chdir(os.pardir) print "cwd3:", os.getcwd()
import os # 把旧的同名文件删除 try: os.remove("D:\\test\\test1\\file") os.removedirs("D:\\test\\test1") except os.error: pass # 创建文件夹 os.makedirs("D:\\test\\test1") fp = open("D:\\test\\test1\\file", "w") fp.write("This is a test") fp.close()
13、os.makedirs: 可以创建多个目录级的文件
import os os.makedirs("D:\\test\\test1\\test2\\test3")
而 os.mkdir 则只可以创建单级目录, 如以下的例子则必须在上面的例子后才能成功创建, 否则会报错
os.mkdir("D:\\test\\test1\\test2\\test3\\test4")
15、 os.rmdir : 删除单级空目录,若目录不为空则无法删除,报错
16、如果需要删除非空目录, 可以使用 shutil 模块中的 rmtree 函数
17、stat 函数可以用来获取一个存在文件的信息
它返回一个类元组对象(stat_result 对象, 包含 10 个元素), 依次是 st_mode (权限模式), st_ino (inode number), st_dev (device), st_nlink (number of hardlinks), st_uid (所有者用户 ID), st_gid (所有者所在组 ID ), st_size (文件大小, 字节), st_atime (最近一次访问时间), st_mtime (最近修改时间),st_ctime (平台相关; Unix 下的最近一次元数据/metadata 修改时间, 或者Windows 下的创建时间) - 以上项目也可作为属性访问
18、使用os模块调用其它程序(windows)
import os import string def run(program, *args): #find executable for path in string.split(os.environ["PATH"], os.pathsep): file = os.path.join(path, program) + ".exe" print file try: return os.spawnv(os.P_WAIT, file, (file,) + args) except os.error: pass raise os.error, "cannot find executable" run("python", "hello.py") print "goodbye"
20、使用 os.path 模块处理文件名
import os filename = "my/little/pony" print "using", os.name, "..." print "split", "=>", os.path.split(filename) print "splitext", "=>", os.path.splitext(filename) print "dirname", "=>", os.path.dirname(filename) print "basename", "=>", os.path.basename(filename) print "join", "=>", os.path.join(os.path.dirname(filename), os.path.basename(filename))
# 使用 os.listdir 搜索文件系统 import os def index(directory): # like os.listdir, but traverses directory trees stack = [directory] files = [] while stack: directory = stack.pop() for file in os.listdir(directory): fullname = os.path.join(directory, file) files.append(fullname) if os.path.isdir(fullname) and not os.path.islink(fullname): # 判断是否是目录和不是链接 stack.append(fullname) return files for file in index("."): print file