【编程】Python实战手记-2

欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


模块结构

模块化开发简单说就是不要把所有代码都放在一个文件里...所以就是怎么拆分代码的问题。

  • ./main.py。文件放在根目录,只用它调起其他文件代码。它应该尽可能简单,几行代码最好。
  • ./myModules。文件夹可以放置你自己编写的模块,当然也可以叫myUtilities或者myUtil或者什么别的。
  • ./myModules/__init__.py。这个空文件你值得拥有,否则myModules文件夹下的代码文件就不能被调用。
  • ./myModules/myClass.py。假如编写了myClass模块,代码包含class myCls:...
  • main.py中引入from myModules.myClass import myCls,然后myCls()就可以生成一个对象实例。
  • ./myModules/myFunc.py。假如里面只包含def myAdd(a,b):...,那么main.py中同样可以from myModules.myClass import myAdd然后myAdd(3,2)使用。
  • ./myModules/myData.py。假如里面只包含myKey=666,那么main.py中同样可以from myModules.myData import myKey然后print(myKey)就得到666。
【编程】Python实战手记-2_第1张图片

面向对象、类Class

面向对象编程就是面向Class编程,新文件上来就先是一行class xxx:

Python的class mycls:后面要先跟一行__init__(self):初始化方法:

【编程】Python实战手记-2_第2张图片

这样在main里面b=a()实例化之后就可以使用b.height就可以得到1000。同样可以直接使用b.add(100,200)得到300。

初始化函数写全的话是def __init__(self, *args, **kwargs):,args就是直接用数值的参数,例如mycls(1,2)的话args就是(1,2)。kwargs则是键值对参数,例如mycls(wid=100,hei=200)的话,kwargs就是{'wid': 100, 'hei': 200},就有kwargs["wid"]是100,kwargs["hei"]是200。

【编程】Python实战手记-2_第3张图片

如果两种参数混用会怎么样?各司其职。比如mycls(1,2,3,a=9,b=10)的话上面代码就输出(1, 2, 3){'a': 9, 'b': 10}

到底哪种参数格式好?建议使用键值对格式,虽然繁琐但含义很清楚,user(name="tom",age=13)明显比user("tom",13)容易理解。
键值对参数没有顺序限制,user(age=13,name="tom")也是对的,但user(13,"tom")就是错的。

类中的super()

如果mycls是从yourcls扩展出来的,该怎么办?

【编程】Python实战手记-2_第4张图片

这里yourcls有height属性,mycls没有。但是class mycls(yourcls):就表示我是从你扩展来的,你有的我都有。所以在main里面就可以mycls().height了,否则就会因为没有height而报错。

Pandas搜索和修改值

读取df=pd.read_csv("./src/a.csv"),得到二维表格Dataframe格式。
存储df.to_csv("./src/a.csv",index=False),这样不保存索引列,可以避免建立索引之后重复。

搜索数据中用户名"name"等于"tom"的一行,怎么操作?

搜索df_rows=df.loc[df['name'] == "tom"],得到dataframe格式。len(df_rows)>0检测非空,df_rows.iloc[0]获取第一行结果,df_rows["age"]获取所有"tom"的年龄如13,20,44
如果要找到所有叫tom或jerry的人则用df_rows=df.loc[df['name'].isin(["tom","jerry"])]

索引df.set_index("name",drop=True)。建立索引之后就可以使用df.loc["tom"]直接找到tom一行数据了。如果不drop的话那么就会有两列"name",有一列是复制出来做索引的,保存csv时候要index=False去除重复。

修改df.iloc[0,df.columns.get_loc(key)]=val,不能直接使用等号修改,比如df.iloc[3]["age"]=13是不行的,必须df_rows.iloc[0,df.columns.get_loc('age')]=13才行。如果建立过name索引的话,可以使用df.loc["tom","age"]=13修改。

<未完待续>


欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


每个人的智能新时代

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

你可能感兴趣的:(【编程】Python实战手记-2)