文件操作
#!/usr/bin/env python # -*- coding: utf-8 -*- ####文件操作:open### f = open('file','r+',encoding='utf-8') #以utf-8格式打开文件 #打开模式: #r:只读 #w:只写,写之前清空文件 #x:python3新加,如果文件存在,就报错,如果文件不存在,就创建文件并向文件只写 #a:追加 #rb、wb、ab:以二进制方式操作文件,这时就不需要使用encoding参数了 #r+:可读可写,文件指针默认在尾部 #w+:可读可写 #a+:可读可写 data = f.read() #读取文件内容,无参数时读取文件所有内容,有参数时,根据打开方式进行区分:r,读取相应字符长度,rb,读取相应字节长度 print(data) f.readline() #仅读取一行 #打开文件后,文件指针位置默认在开头,要想偏移指针,就要用到seek f.seek(6) #文件指针位置偏移(单位是字节) print(f.tell()) #获取当前指针的位置(单位是字节) f.truncate() #截断,将文件指针后面的内容全部清空 #使用seek后要继续进行写操作,则写入位置就是从seek偏移后的位置开始,一直往后覆盖 f.write('hello') f.flush() #文件没有关闭的情况下,强制刷新数据到文件中 f.close() #关闭文件 ######################################## with open('file','r+') as f: pass #with还支持同时打开两个文件(python2.7以后才支持) with open('file','r+') as f1,open('file2','r+') as f2: pass
其他
#!/usr/bin/env python # -*- coding: utf-8 -*- print(abs(-1)) #取绝对值 #参数所有元素都为真,才为真 print(all([1,2,3,4])) #all参数为一个可迭代对象,作用是判断这个可迭代对象的所有元素是否都为真,若是,则返回True #参数所有元素都为假,才为假 print(any([0,1,2,3])) #any参数为一个可迭代对象,作用是判断这个可迭代对象的所有元素是否有真值,若有,则返回True print(bin(3)) #将十进制转换为二进制 print(oct(9)) #将十进制转换为八进制 print(hex(17)) #将十进制转换为十六进制 print(bool(2)) #判断参数bool类型 #编码: #utf-8:一个汉字占3个字节 #gbk:一个汉字占2个字节 s = '张三' #bytes方法:将字符串转换成指定编码的字节类型(utf-8就是每个汉字3个字节,gbk就是每个汉字2个字节) print(bytes(source=s,encoding='utf-8')) print(bytes(source=s,encoding='gbk')) b = bytes(source=s,encoding='utf-8') #utf-8形式的字节类型 print(str(b,encoding='utf-8')) #将字节转换为字符串(以utf-8形式)
#!/usr/bin/env python # -*- coding: utf-8 -*- def f1(): return True f2 = 123 #callable,判断是否能被执行(调用),能则返回True print(callable(f1)) #f1是函数,可以被调用,返回True print(callable(f2)) #f2是变量,不能被调用,返回False ################################################################ print(chr(65)) #将十进制数转化为对应的编码的字符 print(ord('A')) #将字符转化为十进制编码 ################################################################ s = 'print(123)' r = compile(s,'<string>','exec') #将字符串s编译成可执行的python代码 print(r) exec(r) #执行上面编译的代码,无返回值 ''' #eval,将字符串转换成表达式,有返回值 s1 = "8*8" re1 = eval(s1) print(re1) s2 = "{'name':'alex'}" re2 = eval(s2) print(type(re2),re2) ################################################################ re = divmod(97,10) #97/7,获得其商和余数 print(re,re[0],re[1]) #re[0]为商,re[1]为余数 #上面也可以这样写 n1,n2 = divmod(97,10) #n1为商,n2为余数 print(n1,n2) ''' #isinstance(),用来判断对象是否是某个类的实例 s = 'alex' re = isinstance(s,str) #判断s是否是str的实例 print(re)
#!/usr/bin/env python # -*- coding: utf-8 -*- li = [11,22,33,44,55] def f(a): if a > 22: return True ret = filter(f,li) #filter,将列表的每个元素分别传入f,如果f的返回值为True,则将该元素放入ret中,返回值为False则丢弃 print(list(ret)) f1 = lambda a:a > 30 print(f1(20)) #lambda表达式返回True和False li = [11,22,33,44,55] re = filter(lambda a:a > 33,li) #过滤出li中大于33的元素 print(list(re)) li = [11,22,33,44,55] ret = map(lambda a:a+100,li) #map,列表中每个元素分别执行lambda函数,生成一个新的结果赋给ret print(list(ret)) name = 'alex' def f(): a = 123 print(globals()) #globals,用来存放所有的全局变量(包括自定义的和系统提供的) print(locals()) #locals,用来存放所有的局部变量 f() #打印结果显示全局变量中有name,局部变量有a print(id(name)) #查看内存地址 s = '张三' print(len(s)) #python3中按字符进行计算,python2中按字节进行计算 print(pow(2,3)) #求指数:2的3次方 ########################################################################## #列表的reverse方法和全局reversed方法效果是一致的,列表的reverse方法内部就是调用全局revesed方法 li = [1,2,3] li.reverse() print(li) print(list(reversed(li))) ########################################################################## print(round(1.4)) #四舍五入 ########################################################################## l1 = ['alex',1,2,3] l2 = ['is',4,5,6] l3 = ['sb',7,8,9] #zip,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。 # 若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同 print(list(zip(l1,l2,l3)))
#!/usr/bin/env python # -*- coding: utf-8 -*- def outer(func): def inner(): print('before') ret = func() print('after') return ret return inner # 装饰器:@+函数名 # 功能:1、自动执行outer函数并将其下面的函数名f当做参数传递;2、将outer函数的返回值重新赋值给f @outer def f(): print('f1') return 'haha' s = f() print(s) ################################################################################ #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 函数中带参数的装饰器 ''' def outer(func): def inner(*args,**kwargs): print('before') ret = func(*args,**kwargs) print('after') return ret return inner @outer def f(arg): print(arg) return 'f' print(f('hello')) @outer def f1(arg1,arg2): print(arg1,arg2) return 'f1' print(f1('hello','tom'))
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 一个函数可以被多个装饰器装饰,执行过程是从上向下---------本质是装饰器的嵌套 ''' USER_INFO = {} #判断用户是否登录 def check_login(func): def inner(*args,**kwargs): if USER_INFO.get('is_login') == True: ret = func(*args,**kwargs) return ret else: print('请先登录!') return inner #判断用户是否是管理员 def check_admin(func): def inner(*args,**kwargs): if USER_INFO.get('user_type') == 2: ret = func(*args,**kwargs) return ret else: print('无权限查看!') return inner #先判断用户是否登录,再判断用户是否是管理员 @check_login @check_admin def index(): ''' 管理员功能 :return: ''' print('管理员页面') def login(): user = input('user:') if user == 'alex': USER_INFO['is_login'] = True USER_INFO['user_type'] = 1 elif user == 'admin': USER_INFO['is_login'] = True USER_INFO['user_type'] = 2 @check_login def home(): ''' 普通用户功能 :return: ''' print('普通用户页面') def main(): while True: print('1、登录 2、查看用户信息 3、管理员管理') select = input('请选择:') if select == '1': login() elif select == '2': home() elif select == '3': index() if __name__ == '__main__': main()
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 两种字符串格式化方式 ''' ''' #%.2f:保留两位小数 s = 'hello %(name)s,my age is %(age)d.my money has only %(money).2f' % {'name':'alex','age':20,'money':1000.2456} print(s) #没有占位符时,一个%就是一个字符 s1 = 'hello %' print(s1) #字符串中有占位符时,要想在字符串中显示‘%’,就要这样写:%%(注意:这时只写一个%会报错) s2 = 'hello %s %%' % ('alex') #s2 = 'hello %s %' % ('alex') #报错 print(s2) ''' msg = 'hello {name},your {car} is so good!'.format(name='maco',car='bike') # 格式化字符串 # msg = 'hello {name},your {car} is so good!'.format(**{'name':'maco','car':'bike'}) #上面等价写法 print(msg) # 结果:hello maco,your bike is so good! msg1 = 'my name is {},my age is {}'.format('alex', 20) # 按顺序依次传入 # msg1 = 'my name is {},my age is {}'.format(*['alex',20]) # 上面等价写法 print(msg1) msg2 = '{0} is a good man,he is {1}.{0} is so cool!'.format('Maco','26') # 按照下标传入(从0开始) print(msg2) # 结果:Maco is a good man,he is 26 msg3 = 'the percent is {:.2%}'.format(0.8) # {:%}将传入的参数转化为百分比显示,并且取两位小数位 print(msg3) msg4 = 'the title:{:*^20s}'.format('book') #传入参数占20个字符的长度,参数居中,其他空位用*填充,匹配字符类型(s) print(msg4) msg5 = 'the num is {:#b}'.format(10) #以二进制显示。(#o:八进制、#x:十六进制)---#表示进制转换后前面添加的0b、0o、0x print(msg5) msg6 = 'my name is {:s},my age is{:d}.I have ${:f}'.format('alex',18,1000.23) #按顺序依次传入,但是指定了传入参数的数据类型 print(msg6)
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 生成器:使用函数创造 普通函数的返回值用return,生成器的返回值用yield 生成器每次执行到yield的位置后就停止执行并返回数据,待下次执行生成器时,又从上次停止的地方继续向下执行 ''' def func(): print(111) yield 1 print(222) yield 2 print(333) yield 3 ret = func() ''' r1 = ret.__next__() print(r1) r2 = ret.__next__() print(r2) r3 = ret.__next__() print(r3) ''' for i in ret: print(i)
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 递归:函数自己调用自己 ''' #累加 def func(n): if n == 1: return 1 sum = n + func(n-1) return sum s = func(3) print(s) #累乘 def func1(n): if n == 1: return 1 s = n * func1(n-1) return s s1 = func1(7) print(s1)
关注我的公众号,不定期推送资讯
本文来自博客园,作者:链条君,转载请注明原文链接:https://www.cnblogs.com/MacoLee/articles/6029955.html