python学习之路-6 冒泡算法、递归、反射、os/sys模块详解
2016-06-16 22:43
781 查看
算法
冒泡算法
# 冒泡算法就是将需要排序的元素看作是一个个“气泡”,最小的“气泡”最先浮出水面,排在最前面。从小到大依次排列。 # 代码如下: li = [97, 65, 13, 39, 88, 50, 30, 34, 52, 57, 36, 5, 74, 25, ] count = len(li) for x in range(count): for i in range(count): if li[i] == li[-1]: break elif li[i] > li[i+1]: li[i], li[i+1] = li[i+1], li[i] count -= 1 print(li)
递归
在函数内调用函数自己称之为递归
# 应用案例:实现阶乘 1*2*3*4*5*6*7*8*9*10 def func(num): if num == 1: return 1 return num * func(num - 1) x = func(10) print(x) # 输出 3628800
反射
利用字符串的形式去对象(模块)中操作(寻找(getattr)/检查(hasattr)/删除(delattr)/设置(setattr))成员,缩减了代码的编写
# 在commons中寻找成员login,并将成员Login的内容赋值给func func = getattr(commons, "login") func() # 相当于执行成员login内的代码 # 返回一个bool值 查看commons中是否存在login hasattr(commons, "login") # 在commons对象中创建成员open_file setattr(commons, "open_file") # 在commons对象中删除成员open_file delattr(commons, "open_file")
应用案例:
① 在模块commons.py中有两个函数用来做登录操作和显示首页操作def login(): print("登录") def home(): print("首页")
② 在index.py中导入commons模块,使用反射根据用户的输入调用相应的方法
import commons inp = input("请输入需要操作的方法:(login/home)") if hasattr(commons, inp): func = getattr(commons, "login") func() else: print("输入错误")
扩展之导入模块:
# 应用场景: 比如获取用户输入,根据用户的输入来决定登录、注册,分别导入不同的函数,然后在配合反射 # 使用这种方式也可以导入模块,commons为模块名, # 将commons模块的内容导入,赋值给obj obj = __import__("commons") # 导入多级目录的时候需要设置fromlist=True,如果不设置,则只导入第一层 obj = __import__("lib.commons", fromlist=True)
四、模块
sys模块
# sys.argv # 在执行程序的时候可以给程序传参数,例如类似执行nginx检测配置文件语法功能的命令, nginx -t # mode_sys.py import sys print(sys.argv) # 执行程序,返回一个列表 CongdeMacBook-Pro:class_code congzhang$ python3 mode_sys.py -t # 输出 ['mode_sys.py', '-t'] ------------------------------------------------------------------ # sys.platform # 获取系统类型,比如程序要在多系统上运行的时候,就需要用到该方法了 # windows >>> import sys >>> print(sys.platform) win32 # mac >>> import sys >>> print(sys.platform) darwin # ubuntu >>> import sys >>> print(sys.platform) linux # 应用案例: # 假设,我们想实现一个清除终端,linux下用clear, windows下用cls import sys, os ostype = sys.platform # 如果系统类型为linux或mac if ostype == ”linux” or ostype==”darwin”: cmd=”clear” else: cmd=”cls” os.system(cmd) # 调用os.system方法清屏 ------------------------------------------------------------------ # sys.path # 查看当前环境变量 >>> import sys >>> print(sys.path) ['', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python34.zip', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages'] # sys.path.append("/home") # 将/home添加到环境变量中,/home下面的.py文件就可以直接使用import 模块名 来进行导入了
os模块
python中os模块的一些方法可以直接跟系统(linux/windows)进行交互
os.name # 查看当前系统的类型,如果是window 则用'nt'表示,对于Linux/Unix,则用'posix'表示 >>> os.name 'posix' os.getcwd() # 得到当前工作目录,即当前Python脚本工作的目录路径 >>> os.getcwd() '/Users/congzhang' os.listdir() # 返回指定目录下的所有文件和目录名 >>> print(os.listdir()) ['.bash_history', '.bash_profile', '.bash_sessions', '.CFUserTextEncoding', '.DS_Store', '.idlerc', '.matplotlib', '.python_history', '.sogouinput', '.subversion', '.Trash', '.wiznote', 'Applications', 'Applications (Parallels)', 'data', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public'] >>> print(os.listdir("/")) ['.DocumentRevisions-V100', '.file', '.fseventsd', '.PKInstallSandboxManager', '.Spotlight-V100', '.Trashes', '.vol', 'Applications', 'bin', 'cores', 'dev', 'etc', 'home', 'installer.failurerequests', 'Library', 'net', 'Network', 'private', 'sbin', 'System', 'tmp', 'Users', 'usr', 'var', 'Volumes'] os.remove() # 只能删除文件,括号内放文件的绝对路径,删除目录会报错的 >>> os.remove("/Users/congzhang/data/aaa") os.rmdir() # 删除指定目录 os.mkdir() # 创建目录 os.path.isfile() # 判断指定对象是否为文件,是则返回True,否则返回False os.path.isdir() # 判断指定对象是否为目录,是则返回True,否则返回False os.path.exists() # 检测指定对象是否存在,是则返回True,否则返回False os.system() # 运行系统命令 >>> os.system('ls') Applications Movies Applications (Parallels) Music Desktop Pictures Documents Public Downloads data Library 0 os.path.split() # 返回路径的目录和文件名 # 这里svn是目录,只是判断是不是以‘/’结尾,是则判定最后一个为文件,否则为目录 >>> os.path.split("/Users/congzhang/data/svn") ('/Users/congzhang/data', 'svn') >>> os.path.split("/Users/congzhang/data/svn/") ('/Users/congzhang/data/svn', '') os.path.join(path, name) # 连接目录和文件名 >>> os.path.join("/home", "xxx.txt") '/home/xxx.txt' os.path.basename(path) # 返回文件名 # 跟上面的os.path.split()类似,根据末尾是否存在'/'判断路径最后一段是否为目录 >>> os.path.basename("/Users/congzhang/data/svn/") '' >>> os.path.basename("/Users/congzhang/data/svn") 'svn' os.path.abspath() # 使用相对路径获得绝对路径 >>> os.path.abspath(".") '/Users/congzhang' os.path.dirname(path) # 返回路径的上一级目录名 >>> os.path.dirname("/Users/congzhang/data/svn") '/Users/congzhang/data' >>> os.path.dirname("/Users/congzhang/data/svn/") '/Users/congzhang/data/svn'
相关文章推荐
- python functools.wraps装饰器模块
- Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)
- 使用python生成本地html文件
- python ssh
- python
- python类常用的内置方法
- Python内建函数与对象方法
- python SQLAlchemy
- python多版本共存之道——Pyenv
- python time
- 安装sklearn机器学习库
- Python 经典书籍
- 分析python程序运行时间的几种方法
- 利用Python实现Fibonacci Squence
- 在anaconda python开发套件下进行opencv的安装
- python数据类型详解
- python两个文件的对比
- 数据处理工具pandas
- Python学习笔记(运算符)
- python 写入文件