python入门系列1---基础知识 以你之姓@ 2022-06-13 07:53 161阅读 0赞 作者:超哥 # 一、python简介和特性 # ## 1.1 python简介 ## python 官方如下介绍 python: > Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。 > > Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。 ## 1.2 python 发展简史 ## ### 1.2.1 python 产生的背景 ### Python的作者,Guido von Rossum(吉多·范罗苏姆),荷兰人。1982年,Guido从阿姆斯特丹大学(University of Amsterdam)获得了数学和计算机硕士学位。然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣。用他的话说,尽管拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的活儿。 ![975718.jpg][] Guido希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。ABC语言让Guido看到希望。 ABC 语言尽管已经具备了良好的可读性和易用性,ABC语言最终没有流行起来。在当时,ABC语言编译器需要比较高配置的电脑才能运行。而这些电脑的使用者通常精通计算机,他们更多考虑程序的效率,而非它的学习难度。除了硬件上的困难外,ABC语言的设计也存在一些其他致命的问题:**可拓展性差**、**不能直接进行IO**、**过度革新**、**传播困难** 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译/解释器。Python来自Guido所挚爱的电视剧Monty Python’s Flying Circus (BBC1960-1970年代播放的室内情景幽默剧,以当时的英国生活为素材)。他希望这个新的叫做Python的语言,能实现他的理念(一种C和shell之间,功能全面,易学易用,可拓展的语言)。Guido作为一个语言设计爱好者,已经有过设计语言的(不很成功)的尝试。 ### 1.2.2 python 的诞生 ### 1. 1991年,第一个Python编译器(同时也是解释器)诞生。它是用C语言实现的,并能够调用C库(.so文件)。从一出生,Python已经具有了:类(class),函数(function),异常处理(exception),包括表(list)和词典(dictionary)在内的核心数据类型,以及模块(module)为基础的拓展系统。 2. Python语法很多来自C,但又受到ABC语言的强烈影响。来自ABC语言的一些规定直到今天还富有争议,比如强制缩进。但这些语法规定让Python容易读。另一方面,Python聪明的选择服从一些惯例,特别是C语言的惯例,比如回归等号赋值。Guido认为,如果“常识”上确立的东西,没有必要过度纠结。 3. 最初的Python完全由Guido本人开发。Python得到Guido同事的欢迎。他们迅速的反馈使用意见,并参与到Python的改进。Guido和一些同事构成Python的核心团队。他们将自己大部分的业余时间用于hack Python。随后,Python拓展到研究所之外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程序员可以花更多的时间用于思考程序的逻辑,而不是具体的实现细节。这一特征吸引了广大的程序员。Python开始流行。 ### 1.2.3python 在语言排行榜中的位置 ### [参考][Link 1] ![91442771.jpg][] ![75624712.jpg][] ![6209576.jpg][] ![17829625.jpg][] ## 1.3 python 特性 ## 1. **易于学习**:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。 2. **易于阅读**:Python代码定义的更清晰。 3. **易于维护**:Python的成功在于它的源代码是相当容易维护的。 4. **一个广泛的标准库**:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。 5. **互动模式**:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。 6. **可移植**:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。 7. **可扩展**:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。 8. **数据库**:Python提供所有主要的商业数据库的接口。 9. **GUI编程**:Python支持GUI可以创建和移植到许多系统调用。 10. **可嵌入**: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得”脚本化”的能力。 ## 1.4 python 应用场景 ## 1. **web开发:** 基于python产生了许多优秀的web框架,像django、web.py。许许多多伟大的开源社区的程序员为它们贡献了诸多的开源库,使得开发起来十分便捷。 2. **爬虫开发:** 实际上这个只是一个小小的应用,基于`python`的`http`库有很多,比如常见的`httplib`,`urllib2`,`requests`等, 都很好的封装了`http`协议中的`post,get`等方法,也很方便的能够模拟浏览器去实现自己想要的功能,并且,对网页的解析也有诸多工具可以使用,如`beautifulsoup`等。 3. **科学计算:** `python`在科学计算领域也应用越来越广,如物理学领域,各种实验数据的处理以及相关实验模拟等,[机器学习][Link 2]领域也产生了诸多的开源库,如`sklearn`,里面集成了机器学习领域常见的[算法][Link 3],接口良好,文档丰富,也有最近十分火热的`Deep Learning`的开源库,如`theano`。 4. **服务器后端:** 高性能不是说python执行有多快,其实python还是比较慢的,但是在开发高并发,高吞吐率的服务器的时候,还是具有自己独特的优势。 5. **开发图形界面程序:** 使用一些著名的库,也可以很方便的开发图形界面程序 # 二、搭建开发环境 # python 几乎支持在所有的操作系统上搭建开发环境。 ## 2.1 windows 开发环境搭建 ## 1. 下载 python 安装包。[下载地址][Link 4] ![595719142d6c3.png][] 2. 双击安装包开始安装。 ![95334989.jpg][] ![67628800.jpg][] 3. 测试是否安装成功:打开命令行工具,输入 python.如下显示表示安装成功。![33765834.jpg][] ## 2.2 linux (unbuntu)开发环境搭建 ## linux 系统一般默认会安装了 python2.x 的版本。如果需要安装 python3.x的版本,需要自行安装。 sudo apt-get install python3 安装成功之后在终端输入:`python3` 测试是否安装成功 ## 2.3 macOS 开发环境搭建 ## macOS默认也安装了 python2.x 版本。使用 homebrew 安装最新版本(首先你应该安装了 homewbrew) brew install python3 安装成功之后在终端输入:`python3` 测试是否安装成功。 # 三、运行 python 代码 # 有3种办法运行 `python` 代码: 1. 使用 python 交互式解析器`(Python Interpreter)`直接运行 python 代码 ![95438552.jpg][] ![76286710.jpg][] 2. 使用 python(window)或 python3(mac/linux)运行 `.py` 文件。 Hello.py 文件种的内容 ![69562061.jpg][] 在终端,把当前目录切换到`Hello.py`所在的目录,然后输入`python3 Hello.py` ![90200643.jpg][] 3. 使用 IDE(例如:pycharm) 直接运行 `.py` 文件。![62846794.jpg][] 总结: 1. 使用交互式编译器好处是立即看到结果,缺点是代码没有办法保存。一般用临时测试一些代码是时候用。实际开发几乎不用 2. 使用文本编辑器编辑 `.py` 用在小型项目问题不大,但是大型项目对文件的管理就比较差。而且一般的文本编辑器代码联想和提示功能都比较弱或者没有。 3. IDE对文件的管理、代码联想功能都比较好。但是不建议初学者使用。 # 四、编码规范 # ## 缩进 ## **python 不使用 `{}` 来组织代码,完全依靠缩进,所以缩进的格式非常重要。** 使用4个空格来缩进,不要使用 `tab` ,更不能 `tab` 和 空格混用。 使用空格的时候永远使用4个空格,不能使用其他数量的空格,否则语法错误。 建议把开发工具的`tab`改成4个空格。 sublime 用如下方式设置:另外`pycharm`默认已经用4个空格替换`tab` ![72191093.jpg][] ## 分号 ## `python`不严格要求使用分号( `;`)。 理论上应该每行放一句代码。每行代码之后可以添加 分号`;` 也可以不添加 分号`;` 尽量不要多句代码放在一行,如果放在一行,则需要添加分号把他们隔开。 ## 命名 ## 1. 使用有意义的,英文单词或词组,绝对不要使用汉语拼音 2. package/module 名中不要出现 `-` 3. python 大小写敏感。 a 和 A 是完全不同的。 4. 各种类型的命名规范: <table> <thead> <tr> <th>Type</th> <th>Public</th> <th>Internal</th> </tr> </thead> <tbody> <tr> <td>Modules</td> <td><code>lower_with_under</code></td> <td><code>_lower_with_under</code></td> </tr> <tr> <td>Packages</td> <td><code>lower_with_under</code></td> <td></td> </tr> <tr> <td>Classes</td> <td><code>CapWords</code></td> <td><code>_CapWords</code></td> </tr> <tr> <td>Exceptions</td> <td><code>CapWords</code></td> <td></td> </tr> <tr> <td>Functions</td> <td><code>lower_with_under()</code></td> <td><code>_lower_with_under()</code></td> </tr> <tr> <td>Global/Class Constants</td> <td><code>CAPS_WITH_UNDER</code></td> <td><code>_CAPS_WITH_UNDER</code></td> </tr> <tr> <td>Global/Class Variables</td> <td><code>lower_with_under</code></td> <td><code>_lower_with_under</code></td> </tr> <tr> <td>Instance Variables</td> <td><code>lower_with_under</code></td> <td><code>_lower_with_under</code> (protected) or <code>__lower_with_under</code> (private)</td> </tr> <tr> <td>Method Names</td> <td><code>lower_with_under()</code></td> <td><code>_lower_with_under()</code> (protected) or <code>__lower_with_under()</code> (private)</td> </tr> <tr> <td>Function/Method Parameters</td> <td><code>lower_with_under</code></td> <td></td> </tr> <tr> <td>Local Variables</td> <td><code>llower_with_under</code></td> <td></td> </tr> </tbody> </table> # 五、变量和赋值 # 变量的概念和在数学中的变量的概念一样的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。 在 python 中变量的声明与其他语言有显著的差别。 在 python 中,使用变量一定要先给变量赋值,不需要专门去声明。如果是第一次赋值则会在内存中创建一个对象,如果不是第一次则会使用已经创建过的。 a = 10 # 第一次使用 a,所以会自动创建变量a,并把它的赋值为10 print(a) # 10 a = 20 # 第二次使用 a, 所以不会再创建变量 a,而是使用前面创建的变量 a,然后赋值为20 print(a) # 20 如果是其他语言比如 java 中,则需要先声明变量,然后赋值。 int a = 10; //Java 中的声明变量和赋值 所以,python 中各种代码相比其他语言就是精简和优雅 爽 -------------------- python 的同一个变量,可以先存储数字,然后也可以再更改为其他类型。这是弱类型语言的典型特征。 a = 10 # 赋值为数字 print(a) a = 'abc你好' #赋值为字符串 print(a) ## 变量的命名 ## 1. 变量名必须是数字、字母(ascii 和 uncode 字符都可以,但是尽量避免使用中文)、下划线\_组成 2. 不能数字开头 3. 如果有多个单词组成,建议每个字母都用小写字母,且不同的单词用下划线连接 合法:`abc`、`a1`、`_hello`、`my_girl` 不合法:`1a`、`$a` ## 变量的内存模型 ## 虽然 `python` 的变量使用起来非常简单,但是理解变量的内存模型也是非常重要的。 看下面的代码: a = "abc" print(a) b = a a = "xyz" print(a) # abc print(b) # xyz * 第1行代码做了3件事情: 1. 在内存中创建了一个字符串`"abc"` 2. 在内容创建了一个变量,变量名为`a` 3. 字符串`"abc"`在内存中的地址赋值给变量 `a`。即可以理解为变量 `a` 指向了字符串 `"abc"` ![1538677.jpg][] * 第3行代码做了2件事情: 1. 创建一个变量,变量名是 `b` 2. 把 变量 `a` 的值赋给变量 `b`。因为 `a` 中是存储的字符串 `"abc"` 的内存地址,则变量 `b` 存储的也是字符串 `"abc"` 的内存地址。即变量 `b` 也指向了字符串 `"abc"` ![34914302.jpg][] * 第5行代码做了2件事情: 1. 在内存中创建了一个字符串`"xyz"` 2. 字符串`"xyz"`在内存中的地址赋值给变量 `b`。则 `b` 中的值被更换为字符串 `"xyz"` 的内存地址, `b` 与 字符串 `"abc"` 则再无关系。![19088744.jpg][] # 六、数据类型 # 计算机要处理的数据各种各样,每种数据的类型是不一样的,比如有的是数字,有的是字符串等。所以 python 把数据分成了多种类型。 但是有一点要注意:由于 python 是弱类型语言,变量存储的值的类型并不固定。所以 **不应该说变量的类型,而应该说变量的值的类型**。 ## 什么是字面常量? ## 一个字面常量(Literal Constants) 的例子是诸如`5` 、`1.23` 这样的数字或 `你好` 、`abc` 这样的文本。 这么称呼这一变量是因为它们是 字面上的 –你用的就是它字面意义上的值或是内容。数 字 `2` 总是表示它本身而非其他含义–它是一个 常量,因为它的值不能被改变。 因此,所有的这些都被称作字面常量。 ## 整数 ## python 可以精确的处理任意长度的整数(也包括负整数)。 a = 200000000000000000000000000000000000000000000000000000 print(a) 在计算机中经常用到`2进制`、`8进制`、`10进制`、`16进制` 类型的数据,python也支持这样的字面量数据。 a = 100 # 十进制的100. print(a) b = 0b100 # 用 0b 开头表示二进制数据 print(b) c = 0o100 # 用 0o 开头表示八进制数据 print(c) d = 0x100 # 用 0x 开头表示十六进制的数据 print(d) 输出结果总是使用10进制形式: 100 4 64 256 ## 浮点数 ## 计算机中的浮点数就是我们数学中的小数。 浮点数可以用数学写法,如`1.23`,`3.14`,`-9.01`,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,`1.23x109`就是`1.23e9`,或者`12.3e8`,`0.000012`可以写成`1.2e-5`等等。 注意: 整数和浮点数在计算机中的存储方式是不一样的。整数永远可以精确的表示,而大部分的浮点数是近似表示。 ## 字符串 ## 在 python 中,用 一对双引号 `""` 或 一对单引号 `''` 括起来的单个或多个字符就是字符串 。 有些字符没有办法直接写在 单引号或者双引号中,比如回车、换行、制表符等。这时候需要借助转义字符来。 `\` 是转义字符。(几乎在所有的编程语言中都是它) ## <table> <thead> <tr> <th>转义字符串</th> <th>含义</th> </tr> </thead> <tbody> <tr> <td>\n</td> <td>换行</td> </tr> <tr> <td>\’</td> <td>单引号</td> </tr> <tr> <td>\”</td> <td>双引号</td> </tr> <tr> <td>\</td> <td>\</td> </tr> <tr> <td>\t</td> <td>制表符</td> </tr> <tr> <td>\r</td> <td>回车</td> </tr> <tr> <td>\b</td> <td>退格(back)</td> </tr> </tbody> </table> ## 如果不想让字符串中的转义字符起作用,则可以在字符串前面添加 `r` 来表示 a = r'abc\nx\tyz' print(a) print("------") b = 'abc\nx\tyz' print(b) ![6313685.jpg][] -------------------- 如果一个字符串内有多行数据,又不想写过多的 `\n` 则可以使用 3 对单引号或双引号来表示。 a = '''hello world 哈哈哈哈''' print(a) b = """hello world 哈哈哈哈 """ print(b) ![13622711.jpg][] -------------------- 在 python 中的字符串是不可变的。 这意味着一旦你创造了一串字符串,你就不能再改变它。尽管这看起来像是一件坏事,但实 际上并非如此。 ## 布尔值 ## 布尔值表示一种逻辑值。在 `python` 中只有 2 个字面量布尔值 `True` 和 `False` 。 可以使用字面量布尔值,也可以通过一定的计算得到布尔值。 a = True b = False c = 3 > 4 print(a) print(b) print(c) ![17081400.jpg][] [975718.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/975718.jpg [Link 1]: https://www.tiobe.com/tiobe-index/ [91442771.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/91442771.jpg [75624712.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/75624712.jpg [6209576.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/6209576.jpg [17829625.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/17829625.jpg [Link 2]: http://www.dataguru.cn/article-4063-1.html?union_site=innerlink [Link 3]: http://www.dataguru.cn/article-5747-1.html?union_site=innerlink [Link 4]: https://www.python.org/downloads/ [595719142d6c3.png]: https://ooo.0o0.ooo/2017/07/01/595719142d6c3.png [95334989.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/95334989.jpg [67628800.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/67628800.jpg [33765834.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/33765834.jpg [95438552.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/95438552.jpg [76286710.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/76286710.jpg [69562061.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/69562061.jpg [90200643.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/90200643.jpg [62846794.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/62846794.jpg [72191093.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/72191093.jpg [1538677.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/1538677.jpg [34914302.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/34914302.jpg [19088744.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/19088744.jpg [6313685.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/6313685.jpg [13622711.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/13622711.jpg [17081400.jpg]: http://o7cqr8cfk.bkt.clouddn.com/17-7-1/17081400.jpg
还没有评论,来说两句吧...