19年暑假,留校在陈灯老师实验室里做一点openopse的工作,需要pyhton语言基础,于是一边学习一边上手。也是第一次写博客,作为自己的学习总结和记录。
PS:一个非常完整非常详细的python学习网站:http://www.pythondoc.com/pythontutorial3/appetite.html
一.环境搭建
IDLE用的是pycharm;python3.6,pycharm的一个好处就是导包很方便直接在pycharm中搜索添加即可。 由于使用的家里的旧电脑,还是09年买的,CPU32位,导致出现了很多意料外的麻烦,各种不兼容各种错误,总之翻来覆去总算是搭建得差不多了。
(1) 在搭建环境时,一个坑就是TensorFlow包不支持32位,浪费我很多时间,但还好并不是很影响工作,因为即使导包成功以一般电脑的配置也跑不起来openopse的代码。
(2)在下载安装python3.6的时候,由于随意安装,下载了好几个python,到后来pycharm中找文件时总找不到,这也是提了个醒,下载时要注意下载位置。
(3)在导包时,网上多是pip导包,按照网上的教程却无法解决。后来才发现别人用的都是Linux,我用的Windows。以后换新电脑一定要装Linux,熟悉命令行的操作。
二.python语言的特性
之前学过C和C++,学习python的时候轻松很多。一边对比着C的联系来理解,一边找跟C的区别,大致一个星期左右就可以上手了。
1.python的缩进
不同于其他语言,python使用缩进来表示程序块 ,而不是用传统的大括号,而且往往一般以4个空格缩进表示一层。或者用begin...end这样的字符来表示。(begin...end还没怎么用过,等以后再来填坑)。所以if语句,for语句等语句下面的函数体应当适当缩进。
PS:在pycharm中有时会出现某代码下面出现红色小波浪线,这往往是说明缩进没有对齐,可能就是那么一个空格的问题。另外,据说在换行时“只用4个空格表示缩进”或者“只用一个Tab表示缩进”都是可行的,但是如果“混着使用上述两者”就有可能报一些莫名其妙的错,而且从代码风格习惯上讲,也算是一个“陋习”。推荐是“仅使用4个空格表示缩进”。
2.python的序列
序列是python重要的语言特性之一,序列可以做运算(如:加法,乘法),可以切片,支持序列的复制和索引(可以负索引)。
3.python对各种编程模式的支持
python是一种面向对象的编程语言,对比与C++而言,python并不追求彻底完美的面向对象语法,但对于类,对象,继承,私有,公有,多态,重载等都支持得很好,python的核心思想可以说是“万物皆对象”。但python并不强制要求我们用面向对象的方法来编程,它对面向过程的方法甚至函数式的编程方式的支持程度都很好。
4.python的动态性
(1)语义的动态性
就比如说,在C++中,int a = 1;然后a = "china"会报错,"字符串不能被赋值给一个int 类型“。但是在pyhton中
a = 1
a = "china"
是一点问题都没有的,这就是语义的动态性的一种体现,python中并不像C++中是声明一个int型的变量,再给这个变量赋值而是更偏向于理解为:有一个数值是1,把a与该数值“绑定”,或者说,让a指向该数值,给这个数值1取了个名字叫a,因此后面的a = "china",可以理解为:把原来的a“松绑”,并与字符串china绑定。更python一点的说法是:数值1是一个int型的对象(这里注意:在python中,int并不像C++中是一个内置的所谓"类型“ ,而是一个int类,有着相应的属性和方法),这个对象的对象名为a,而字符串"china"也是一个对象,一个str类的对象,后来把str类对象china改名为a。
(2)语句的动态
所谓语句的动态,是指python的代码可以作为参数传给python程序运行。
如:sum = 2+3
print("sum is : %s",sum)
(3)对象属性的动态
对象属性的动态是指可以动态的新增一个对象的属性、删除一个属性、使用getattr()得到一个对象的属性、使用setattr()来修改设置对象的新属性、使用delattr()删除对象的属性。
PS:需要注意的是,这里的修改设置、删除都是对某一个对象进行操作,而非对对象背后的类进行操作,被操作对象新增或删改一个属性,其对应的抽象的类并不改变。
(4)基类的动态改变
基类的动态改变是指,可以动态地改变一个类的继承基类、增加继承的基类,使一个类拥有新的基类方法,而且不用改变雨来的基类的方法。
5.支持异常处理
支持异常处理是python的一个重要特性,能够对异常情况进行“捕捉”与相应处理。
6.python自省
动态的,及时的对现有代码进行检查,知道有哪些对象、包、函数可以调用以及如何用等,这使得python编程的体验非常好。
7.匿名函数、嵌套函数等函数特性
8.支持流程控制和循环等
与C++不同,python新增了好几个语句如while...True ; if...elif...else; for....else等
三、程序执行的原理
1.三大件
CPU:执行程序,进行计算,运算的地方
内存:临时存放数据(断电数据会消失),速度快
硬盘:永久存放数据,速度慢
2.程序执行原理
(1)程序在运行前,保存在硬盘中。
(2)当要运行一个程序时:
操作系统会首先让CPU把程序复制到内存中, CPU执行内存中的程序代码
3.python程序执行原理
(1)同上
(2)当要运行一个程序时:
1.操作系统会首先让CPU把python解释器的程序复制到内存中。
2.pyhton解释器根据语法规则,从上到下,让CPU翻译python程序中的代码
3.CPU执行翻译完成的代码