python的安装
windows下安装
1.下载安装包
https://www.python.org/downloads/
2.执行可执行程序,直接下一步即可:
默认安装路径:C:\\python36
3.配置环境变量(如果在安装时勾选配置环境变量,此步骤则不需要了)
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到变量名为Path的一行,双击】 --> 【Python安装目录追加到变值值中,用;分割】
如:原来的值;C:\\python36,切记前面有分号
windows下更新python
卸载重装即可
linux下安装python3
linux中默认自带的python,以ubuntu18.04的系统为例,默认自带的Python版本为python2.7,可以再次安装python3的版本,通过命令:
# 安装python3
sudo apt-get install python3
# 安装pip3
sudo apt-get install python3-pip
初始python
第一个python程序
在linux下的/home/目录下创建文件hello.py
# 打印hello world
print("hello world")
执行文件:python3 hello.py
输出结果:hello world
"""
上一步执行 python3 hello.py时,明确的指出 hello.py 脚本由python3解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器。
"""
#!/usr/bin/env python3
print("hello world")
如此一来,执行./hello.py文件即可
ps:如果在执行的时候报没有权限的错误,请记得给文件进行赋权,chmod 775 hello.py
程序除了可以写在文件中,还可以使用Python自带的交互解释器执行:
python的注释
单行注释:以 # 开头,# 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用
# 这是一个单行注释
为了保证代码的可读性,# 后面建议先添加一个空格,然后再编写相应的说明文字
###############################
多行注释:
如果希望编写的 注释信息很多,一行无法显示,就可以使用多行注释
要在 Python 程序中使用多行注释,可以用 一对 连续的 三个 引号(单引号和双引号都可以)
"""
这是一个多行注释
"""
什么时候需要使用注释:
- 注释不是越多越好,对于一目了然的代码,可以不用添加注释
- 对于复杂的操作,应该在操作开始前写上若干行注释
- 对于不是一目了然的代码,应在其行尾添加注释(为了提高可读性,注释应该至少离开代码 2 个空格)
- 绝不要描述代码,假设阅读代码的人比你更懂 Python,他只是不知道你的代码要做什么
PEP8规范
- Python 官方提供有一系列 PEP(Python Enhancement Proposals) 文档
- 其中第 8 篇文档专门针对 Python 的代码格式 给出了建议,也就是俗称的 PEP 8
- 文档地址:https://www.python.org/dev/peps/pep-0008/
- 谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
编码
python2中的默认编码是ASCII,而python3中的默认编码是UNICODE,如果使用python2并且代码中含有中文的话,则需要在文件的开头指定编码方式:
在文件开头加入:#_*_coding:utf-8_*_
或者:# coding=utf-8
python解释器在加载.py文件时,会对文件进行编码(python2默认使用ascii编码,python3默认使用unicode编码)
ASCII了解
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
初始sys模块
Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:
- Python内部提供的模块
- 业内开源的模块
- 程序员自己开发的模块
Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行python脚本时传入的参数,其中sys.argv[0]表示当前执行的文件名,sys.argv[1]以后的参数表示传入的参数。
例如:存在文件hello.py,文件内容如下:
#!/usr/bin/env python3
import sys
print(sys.argv)
执行脚本结果如下:
变量
变量的定义
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = "zhangsan"
上述代码声明了一个变量,变量名为: name,变量name的值为:"zhangsan"
变量的作用:昵称,其代指内存里某个地址中保存的内容
变量的命名规则
- 标示符可以由 字母、下划线 和 数字 组成
- 不能以数字开头
- 不能与关键字重名
python的关键字有:[\'and\', \'as\', \'assert\', \'break\', \'class\', \'continue\', \'def\', \'del\', \'elif\', \'else\', \'except\', \'exec\', \'finally\', \'for\', \'from\', \'global\', \'if\', \'import\', \'in\', \'is\', \'lambda\', \'not\', \'or\', \'pass\', \'print\', \'raise\', \'return\', \'try\', \'while\', \'with\', \'yield\']
注:python中的变量名是区分大小写的,name和Name不是一个变量
变量的命名规范
- 每个单词都使用小写字母
- 多个单词之间使用_下划线,例如:
- first_name,last_name等
用户输入
- python3:
- input:用户输入任何值,都存成字符串类型
- python2:
- input:用户输入什么类型,就存成什么类型
- raw_input:等于python3的input
#!/usr/bin/env python
# -*-coding:utf-8-*-
"""
@author:fyh
@time:2019/6/6
"""
name = input("请输入用户的姓名:")
age = input("请输入用户的年龄:")
# 打印用户的姓名和年龄
print(name, type(name))
print(age, type(age))
.pyc是啥
Python是一门解释型语言?
我初学Python时,听到的关于Python的第一句话就是,Python是一门解释型语言,我就这样一直相信下去,直到发现了.pyc文件的存在。如果是解释型语言,那么生成的.pyc文件是什么呢?c应该是compiled的缩写才对啊!
为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。
解释型语言和编译型语言
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。
解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。
通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。
此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。
python到底是什么类型语言
其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。
当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:
javac hello.java
java hello
只是我们在用Eclipse之类的IDE时,将这两步给融合成了一步而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。
简述Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。