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)关键词

算术引入异常控制操作与状态返回退出定义
andimportexceptwhiledelreturnlambda
orastryifassertyieldclass
infromfinallyelseTruecontinuedef
is rasieelifFalsepassglobal
not withforNonebreaknonlocal

(4)运算符和表达式

运算符描述运算符描述
lambdaLambda表达式|按位或
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中没有“异或”逻辑运算。Python中参与逻辑运算的成员只能是bool类型,或者可以隐式转换为bool类型的类型。Python中的双目逻辑运算符and和or遵从“短路法则”,即and和or总是从左到右的计算,一旦能够决定表达式最终的值,将立刻停止计算并返回。
测试短路操作


使双目逻辑运算符两边都计算:

运算符的优先级列表如下(由高到低):

运算符描述
‘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<=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,…:exprLambda匿名函数

其中,算术运算符>位运算符>身份运算符>成员运算符>逻辑运算符;单目运算符>双目运算符。
示例如下:

(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)布尔表达式

(2)if 分支语句

(3)While循环语句

Python中没有a++和++a。
(4)for循环语句

(5)循环语句的嵌套

(6)break语句

break用于提前结束循环语句。
(7)continue语句

continue用于跳过本轮循环之后的语句。
(8)循环中的else子句

以上代码用于求素数。循环结构中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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页