目录:
- python 介绍
- 制表符
- 面向对象
- ✍️规范
- 模块
- pass
- re模块中match和search的区别
- type/dir/help
- 异常处理
- range
- 矩阵
- 数据结构
- dict,{ }
- list,[ ]
- jupyter
- 函数式编程
- λ 表达式
- 函数理解,def()
- 可选参数
- 变量作用域
- 字符串操作
format { }
分割 split()
join 添加新字符
..
Python介绍
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言
![6655e5f3b837d18aff0b55e262389e1f.png](https://i-blog.csdnimg.cn/blog_migrate/01d5286e2066515ab6e5a1bac02e18af.jpeg)
设计者开发时的总的指导思想是:对于一个特定的问题,只要有一种最好的方法来解决就该好了
Python 的设计哲学是优雅、明确、简单
Python 的执行:
![63eb095ae1e553da900e92e1f573ab2d.png](https://i-blog.csdnimg.cn/blog_migrate/a6ef8f87a429729d40f388f77174da7e.jpeg)
制表符[1]
![2ec96f8f89c462eeeba65d3b29b79811.png](https://i-blog.csdnimg.cn/blog_migrate/4b3e71975b437ba4c9d9d8f790532c25.jpeg)
以乘法口诀为例:
for i in range(1,10):
for j in range(1,i+1):
print('{1}*{0}={2}'.format(i,j,i*j),end='t')
print()
![075c043a46f5a5cbb7bd2c75d86d8d12.png](https://i-blog.csdnimg.cn/blog_migrate/7fac29af65832f3b83cfe8dd25049652.jpeg)
for i in range(1,10):
for k in range(1,i):
print('.',end = 't')
for j in range(i,10):
print('{}*{}={}'.format(i,j,i*j),end = 't')
print()
![8f74c4b807c851ae09095032f6114d28.png](https://i-blog.csdnimg.cn/blog_migrate/5b6286ca86013a83d13c94b00dda19e5.jpeg)
参考:Python ——遍历列表(打印九九乘法表)
%:余数
// :得到商
![5b2081a2835d39a8b704d90a044b0984.png](https://i-blog.csdnimg.cn/blog_migrate/ea3aa0343cc83e4dd299595907d096b7.jpeg)
面向对象
简单的说,类是对象的蓝图和模板,而对象是类的实例。这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的东西。在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。
当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个叫做“类”的东西。
静态特征 + 动态特征 = 类
![39c032b221b5bcb9cd9b50f769a283ef.png](https://i-blog.csdnimg.cn/blog_migrate/f0564aa85fa91d9aa4ba5457cb72b5d0.jpeg)
创建类和对象:
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def study(self, course_name):
print('{}正在学习{}....'.format(self.name, course_name))
def watch_movie(self):
if self.age < 18:
print('{}正在看《熊出没》'.format(self.name))
else:
print('{}正在看《泰坦尼克号》'.format(self.name))
def main():
stu1 = Student('小明', 23)
stu1.study('python课程')
stu1.watch_movie()
if __name__ == '__main__':
main()
小明正在学习python课程....
小明正在看《泰坦尼克号》
关于私有化参见:
咪咪怪:python小课堂21 - 面向对象(三)zhuanlan.zhihu.com![ecd541cfeb0c9b809ccafcf8e68b27ca.png](https://i-blog.csdnimg.cn/blog_migrate/16af83ea3a504ae1b600cd33a21c4836.jpeg)
python 里面的单下划线与双下划线的区别(私有和保护)https://blog.csdn.net/liangpz521/article/details/8089723
面向对象的三大支柱:封装、继承和多态
关于封装:
我自己对封装的理解是“隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口”。我们在类中定义的方法其实就是把数据和对数据的操作封装起来了,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以执行方法中的代码,也就是说我们只需要知道方法的名字和传入的参数(方法的外部视图),而不需要知道方法内部的实现细节(方法的内部视图)。
书写规范
文档字符串
为了阅读方便,方便函数调用者使用。
文档字符串用于解释函数的功能,记录所需的参数类型。
![05532085d6b0f44074430d123fa6fa23.png](https://i-blog.csdnimg.cn/blog_migrate/9f50e3bae9e7811a95198b10c48bbb65.jpeg)
模块[2]
- pass的作用
Python pass是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句。
- re模块中match和search的区别
match() 函数只在字符串的开始位置尝试匹配正则表达式,也就是只报告从位置 0 开始的匹配情况,而 search() 函数是扫描整个字符串来查找匹配。
如果想要搜索整个字符串来寻找匹配,应当用 search()。
- type得到调用对象的类型
dir 得到对象的所有属性和方法
help()则查看具体的方法说明,q键退出
![e7a5ce1c0b084ae640d9476e884f6de2.png](https://i-blog.csdnimg.cn/blog_migrate/0a7f8b6ae54732baabc1cbab442b3728.jpeg)
help (np.BUFSIZE):
![7ee5b69521d3afd6cd633ad8daba132a.png](https://i-blog.csdnimg.cn/blog_migrate/a10895c749b084427f6b2ff0943b19de.jpeg)
- 异常处理(exception handling)
使用 try...except...
![1b5ef0db2f5521a8ef084761e0d931d9.png](https://i-blog.csdnimg.cn/blog_migrate/5f20a6901fa5b757fd5c2454e09151ca.jpeg)
如果你认为代码可能会报 告异常,可使用关键字 try 和 except 来捕获。
- range
range(101)
可以产生一个0到100的整数序列。range(1, 100)
可以产生一个1到99的整数序列。range(1, 100, 2)
可以产生一个1到99的奇数序列,其中的2是步长,即数值序列的增量。
Python矩阵表示
- 一种是matrix类
- 二维array
主要区别在于默认乘法的不同,array是对应相乘,matrix则与矩阵乘法相同
在实际中,大多数情况下,使用array方法
-------------
sum(),axis解读
axis=1时,阵列内部相加
![8fa229439b573bbe94827ac53ac639e6.png](https://i-blog.csdnimg.cn/blog_migrate/078697e2cb09d729b0ef011970dd314a.jpeg)
-------------
np reshape()解读:
在对数据集进行操作时,经常可看到np.array([....]).reshape(),什么意思呢?
看 :
![6137868c8f1b763b97a058a5d8fb44b8.png](https://i-blog.csdnimg.cn/blog_migrate/1b0c6a6893b0c079f655bead2c4dba6c.jpeg)
可以看出,reshape(3,2)表示将数据改写为3行2列形式;reshape(-1,1)则表示改写为1列,-1可以不用管
python 基本数据结构(容器):
dict,{ }
![1f4b7bc56dfddc606cbc9cb7973573e2.png](https://i-blog.csdnimg.cn/blog_migrate/3672d36a57d9c8971a7254917afbe2f5.jpeg)
list,列表,[ ],可以将任何元素放在list里
![2af0828798dfdcb036681883b354197a.png](https://i-blog.csdnimg.cn/blog_migrate/f982cdf16cefde325efc3c8e6d561021.jpeg)
** pop 方法移除列表中的最后一个元素
** filter(function, iterable)
参数
function -- 判断函数。
iterable -- 可迭代对象。
def is_odd(n):
return n % 2 == 1
tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)
============================
[1, 3, 5, 7, 9]
**列表删除指定元素
a = [1, 2, 0, 3, 4, 0, 5, 0, 6]
for b in a:
if b == 0:
a.remove(b)
print(a)
[1, 2, 3, 4, 5, 6]
** append()添加元素:
array = [1,6,8,9]
array.append(4) #尾部插入
print(array)
# # 中间插入
# array.insert(2,0)
# print(array)
for i in range(3):
array.insert(2,0)
print(array)
ar = [2,400,'qew']
ar+array+ar
============================
[1, 6, 8, 9, 4]
[1, 6, 0, 0, 0, 8, 9, 4]
[2, 400, 'qew', 1, 6, 0, 0, 0, 8, 9, 4, 2, 400, 'qew']
![d82d4614f57a0d53e337dcc5e4719a36.png](https://i-blog.csdnimg.cn/blog_migrate/5e9729659cbaa528c3cbdeb042608ba6.jpeg)
tuple与list类似,( ),只是不能被修改
** enumerate() 函数,可以同时获取索引:
![821ac8d1a53bf0cc2e93b292e9de2c89.png](https://i-blog.csdnimg.cn/blog_migrate/2726f28d6883814080a2853ffb84f182.jpeg)
** 三种方法实现列表中元素大写
在方法1中,由于要遍历列表元素,同时要增大遍历的序号,故额外增加了i=0这一项
![9e1841a3d26a44ec2e1613100aaddd8b.png](https://i-blog.csdnimg.cn/blog_migrate/aec5d2aa07bc18e0d076d843dc153e62.jpeg)
jupyter:
![d943589d029b64d877dc571774d038eb.png](https://i-blog.csdnimg.cn/blog_migrate/fdde93c30e96b0a1e18f8a67f4741038.jpeg)
函数式编程:
- λ 表达式
![9cb8e9eb05eb88e42b381c06b0bf0ec6.png](https://i-blog.csdnimg.cn/blog_migrate/18a338f78a7e0e7654b376675e94d089.jpeg)
函数理解
- 可选参数:
函数定义里面,必选参数必须位于可选参 数之前。
![9daa4c1e0a763211add83a62ec53fe34.png](https://i-blog.csdnimg.cn/blog_migrate/8e6b92655213725857030de72ac07097.jpeg)
- 变量作用域
变量有一个很重要的属性,作用域(scope)。定义变量时,其作用域指的是哪部分 程序可以对其进行读写。读取一个变量意味着获取它的值,写变量意味着修改它的值。 变量的作用域由其定义在程序中所处的位置决定。
可以在程序的任何地方对全局变量进行写操作,但是在局部作用域中需稍加注意: 必须明确使用 global 关键字,并在其后写上希望修改的变量。Python 要求这样做,是 为了确保在函数内部定义变量 x 时,不会意外变更之前在函数外部定义的变量的值。在函数内部对全局变量进行写操作的示例如下:
![4fa943c9955a81d57cff99061899c73f.png](https://i-blog.csdnimg.cn/blog_migrate/6cbb2a02874cd76ba8495dcb3dc84898.jpeg)
字符串操作
![9852a8b96ab094758cf6c3a2e572b3b7.png](https://i-blog.csdnimg.cn/blog_migrate/9dbfa83d7dbd50d0ed7013fc0bd99c87.jpeg)
- format
![39b5856d69ce92ee525a14d5795930cf.png](https://i-blog.csdnimg.cn/blog_migrate/5bff9e56276ac4624eb978b15fc9c224.jpeg)
如果字符串跨越一行以上,可以使用三引号。如上
x = float(input('x = '))
if x>1:
y =3*x-5
elif x >= -1:
y = x+2
else:
y=5
print( 'f({:.3f}) = {:.0f} '.format(x, y)) #推荐这种
print('f(%.2f) = %.2f' % (x, y))
- 字符串分割:split()
输入‘http://www.baidu.com’,输出:'com.baidu.www'
address = 'www.baidu.com' # >>'com.baidu.www'
add_new = address.split('.')
add_new[-1]+'.'+add_new[1]+'.'+add_new[0]
![2228df56ad44b61a75a284478431d50a.png](https://i-blog.csdnimg.cn/blog_migrate/4f5cc1e746f78479012a6aae23dfff4b.jpeg)
- join()方法添加新字符
![2224d944fcb20c0785eb0bde2c8d983f.png](https://i-blog.csdnimg.cn/blog_migrate/432a8f5174e5be12bf8e74eabdaeb644.jpeg)
可使用 strip 方法去除字符串开头和末尾的空白字符:(注意,strip方法并不能修改原先的变量内容)
![3e862737b7b4e1be5be096bdc2ce17fd.png](https://i-blog.csdnimg.cn/blog_migrate/7e681781dc0060dfed69080853dc16bd.jpeg)
替换
![aec57a5e8b0cb08c375ac792ecfc0999.png](https://i-blog.csdnimg.cn/blog_migrate/2db10e6ada9a97f90bd1cecee692493a.jpeg)
参考
- ^Python转义字符 https://www.runoob.com/python/python-strings.html
- ^python模块详解 https://zhuanlan.zhihu.com/p/33913131