Python基础知识(1)
1、Python基础介绍
1.1 发展的历史
- python是1980s(20世纪80年代)开始构想的,1989年被Guido van Rossum(吉多·范·罗苏姆)在荷兰国家数学和计算机科学研究所设计出来的,作为ABC编程语言的继承者。
- 自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。
- Python因大数据,云计算等出现呈现井喷式的增长,现在主要应用领域:
- 云计算:云计算最热的语言,典型的应用OpenStack
- WEB开发:许多优秀的WEB框架,许多大型网站是Python开发、YouTube、Dropbox、Douban……典型的Web框架包括Django
- 科学计算和人工智能:典型的图书馆NumPy、SciPy、Matplotlib、Enided图书馆、熊猫
- 金融:定量交易、金融分析,在金融工程领域,Python不仅使用最多,而且使用最多,其重要性逐年增加。
1.2 特性
- 优点
- 简单易学:Python是一种代表简单主义思想的语言,有极其简单的说明文档
- 易读性:代码定义的更清晰,有限制性很强的语法,使代码清晰易读
- 易于维护:源代码容易维护。
- 可扩展性:胶水语言,如果需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,可用其他语言完成那部分程序,然后从你的Python程序中调用。
- 可移植:可以将Python移植到许多平台。
- 一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、 FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作…
- 面向对象:适合面向对象的编程(OOP)
- 缺点
- 单行语句和命令行输出问题
很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便
的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。 - 和C程序相比非常慢
Python是解释型语言,代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时。
- 单行语句和命令行输出问题
1.3 环境配置
1.4 通用知识
1.4.1 转义字符
1.4.2 输入输出语句
-
输入语句
- ** = input(“请输入…”)
输入的为一个字符创,如需要可进行格式转换
- ** = input(“请输入…”)
-
输出语句
- 打印后换行 print()
- 打印后不换行 print("",end="")
end默认为"\n"换行,,可用其他的转义字符替换*
- 格式化打印
-
print(“a=”,变量名)
-
print("%d+%d=%d"%(a,b,c))
将%()里的数据按顺序显示
-
print("{1}+{0}={2},{0}是a".format(a,b,c))
012代表format()里参数的顺序,可改变位置,fromat代表一个方法
-
- print("{1}+{0}={num1},{num1}是自定义的".format(a,b,num1=??)) `01代表format()里参数的顺序,可改变位置,fromat代表一个方法,num1为format自定义的参数`
- print(f."") `f代表的就是format方法,相当于简写`
1.4.3 代码注释
-
单行注释
#注释一行
-
多行注释
‘’‘单引号,注释多行’’’ 或 “”“双引号,注释多行”""
1.4.4 行与缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:
1.4.5 多行语句
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:
但是在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \
2、标识符和关键字
2.1 标识符
标识符是编程时使用的名字,用于给变量、函数、语句块等命名,但名字不能和关键字相同
- 标识符组成
- 字母
区分大小写
- 数字
不能以数字开头
- 下划线:下划线开头的有特殊的意义:
_xxx
,表示不能直接访问的类属性,需通过类提供的接口进行访问,不能用from xxx import *
导入__xx
,表示私有成员__xx__
,表示 Python 中内置标识
- 字母
2.2 关键字
关键字 | 含义 |
---|---|
False | 布尔类型的值,表示假,与True相对 |
None | 为空,自己的数据类型NoneType |
True | 布尔类型的值,表示真,与False相反 |
and | 用于表达式运算,逻辑与操作 |
as | 用于类型转换 |
assert | 断言,用于判断变量或者条件表达式的值是否为真 |
break | 中断循环语句的执行 |
class | 用于定义类 |
continue | 跳出本次循环,继续执行下一次循环 |
def | 用于定义函数或方法 |
del | 删除变量或序列的值 |
elif | 条件语句,与if、else结合使用 |
else | 条件语句,与if、else结合使用 ,也可用于异常和循环语句 |
except | 包含捕获异常后的操作代码块,与try、finally结合使用 |
finally | 用于异常语句,出现异常后,始终要执行finally包含的代码块,与try、except结合使用 |
for | for循环语句 |
from | 用于导入模块,与import结合使用 |
global | 定义全局变量 |
if | 条件语句,与elif、else结合使用 |
import | 用于导入模块,与from结合使用 |
in | 判断变量是否在序列中 |
is | 判断变量是否为某个类的实例 |
lambda | 定义匿名函数 |
nonlocal | 用于标识外部作用域的函数 |
not | 用于表达式运算,逻辑非操作 |
or | 用于表达式运算,逻辑或操作 |
pass | 空的类、方法或函数的占位符 |
raise | 异常抛出操作 |
return | 用于从函数返回计算结果 |
try | 包含可能会出现异常的语句,与except、finally结合使用 |
while | while循环语句 |
with | 简化Python的语句 |
yield | 用于从函数依次返回值 |
3、变量与常量
3.1 变量
变量是内存中命名的存储位置,变量的值是可以动态变化的
3.1.1 变量的命名
- 命名规则如下
- 量的名字的第1个字符必须是字母或下划线(_);
- 第1个字符后边可以使由字母、下划线(_)、或数字(0~9)组成;
- 关键字不能用于声明变量;
- 对变量进行赋值时,使用单引号和双引号的效果是完全一样的;
- 字母严格区分大小写的
- 命名风格
- 驼峰法
- 纯小写加下划线(推荐使用)
- 变量的定义
- 主要有三部分组成: 变量名、赋值符号、值:
变量名 = value
- 主要有三部分组成: 变量名、赋值符号、值:
- 赋值规则
- 直接赋值 a=1 结果:1
- 链式赋值 a=b=c=1 结果:a=1,b=1,c=2
- 序列解包赋值 a,b,c = 1,2,3 结果:a=1,b=2,c=3
3.1.2 变量值的特性
- id:可以取出变量名指向的内存地址
- a=10 id(a) a=12 id(a) 两次取出的值不同,返回的是保存值的地址
- type:表示变量值的数据类型
- a = 10 type(a) a=“aaa” type(a) 第一次结果为int ,第二次结果为str 返回的为所赋值的数据类型
- value:表示变量值的状态大小
- a = 10 value代表的就是a的值为10
3.1.3 变量的作用域
- 局部变量
- 声明在
函数
或者类
中的变量都是全局变量,只在其内部有效。 - 局部变量的作用域是从
声明开始到函数结束
- 声明在
- 全局变量
- 函数体外定义的变量
- 函数体内定义的变量,并且使用
global关键字
修饰后的变量 - 全局变量的作用域范围是
从声明开始,到整个文件结束
。
- 注意
- 如果全局变量和局部变量同名,那么在局部变量作用域中使用的是局部变量;外部使用的是全局变量
- 函数的形参就相当于声明在函数中的变量,所以是局部变量
3.1.4 匿名变量(lamnda)
匿名变量是指没有名字的函数,适合在需要一个函数,但是又不想去给这个函数命名。通常,这样的函数只使用一次。
-
语法格式
- 变量名 = lambda 形参列表:返回值
- 变量:用于调用lambda表达式
- lambda -:声明匿名函数的关键字
- 列表:可选参数,用于指定要传递的参数列表
- 返回值:相当于普通函数中只有一条return语句的函数体,,如果有参数,那么在该表达式中会引用这些参数。
- 变量名 = lambda 形参列表:返回值
-
例子
-
A = lambda a,b : a+b print(A(2,4)) 结果:6
lambda需要定义一个变量,否则输出结果不符合预期。
-
-
注意
- 匿名函数的参数也可以设置默认值
- 匿名函数不能说明参数类型
- 匿名函数可以设置不定长参数
3.2 常量
常量指的是在程序运行中不会变化的量,是内存中用于保存固定值的单元;
在python中没有专门的语法定义常量,通常用全部大写的标识符来表示常量,但在实际项目中,常量首次赋值后, 无法阻
止其他代码对其进行修改或删除。
4、运算符
4.1 常用运算符
4.1.1 算术运算符
运算符 | 描述 | 实例 | |
---|---|---|---|
+ | 加 - -数字类型相加,字符的拼接 | a=10,b=10 a+b=20 | a=“qw”,b=“as” a+b=“qwas” |
- | 减 – 两个数相减、求负的运算符 | a=10,b=5 a-b=5、 | a=-5 ,a=-a a=5 |
* | 乘 – 两个数相乘、返回一个被重复若干次的字符串 | a=10,b=5 a*b=50、 | a=“a1” ,a=a*3 a=“a1a1a1” |
/ | 除- - 正常的数学除法(即除不尽时,会产生小数部分) | a=10,b=5 a/b=2 | a=10 b=4 a/b=2.5 |
% | 求余运算符 - -返回除法的余数 | a=5,b=3 a%b=2 | |
** | 幂 - 返回x的y次幂 | 5**3=5的3次方为125 | |
// | 取整除 - 返回商的整数部分 | 9//2 输出结果 4 , | 9.0//2.0 输出结果 4.0 |
4.1.2 比较运算符
运算符 | 描述 | 实例 a=5 b=10 |
---|---|---|
== | 等于 – 比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于 - -比较两个对象是否不相等 | (a != b) 返回 True。 |
> | 大于 - -返回前面的是是否大于后面的数 | (a > b) 返回 False。 |
< | 小于 - 返回前面的是是否小于后面的数。 | (a < b) 返回 True。 |
>= | 大于等于 - 返回前面的是是否大于等于后面的数 | (a >= b) 返回 False。 |
<= | 小于等于 - 返回前面的是是否小于等于后面的数 | (a <= b) 返回 True。 |
4.1.3 赋值运算符
运算符 | 描述 | 实例 a=10 b=5 |
---|---|---|
= | 简单的赋值运算符 | c=a+b 将 a+b的值15赋值给c |
+= | 加法赋值运算符 | a += 5<==>a = a+5 将15赋给a |
-= | 减法赋值运算符 | a -= 5<==>a = a-5 将5赋给a |
*= | 乘法赋值运算符 | a *= b <==>a = a * b 将50赋给a |
/= | 除法赋值运算符 | a /= b <==> a = a /b 将2赋给a |
%= | 取模赋值运算符 | a %= b <==> a = a % b 将0赋给a |
**= | 幂赋值运算符 | a****= b<==> a = a ** b 10的5次方赋给a |
//= | 取整除赋值运算符 | a //= b 等效于 a = a // b |
4.1.4 位运算符
运算符 | 描述 | 实例 a = 60 #二进制为 0011 1100 b = 13 #二进制为 0000 1101 |
---|---|---|
& | 按位与运算符:两个值,两个二进位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变0,把0变1 | (~a ) 输出结果 1100 0011 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,高位丢弃,低位补0。 | a << 3 输出结果 1111 0000 0 |
>> | 右移动运算符:运算数的各二进位全部向右移若干位 | a >> 3 输出结果 0000 0111 |
4.1.5 逻辑运算符
运算符 | 描述 | 实例 a=true b=false | |
---|---|---|---|
and 与 | 布尔"与" ——一假则全假,全真才为真 | a and b 结果:false | |
or 或 | 布尔"或" ——一真则为真,全假则为假 | a or b 结果:true | |
not 非 | 布尔"非" ——取相反值,假变真,真变加 | not a 结果:false |
4.1.6 成员运算符
运算符 | 描述 | 实例 x 在 y 序列中 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x in y 结果 : true |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x not y 结果:false |
4.1.7 身份运算符
运算符 | 描述 | 实例 |
---|---|---|
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
- is
- is not
4.2 运算符的优先级
从最高到最低优先级:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位取反运算符, 一元加号和减号 (正负号) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not or and | 逻辑运算符 |