python学习之路-6 冒泡算法、递归、反射、os/sys模块详解
算法
冒泡算法
# 冒泡算法就是将需要排序的元素看作是一个个“气泡”,最小的“气泡”最先浮出水面,排在最前面。从小到大依次排列。
# 代码如下:
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学习之路-6 冒泡算法、递归、反射、os/sys模块详解的更多相关文章
- (转)python之os,sys模块详解
python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...
- 小白的Python之路 day5 os,sys模块详解
os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ...
- python之sys模块详解
python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...
- 转载的:Python os 和 os.path模块详解
os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curdi ...
- python标准库介绍——10 sys 模块详解
==sys 模块== ``sys`` 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. === 处理命令行参数=== 在解释器启动后, ``argv`` 列表包含了传递给脚本的所有 ...
- Python学习之路6☞函数,递归,内置函数
一python中的函数 函数是逻辑结构化和过程化的一种编程方法. python中函数定义方法: def test(x): "The function definitions" x+ ...
- Hadoop学习之路(二十三)MapReduce中的shuffle详解
概述 1.MapReduce 中,mapper 阶段处理的数据如何传递给 reducer 阶段,是 MapReduce 框架中 最关键的一个流程,这个流程就叫 Shuffle 2.Shuffle: 数 ...
- linux学习之路第七天(压缩和解压类指令详解)
压缩和解压类 1.gzip/gunzip 指令 gzip 指令用于压缩文件, gunzip用于解压的 基本语法 gzip 文件 (功能描述:压缩文件,指令将文件压缩成*.gz文件) gunzip 文件 ...
- linux学习之路第七天(搜索查找类指令详解)
搜索查找类 1.find指令 find指令将从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示终端. ~基本语法 find [搜索范围] [选项] ~选项说明 应用案例 案例1 :按文件 ...
随机推荐
- C++ Primer 学习笔记_77_模板与泛型编程 --实例化
模板与泛型编程 --实例化 引言: 模板是一个蓝图,它本身不是类或函数.编译器使用模板产生指定的类或函数的特定版本号.产生模板的特定类型实例的过程称为实例化. 模板在使用时将进行实例化,类模板在引用实 ...
- 在CentOS 7上利用systemctl加入自己定义系统服务
CentOS 7继承了RHEL 7的新的特性,比如强大的systemctl,而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的执行效率 ...
- RMAN常用备份恢复命令汇总
RMAN命令 1.独立命令 RMAN>shutdown immediate RMAN>startup RMAN>backup format 'd:\backup\%d_%s.b ...
- python-socket 粘包问题
解决粘包的问题: 1.服务端在发送数据之前,先把发送数据的长度告诉客户端,要发送多少数据,然后客户端根据这个数据的长度循环接收就OK 传输过程: 服务端: 1.send #数据长度 ...
- (转)Java 代码优化过程的实例介绍
简介: 通过笔者经历的一个项目实例,本文介绍了 Java 代码优化的过程,总结了优化 Java 程序的一些最佳实践,分析了进行优化的方法,并解释了性能提升的原因.从多个角度分析导致性能低的原因,并逐个 ...
- mysqlbinlog详解
mysqlbinlog用于处理二进制日志文件的实用工具详解mysqlbinlog从二进制日志读取语句的工具.在二进制日志文件中包含的执行过的语句的日志可用来帮助从崩溃中恢复. binlog日志打开方法 ...
- ios9API基础知识总结(二)
UIAlertView(警告框) UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"标题" message:@&qu ...
- uva11426 欧拉函数应用
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121873#problem/F 题目大意:给你一个数n,让你输出(i=1-> ...
- android如何保存读取读取文件文件保存到SDcard
android如何保存读取读取文件文件保存到SDcard 本文来源于www.ifyao.com禁止转载!www.ifyao.com 上图为保存文件的方法体. 上图为如何调用方法体保存数据. 上面的截图 ...
- birt报表图标中文显示为框框的解决方法
birt报表中图标部分的中文显示为框框,其他部分中文显示正常 解决办法:修改jdk中的字体设置/jdk1.6.0_13/jre/lib /fonts/fonts.dir 1.将宋体字体copy到/jd ...