#!/usr/bin/env python # -*- coding:utf-8 -*- #python3 代码执行过程,默认字符串是unicode,unicode----->encode------bytes(字节码),所以不会乱码,bytes---->decode----->unicode #python2 代码执行过程,默认字符串就是bytes,可以指定u"字符串"为Unicode不会出现乱码,而bytes可以decode为指定的字符编码,不指定默认为python解释器的编码 #for的补充 # with open('newproducts','r',encoding='utf-8') as f,open('test2.txt','w+',encoding='utf-8') as g: # g.write(f.read()) # f.seek(0) # for i in f.readlines(): # print(i) # else: #(判断for语句执行是否中断,如果中间有break,else就不在执行) # print("================>successful") # h = 1 # while h <= 20: # print(h) # h += 1 # else: # print("==============> successful") #文件操作 #r+ 读写 文件不存在报错 #w+ 写读 文件不存则创建,存在则清除文件内容,写入新的内容 #a+ 追加 #文件读操作 # f = open("newproducts",'r',encoding='utf-8') # print(f.read()) #一次读取文件中所有的行 # # print(f.readline(),end="") #一次输出文件中的一行,end取消print自带的换行符(\n) # # print(f.readlines()) #一次输出文件中的内容,每行作为列表的元素 # # print(f.readable()) #判断文件打开的模式是否是可读 # print("=========================================") # f.seek(0) #移动光标到文件的开头 # print(f.readlines()) # f.close() #关闭文件的句柄 #文件w写操作,文件存在则清除文件内容,文件不存在则创建文件 # f = open("productions",'w',encoding='utf-8') # f.write('1111\n') # f.write('33331') # f.seek(0) # f.write('2222\n') # # f.writelines(["花生米 , 4.88\n","羊肉片 , 12.9\n"]) #文件中写入,列表只能是可以迭代的对象 # f.close() #seek()将鼠标光标移动到开始文件开始位置 # f = open("productions",'w',encoding='utf-8') # f.write("乐大妈风干肠\n") # f.write('西红柿\n') # f.seek(0) #seek中的数字代表字节,一个汉字utf-8 用3个字节bytes表示 # f.write("海南木瓜") #此处加上\n换行符会报编码错误,与第一行内容长度相同 # f.close() #文件的修改,实质只是将原来文件的内容读到内存中,在内存中修改,然后覆盖原来的文件 # import os # f = open("productions",'r',encoding='utf-8') # g = open("test.txt",'w',encoding='utf-8') # for i in f.readlines(): # if i.startswith("海南木瓜"): # i ="苹果\t 7.8\n" # g.write(i) # f.close() # g.close() # # os.remove('productions') # os.rename('test.txt',"productions") #文件实时刷新日志 # import time # with open('access.log','r',encoding='utf-8') as sf: # sf.seek(0,2) #将光标移到文件最后包含换行符 # while True: # sends = sf.readline().strip() # if sends: # print(sends) # time.sleep(0.5) #以字节码的形式打开文件,需要以指定字符编码解码 # with open('access.log','rb') as sf: # print(sf.read().decode('utf-8')) #read中的数字指的是字符数,seek中的数字都是指字节码 #seek是以字节码的形式移动光标 # with open('newproducts','r',encoding='utf-8') as f,open('productions','w+',encoding='utf-8') as g: # g.write(f.read()) # print(g.tell()) # g.seek(0,2) # print(g.tell()) # g.seek(0) # for i in g.readlines(): # print(i) #seek的2中模式seek(0,2),seek(0,1) # with open('newtest','wb+') as f: # f.write("哈哈".encode('utf-8')) # print(f.tell()) # # f.seek(1) # f.seek(2) # f.seek(1,1) # # f.seek(6) # print(f.read(3).decode('utf-8')) #对二进制文件进行读写操作,把图片用二进制的方式读出来,然后复制出新的图片 # with open('timg.jpg','rb') as f,open('new.jpg','wb') as g: # g.write(f.read()) #三元表达式,三目运算(if条件满足输出左边的值,不成立输出else后面的值) # b = "a" if 2 > 1 else "c" # print(b) #函数 # def andy(): # print("hello world") # # andy() # def my_max(x,y): # mx = x if x > y else y # return mx # # print(my_max(3,4)) # def gev(): # print("this is a test") # return 1,2,3,[4,5] # a,b,c,d = gev() # print(a,b) #函数重点 #函数分为内置函数和自定义函数 #1、内置函数(sum,max) # print(sum((1,2))) # print(sum([1,2])) # print(max(2,4)) # print(min(2,1)) #2、自定义函数 # def ziji(形参1,形参1): # '''函数说明''' # 函数体 # retrun 返回值 #定义函数的三种形式(定义函数的函数名不能以test开头) #无参函数,函数的功能只是进行一些操作,无参函数都有返回值 # def hello(): # print('hello world') # # hello() #有参函数,函数的功能依赖于外部传入的参数,通常是有返回值 # def adds(x,y): # z = x + y # return z # # print(adds(1,2)) #对函数返回值,返回值可以是任意python数据类型,函数名字不能以test关键字开头 # def metest(): # return 1,2,[3,4],{'a':5,'b':6} # # a,b,c,d = metest() # # print(a,b,c[0],d["a"]) # a,*_,d = metest() #*_代表多个元素 # print(a,d) #函数调用 #根据有参函数和无参函数分为2中调用方式 #1.定义无参函数,调用时无需传参 #2.定义有参函数,调用时必须传参 #按照函数的调用形式和出现位置分为3种 # def foo(): # print("testone") # # foo() #函数的语句形式 # def foo2(x): # return x # print(foo2(2)*2) #函数的表达式形式 # def foo3(x,y): # z = max(x,y) # return z # # print(foo3(foo3(1,2),4)) #把函数的调用当成另一个函数的参数 ###函数的参数(位置参数、关键字参数、默认参数、可变长参数、命名关键字参数) #1.位置参数,位置参数的形参的个数必须和形参的个数一致,位置实参和位置形参一一对应 # def posti(x,y): # print(x,y) # posti(1,2) #2.关键字参数key=value # def guaj(x,y,z): # print(x,y,z) # # guaj(x=1,y=2,3) #错误,关键字实参不能必须放在位置参数后面 # # guaj(1,2,y=3) #错误,形参只能赋值一次 # guaj(1,2,z=4) #3.默认参数 # def morec(z=3,x,y): #错误,默认形参必须跟在位置参数后面,默认形参通常定义为不可变类型(一个系统中都是男性,就可以定义为默认形参,不可变) # f = 100 # def morec(x,y,z=f): # print(x,y,z) # f = 1000 # morec(1,2) #输出结果1 2 100,默认参数在函数定义阶段就已经赋值了,而且只能在定义阶段赋值一次 #4.可变长参数,*args表示把溢出的元素组成一个元组 # def chalens(x,y,*args): # print(x,y,args) # chalens(1,2,3,4,5,6) # def chalen(x,y,*args): # print(x,y,args) # # chalen(1,2,3) # chalen(*(1,2,3)) #----->*相当于拆分元组,把元祖当成位置参数传递给函数形参 #5.**kwargs,**会把溢出的实参,以字典的形式赋值给字典kwargs # def kwlens(x,y,**kwargs): # print(x,y,kwargs) # # # kwlens(1,2,a=3,b=5) # kwlens(1,2,**{"a":3,"b":4}) #--->**拆分为字典,把字典当成关键字参数传递给函数的形参 #命名关键字参数,*后定义的 # def foo(name,age,*,sex="male",height): # print(name) # print(age) # print(height) # # foo('andy',18,height=190)
浙公网安备 33010602011771号