6_10

常用模块的介绍

3.os模块(知道有这么个功能就行)

链接:https://www.cnblogs.com/linhaifeng/articles/6384466.html#_label3
    
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
__file__  返回当前文件的路径


os.system("bash command")  运行shell命令,直接显示,相当于在pycharm中运行了cmd,但是会直接显示为GBK模式,不能正常打印中文(pycharm为utf-8)。此时,可以用subprocess模块
    import subprocess
    obj = subprocess.Popen('tasklist',shell=True,
                     stdout=subprocess.PIPE,         
                     stderr=subprocess.PIPE
                     )
    print(res1.decode('gbk'))
      注:obj.stdout为子进程正常运行的结果,显示为b模式
          obj.stderr为子进程运行失败的结果,显示为b模式

补充:函数的参数

1.形参和实参

	形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定
    
    注:参数的本质一定是一个确定的值(*****)
    import random
    print(random.choices([random.randint(2, 6)], k=4))
    结果:[2, 2, 2, 2]或[5, 5, 5, 5]或···
    	结果中的4个数一定相等,因为对于random.choices()来说,参	数random.randint(2, 6)是一个确定的值

2.位置实参和关键字实参

位置参数(形参和实参):按照从左到右的顺序定义的参数
关键字实参:按照key=value的形式定义的实参

二者可以混用:
	1. 关键字实参必须在位置实参后面
    2. 对同一个形参不能重复传值

3.默认形参

可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)
	注意的问题:
		1. 默认值只在定义时赋值一次(指向的是地址)
        m=2
        def func(x,y,z=m)
        	print(x,y,z)
        m=10
        func(1,1)
        结果:1,1,2
        
		2. 默认参数的定义应该在位置形参后面
        
		3. 默认参数通常应该定义成不可变类型,如果必须可变,则写	成
        def func(x,y,z=None)
        	if z == None
            	z=[]    

4.可变形参

1.*args:针对溢出的位置实参
    多余的参数会被写成元组并存入args
    
2.**kwargs:针对溢出的关键字实参
    多余的参数会被写成字典并存入kwargs
	def func(**kwargs):
   		print(kwargs)
	func(a=6,b=3,c=8)
	结果:{'a': 6, 'b': 3, 'c': 8}
   
3.实参前面加*:对列表打散,再传参数
	func(*[1,2,3,4])  #相当于func(1,2,3,4)
    *字典 =  *字典.keys()
    
  实参前面加**:功能一样,但后面只能跟字典

4.*后定义的参数称命名关键字形参,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递
	 def foo(x,y,*args,a=1,b,**kwargs):
        ···
     foo(1,2,3,4,5,b=3,c=4,d=5)
     结果:x=1,y=2,args=(3,4,5),a=1,b=3,kwargs=			{'c':4,'d':5}
        
 5.形参参数的优先级:
	位置形参,默认形参,*,命名关键字形参,**  #依次从左到右

注:

运用切片对字符串和列表进行截取
def func2(seq):
    return seq[::2]   #顾头不顾尾
posted @ 2021-06-10 21:26  hai437  阅读(50)  评论(0编辑  收藏  举报