鲜花网站建设教程江东seo做关键词优化
这一节总结点demo和常用知识点
目录
有关字符串格式化打印的
lambda匿名函数,,将匿名函数作为参数传入
文件读写
生成器
python的装饰器
简单的网站代码:
有关三元运算
推导式:
新浪面试题:
有关面向对象里面三种方法
有关字符串格式化打印的
name="asas"
age=12
print(f"我是:{name},年龄:{age}") f-string
print("我是:",name,"年龄:",age)
print("我是:{},年龄:{}".format(name,age)) format
print("我是:%s,年龄:%d"%(name,int(age))) 格式化print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
把函数当做参数传给函数,,直接形参就随便一个变量名就行,只要你想,他就可以代表一个函数,
记住对于python的函数参数名来说,他可以代表任何的数据类型,只是看你用啥往进传就可以,
def fun(a) -> 我这个a可以代表函数,字符串,列表 ,元组啥的 字典的话就得**a了,,不过写a的话字典就能传进去一组kv
def func(name,**age):print(name,age)def funs(grade,fx):print(grade)fx(12,李四='aa',sad=12)print(type(fx))funs(5,func)
lambda匿名函数,,将匿名函数作为参数传入
格式是: lambda 参数 : 函数体 (只能写一行)
def test_func(com):print(f"结果是:{com(1,2)}")#lambda匿名函数,,将匿名函数作为参数传入
test_func(lambda x,y:x+y)
文件读写
fd=open("D:/xxt.txt","r",encoding="UTF-8")#read 里面可以指定具体读多少字节
#读方法每次读都是从上个位置后面开始,调用一次读完,再调用
#指针在最后面,读的话就没东西了
print(f"读取全部内容:{fd.read()}")
print(f"读取全部内容:{fd.read()}")
print(f"读取全部内容:{fd.readlines()}")
#readlines读取文件全部行,能读到换行符,并封装到列表中
#readline 一次读一行
for line in fd:print(f"读取一行内容:{fd.readline()}")fd.close()#关闭文件with open("D:/xxt.txt","r",encoding="UTF-8") as f: #自带close
做一个小案例,。。要不说python方便 ,案例是打开文件统计一下里面Python3的个数
方法1:
with open("D:/xxt.txt","r",encoding="UTF-8") as f: #自带closenum=f.read()print("Python3的数量是:",num.count("Python3"))
方法2:
strip()去除开头和结尾的空格和换行符
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
ans=0
with open("D:/xxt.txt","r",encoding="UTF-8") as f: #自带closefor line in f:ls=line.strip() #去除开头尾巴空格 换行符print(ls)words=ls.split(" ") #以空格分割for word in words:if word=="Python3":ans+=1
print(ans)
写的操作的话就是write,w文件不存在就创建,存在清空重新写,a直接给内容追加
生成器
有yield的就是生成器,你去调用的话这个函数不会运行的,需要你next和for去用
用好yield可以很好的节省内存,做优化;用多少拿多少
生成器函数:yield 函数里的东西 一点点返还给你,碰到yield就暂停了
next(生成器对象)会从上次yield位置继续往下走
#生成器函数
def func():print("进来了")yield 11 #返回一个11 用next接受#走到yield 冻结了,要往下执行,需要继续调nextprint("又来了")yield 22print("最后一次")yield 33gen=func()v1=next(gen)
print(v1)v2=next(gen)
print(v2)v3=next(gen)
print(v3)
#生成器函数
def func():print("进来了")yield 11 yield 22print("最后一次")yield 33gen=func()
for it in gen:print(it)def create_big_num(maxnum):start=0while True:yield startstart+=1if start==maxnum:returnobj=create_big_num(10)
for its in obj:print(its)
python的装饰器
@...语法糖
装饰器就是拓展一个函数的功能,info就像一个参数被outer的func接收,进到outer里面,有个inner函数,开始执行inner,而res接收func,其实就是接收info的执行结果,所以里面info这个函数被调用,最后返回info结果,返回inner结果。一层套一层这样,outer就是这个装饰器,inner函数是具体内容实现,内部调用info函数
结果就是before,info,after
def outer(func):def inner():print("before")res=func()print("after")return resreturn inner@outer
def info():print("info")info()
没有@这个语法糖,上面调用 的话就得这么写
ans=outer(info)
ans()
其实就等于 逻辑上的,ans=inner
换句话说,其实使用装饰器的是,默认传入的参数就是被装饰的函数
#语法糖
@xxx() #@函数名
def ss():pass调用ss()
python内部会自动执行 xxx(ss),执行完之后把结果赋值给ss
等于ss=xxx(ss)
xxx就充当了装饰器,形成了闭包
提一嘴有关py的作用域,全局变量在局部里面,只能去读,或者修改内部元素(也是能是可变的类型,,比如列表等等),,注意是不能赋值的,。如果要赋值,需要在局部里面给变量标识globol,标志他是全局的变量
局部和全局同名,局部内部操作,优先是局部,,如果找不到才会往上一级去找
lis=[1,2,3,4,"你好"]
print(lis)
def sis():lis=[5,5,5,"sas"]lis[0]="jk"print(lis)lis.append("再见")print(lis)sis()
print(lis)
只能修改,可变类型的
lis=[1,2,3,4,"你好"]
print(lis)
def sis():lis[0]="jk"print(lis)lis.append("再见")print(lis)#下面两个报错#lis=[5,5,5]#print(lis)sis()
print(lis)
lis={1,2}
print(lis)
def sis():lis.add("sas")print(lis)#下面两个报错#lis=[5,5,5]#print(lis)sis()
print(lis)
简单的网站代码:
from flask import Flaskapp=Flask(__name__)def index():return "首页"def info():return "中心"app.add_url_rule("/index/",view_func=index)
app.add_url_rule("/info/",view_func=info)app.run()
运行:
有关三元运算
三元运算和lambda可以实现简单的函数
lambda只能写一行,三元运算可以进行简单的条件判断
三元运算 # true if 条件 else falsefunc=lambda x: "大了" if x>66 else "小了"print(func(1))print(func(99))
内置排序
推导式:
列表,字典,集合都可以,直接就生成了对应数据
而对于元组用推导式,生成的是生成器对象,,需要用next或者for去使用
num_list=[i for i in range(10) if i>6]
num_list=[(i,i) for i in range(10) if i>6]
print(num_list)num_set={i if i%2 else -i for i in range(10)}
print(num_set)
exp:
dis={'opi':"光头强",'is':"熊大",'lp':"熊二",'498':"美羊羊"}res=sorted(dis.items(),key=lambda x:x[0])
print(res)
data="%".join(["{}={}".format(key,value) for key,value in res])
print(data)
新浪面试题:
dip=[lambda x:x+i for i in range(10)]#i变成9最后
v1=dip[0](100) #执行到这 才去lambda x+i这块执行函数
v2=dip[3](100)
print(v1,v2) #都是109
包文件夹都会有个__init__.py这个主要就是说明这个包是干嘛的,,py2里面必须有,py3里面可以不需要,,建议弄包的时候都创建这么个文件
对于导入包来说,想要导入任意的包怎么办?
#添加到python的内置路径位置
import sys
sys.path.append("想要添加的路径")
注意:写模块名称的时候不能和内置模块重名
有关面向对象里面三种方法
类方法(传类),绑定/实例方法(传对象),静态方法(不用传类或者对象去调用)
其实对于三种方法来说,类和对象都是可以去调用的,只不过依情况而定
一般而言,用对象去调用绑定方法;类去调用类方法;类去调用静态方法