python函数与模块(装饰器,文件处理,迭代器等)

os模块

 1 os.system('命令')  利用python调用系统命令,命令可以是以列表或者元组内的元素形式*  res
 2 import os
 3 res=os.system('ipconfig')
 4 print(res)       # ----> ...0 如果返回0,则证明执行结果成功,其他值失败。可以此来验证命令是否执行成功。*
 5 cmd=['ipconfig','systemctl restart network','setenforce 0']
 6 for i in cmd:
 7     res = os.system(i)
 8     print(res)        ----> 0 1 1 即ipconfig成功,其他两个失败
 9 
10 res=os.path.exists(r'D:\charm日常\a.txt')   #----》查看文件的绝对路径,如果是同级目录直接写文件名。 res
11 if res:                           #----》判断此文件是否存在
12     print('文件存在')
13 else:
14      os.system('dir')   #--->如果不存在列出目录
15 print(res)  #--->false 布尔,可用此来判断文件是否存在
16 
17 os.remove('a.txt')  --->a.txt文件被删除
18 
19 os.path.join:拼接路径 res
20 HOME = 'etc/yum.repo.d/'
21 res=os.path.join(HOME,'a.txt')   --->变量不需要引号
22 print(res)     ---->etc/yum.repo.d/a.txt 成功拼接成一个路径
23 
24 os.rename:重命名
25 os.rename('250.txt','250.py')  #--->250.txt改名为250.py,不同后缀也可重命名

configparser模块

 1 import configparser
 2 config = configparser.ConfigParser()
 3 config.read('D:\charm日常\mariadb.repo',encoding='utf-8')       #绝对路径(相对路径) / utf-8
 4 
 5 config.add_section('zzz')                                       #-->添加小模块
 6 
 7 config.set('zzz','baseurl','http://1929393')        #------》设置模块,变量名,变量值,都用引号
 8 
 9 config.write(open('mariadb.repo','w'))         #设置完要写入,才算保存了。 格式为.write(open('文件名',‘w'))
10 
11 res=config.has_section('zzz')
12 print(res)                 #--->true   布尔
13 
14 config.remove_option('zzz','baseurl')     #---->删除zzz模块的baseurl这个变量,删除玩写入保存才生效
15 config.write(open('mariadb.repo','w'))
16 
17 config.remove_section('hhh')             # ----->将hhh这个模块的所有内容都删除
18 config.write(open('mariadb.repo','w'))
19 
20 res=config.sections()           #--->['zzz', 'hhh'] 将变量以列表格式输出
21 print(res)
22 
23 res=config.get('zzz','baseurl')       #---->查看zzz模块的变量的 变量值
24 print(res)

文件处理知识点

 1 with open (r'C:\Users\zzz\Desktop\1.txt.txt','w',encoding='utf-8') as f:
 2     res=f.readlines()      --->['邻家有女初长成']将文件内容按列表格式读出
 3     print(res)
 4     res=f.read(3)     #---->邻家有, 读取光标向右三个字符,而不是第三个字符
 5     print(res)
 6     print(f.read(2))    #----》光标在’有‘后面再往右读取两个字符
 7 
 8     f.write('吧,baba')    #---->f.wirte没有返回值,效果直接体现在文件中
 9     f.writelines(['吧,爸爸'])   #--->括号内可以是字符,元组或者列表,写进文件后都是以字符形式出现
10 
11     print(f.readable())    ---->false 不可读。因为上面权限是w
12 
13 with open (r'C:\Users\zzz\Desktop\1.txt.txt','rb') as f:
14     print(f.read())        #asdf爸爸---->b'asdf\xe7\x88\xb8\xe7\x88\xb8'  前面 b 表示bytes类型,英文可以直接用b读取,但是汉字会读取为二进制类型。
15     print(f.read().decode('utf-8'))      --->asdf爸爸 ,因为f里面的类型为rb,已经转码过,所以这里直接decode解码就行。
16 
17 with open(r'C:\Users\zzz\Desktop\1.txt.txt', 'r') as f:
18     data=f.read().encode()  ---->将文件内容转为二进制类型,如果内容里面没有汉字,可直接在上方类型中加个b。b相当于.encode,但是如果有汉字则必须用encode
19     # print(data)
20     res=data.decode('utf-8') ----》二进制转码后需要decode解码
21     print(res)

装饰器 

在不改变源代码和调用方式的基础之上给函数增加新的功能



1
def deco(lala): # --->定义形参为lala 2 def wrapper(): 3 lala() #这里的作用是调用test(),所以要设置形参lala=test 4 print('77777') 5 return wrapper #--->这个是deco()的调用结果,注意位置,如果再缩进就成了wrapper()的调用结果 6 7 @deco #---》test = deco(test) 意思为test这个内存地址为deco()的调用结果也就是test = wrapper; 然后形参为test=lala. 8 def test(): 9 print('99999999')

可迭代对象与迭代器对象

 1 #为什么要有迭代器?什么是可迭代对象?什么是迭代器对象?
 2 #1、为何要有迭代器?
 3 # 对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,
 4 #: 若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器
 5 l1=['1','2','a']
 6 t1=(1,2,3)
 7 str=('13daf')
 8 d1={'a':'g',"aa":1}
 9 set={1,2,'a'}
10 res=iter(l1.__iter__())    # 也可以写成res=iter(l1)
11 print(next(res))   # 1
12 print(next(res))   # 2
13 print(next(res))   # a     打印一次返回一个值,而不同for循坏一样会自动循坏所有值
14 print(next(res))   # StopIteration 停止迭代

名称与作用域

def f1():
    def f2():
        def f3():
            print(x)
        f3()          #---->嵌套的函数f3被调用后,函数体才生效报错,因为在f3局部空间内还是在全局都找不到变量的值。
    f2()
f1()

def f1():
    def f2():
        x=1
        def f3():
            print(x)--->在f2中找到了x的赋值,但是这建立在f2被调用的前提下*/变量的赋值先是在本局部空间中寻找,然后是其他局部,然后才是全局和内置。
        f3()
    f2()
f1()
即名称空间访问顺序为:局部——全局——内置*   加载顺序是:内置——全局——局部   作用域:产生效果的范围,例一个函数体内

猜你喜欢

转载自www.cnblogs.com/zzzynx/p/10769452.html