【编程】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。
面向对象、类Class
面向对象编程就是面向Class编程😁,新文件上来就先是一行class xxx:
Python的class mycls:
后面要先跟一行__init__(self):
初始化方法:
这样在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。
如果两种参数混用会怎么样?各司其职。比如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扩展出来的,该怎么办?
这里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