Python简介及其基本语法

1、Python简介

Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。其语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

2、Python 2.x 和 Python 3.x

(1)Python 2.x 和Python 3.x 语法上的区别:
1)Python3.x开始不区分long和int,long被重命名为int,所以Python3.x只有int。
2)语句函数化,例如print(1,2)都能打印出1 2,但是2.x中的意思是print语句打印元组,3.x中的意思是函数的2个参数。
3)整除,3.x版本中/为自然除,//是整除;2.x版本中/为整除。
4)3.x中raw_input重命名为input,不再使用raw_input。
5)round函数,在3.x中i.5的取整变为距离最近的偶数。
6)3.x字符串统一使用Unicode字符集。
7)捕获异常、抛出异常的语法改变。
(2)Python 2.x 到 Python 3.x 的迁移
Python 2.7 即将于 2020 年退休,随着该时间节点的临近,已陆续有一大批Python 项目宣布将在 2020 年之前放弃对 Python 2.7 的支持,包括 pandas、Zulip、IPython、NumPy 等等。事实上,几乎目前所有主要的开源 Python 包现在都同时支持 Python 3.x 和 Python 2.7 ,并且多数已支持这两种语言版本多年。虽然市面上有能够有效保持兼容性的工具和技术,但在许多代码的开发过程中,仍然会有小的摩擦,开发者也不打算无限期地保持这种兼容性。眼看着官方即将停止支持 Python 2 ,以及越来越多的人使用、教学和推荐 Python 3,这些 Python 包的作者自然也更倾向于放弃 Python 2 ,从而简化代码并更好地利用 Python 3.x 的许多新功能。截至2018年,Python3使用占比上升到84%,Python2已下降到16%。

3、Python解释器

(1)官方CPython
CPython用C语言开发,是使用最广泛的Python解释器。
(2)IPython
IPython是一个交互式、功能增强的Cpython解释器。
(3)PyPy
PyPy是用Python语言写的Python解释器,JIT(Just In Time)技术,动态编译Python代码。
(4)Jython
Jython是Python的源代码编译成Java的字节码,跑在JVM上。
(5)IronPython
IronPython与Jython类似,是运行在.Net平台上的解释器,该解释器将Python代码编译成.Net的字节码。

4、Python的语言类型

Python是动态语言、强类型语言。
(1)静态编译语言
静态编译语言显式声明变量类型,类型不能再改变。编译时检查变量的类型。
(2)动态编译语言
动态编译语言不用事先声明类型,随时可以赋值为其他类型。编程时不知道变量是什么类型,很难推断。
(3)强类型语言
强类型语言的不同类型之间操作,必须先强制类型转换为同一类型。例如:print('a'+1)
(4)弱类型语言
弱类型语言的不同类型之间可以操作,会自动隐式转换,例如:JavaScript中console.log(1+'a')

5、Python基本语法

(1)Python中的常量与变量
Python中的常量指字面常量,是一旦赋值就不能改变值的标识符。变量是赋值后可以改变值的标识符,变量是一个指针,指向一块内存。Python是强类型语言,给Python的常量或变量赋了一个值,即指定了该常量或变量的类型,不需要显式指定变量的类型,但是用字符串型变量加数值型变量是不可以的。Python是动态语言,给一个变量先赋值一个数值型,再变为赋值一个字符串型,是可以的。
(2)标识符
标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(’ _ ')。标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。标识符中的字母可以是Unicode中的任意字符,但除英文字母外,其他字符构成标识符需要涉及编码问题。标识符的编码风格需要遵守PEP8规范。标识符的名字不要使用歧义单词,例如class_,在python中不要随便使用下划线开头的标识符。
(3)关键词

算术 引入 异常 控制 操作与状态 返回退出 定义
and import except while del return lambda
or as try if assert yield class
in from finally else True continue def
is   rasie elif False pass global
not   with for None break nonlocal

(4)运算符和表达式

运算符 描述 运算符 描述
lambda Lambda表达式 | 按位或
or 布尔"或" ^ 按位异或
and 布尔"与" & 按位与
not 布尔"非" <<,>> 移位
in,not in 成员运算符,用于成员测试
后跟一种内置数据结构
~ 按位反转
is,not is 身份运算符
用于面向对象中的同一性测试
+,- 加减,或表示正负
<,<=,>,>=,!=,== 比较 *,/ 乘除
** 乘方 % 取余

False等价布尔值,相当于bool(value),包括:空容器,空集合set,空字典dict,空列表list,空元组tuple,空字符串,None对象和0。
Python 2 中的不等于有“!=”和“<>”,Python 3中的不等于只有“!=”。
Python 3 中的除法“/”结果是浮点数,得到的是小数,不是整除。Python 3 中的整除是“//”。
Python 2 中的除法“/”是整除,两个整数相除不会得到小数。Python 2中的自然除是float(3)/5。
2**4结果为16,代表2的4次方。
5%3结果为2,代表5对3取模。
Python简介及其基本语法_第1张图片

Python简介及其基本语法_第2张图片
Python中没有“异或”逻辑运算。Python中参与逻辑运算的成员只能是bool类型,或者可以隐式转换为bool类型的类型。Python中的双目逻辑运算符and和or遵从“短路法则”,即and和or总是从左到右的计算,一旦能够决定表达式最终的值,将立刻停止计算并返回。
测试短路操作
Python简介及其基本语法_第3张图片
Python简介及其基本语法_第4张图片
使双目逻辑运算符两边都计算:
Python简介及其基本语法_第5张图片
运算符的优先级列表如下(由高到低):

运算符 描述
‘expr’ 字符串转换
{key:expr,…} 字典
[expr1,expr2,…} 列表
(expr1,expr2,…) 元组
function(expr,…) 函数调用
x[index:index] 切片
x[index] 下标索引取值
x.attribute 属性引用
~x 按位取反
+x,-x 正,负
x**y
x*y,x/y,x%y 乘,除,取模
x+y,x-y 加,减
x<>y 移位
x&y 按位与
x^y 按位异或
x|y 按位或
x=y,x>y 比较
x is y,x is not y 等同测试
x in y,x not in y 成员判断
not x 逻辑否
x and y 逻辑与
x or y 逻辑或
lambda arg,…:expr Lambda匿名函数

其中,算术运算符>位运算符>身份运算符>成员运算符>逻辑运算符;单目运算符>双目运算符。
示例如下:
Python简介及其基本语法_第6张图片
(5)基本数据类型
数值类型:整型int、长整型long、浮点数float/double、复数a+bj、二进制、八进制、十六进制。
字符串类型:字符串是字符的序列,是不可变的。字符串类型有如下使用类别:
1)使用 ’ " 单双引号引用的字符的序列;
2)’’'和""" 单双三引号,可以跨行、可以在其中自由的使用单双引号;
3)r前缀:在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理;
4)f前缀:3.6版本开始,新增f前缀,格式化字符串。
(6)基本约定
1)转义序列
\\ \t \r \n \' \"
前缀r,把里面的所有字符当普通字符对待。
2)缩进
未使用C等语言的花括号,而是采用缩进的方式表示层次关系;
约定使用4个空格缩进。
3)续行
在行尾使用\
如果使用各种括号,认为括号内是一个整体,内部跨行不用\
(7)综合数据类型
<1>列表list:list是处理一组有序项目的数据结构,即你可以在一个列表中存储一
个序列的项目。
<2>元组Tuple:Python的元组与列表类似,不同之处在于元组的元素不能修改。
<3>字典dict:字典是另一种可变容器模型,且可存储任意类型对象。
<4>序列:序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。
<5>集合set:集合(set)和字典(dict)类似,它是一组 key 的集合,但不存储value。集合的特性是key 不能重复。
(8)输入输出函数
输入:raw_input、input。
input函数获取键盘输入 input([prompt]),返回一个输入的字符串。
输出:print、format。
int函数把给定类型的数值转换为整数。
(9)注释
Python里没有java的//,/* */注释,Python里的注释是前加#。

6、Python中的分支与循环

(1)布尔表达式
Python简介及其基本语法_第7张图片
(2)if 分支语句
Python简介及其基本语法_第8张图片
(3)While循环语句
Python简介及其基本语法_第9张图片
Python中没有a++和++a。
(4)for循环语句
Python简介及其基本语法_第10张图片
(5)循环语句的嵌套
Python简介及其基本语法_第11张图片
(6)break语句
Python简介及其基本语法_第12张图片
break用于提前结束循环语句。
(7)continue语句
Python简介及其基本语法_第13张图片
continue用于跳过本轮循环之后的语句。
(8)循环中的else子句
Python简介及其基本语法_第14张图片
以上代码用于求素数。循环结构中else子句用于判断循环有没有用break提前退出,如果用break提前退出了,则else子句不执行,如果循环没有提前退出,正常的执行结束,就执行else子句,即使循环都没有进去依然执行else子句。for循环结构和while循环结构中的else子句都是这样的用法。

7、Python的内存管理

变量无须事先声明,也不需要指定类型,这是动态语言的特性。
Python编程中一般无须关心变量的存亡,一般也不用关心内存的管理。
python使用引用计数记录所有对象的引用数:
1)当对象引用数变为0,它就可以被 垃圾回收GC。
2)计数增加:赋值给其它变量就增加引用计数,例如x=3; y=x; z=[x, 1]。实参传参,如foo(y)。
3)计数减少:函数运行结束时,局部变量就会被自动销毁,对象引用计数减少。变量被赋值给其它对象。例如x=3; y=x; x=4。
4)有关性能的时候,就需要考虑变量的引用问题,但是该释放内存还是尽量不释放内存,看需求。
查看引用计数:

import sys
x = []
print(sys.getrefcount(x))
print(sys.getrefcount([]))
y = x
print(sys.getrefcount(y), sys.getrefcount(x))
x = 5                              # 注意字面常量
print(sys.getrefcount(y))
print(sys.getrefcount(x))
z = 5
print(sys.getrefcount(x))

8、Python脚本

Hello Word的Python脚本如下:

#!/usr/bin/env python
print('hello world');

不加Shell Bang执行该Python脚本:python hello.py
加Shell Bang执行该Python脚本:chmod 755 hello.py./hello.py

你可能感兴趣的:(Python)