Python的安装
image.png image.png我下载的是3.8.0版本
Python环境变量
下载完成后进行安装,安装完成后配置环境变量,将安装完的目录路径在path路径中添加
环境变量.png
IDE
我所使用的IDE是IntelliJ IDEA 2019.2.2,你们也可以使用PyCharm 进行python的编程,这两个软件都是有JetBrains开发的,所用方法几乎一模一样,就是不知为什么JetBrains不把他们继承到一个里面
IntelliJ IDEA是不带Python开发环境的,需要先安装一下
启动后依次点击File->Setting->Plugins,在Marketplace中搜索Phthon然后进行安装
image.png
因为我这个是已经安装过的了所以是installed的,安装完成后重启IntelliJ IDEA就可以使用Phthon了
Phthon的基础语法
Python 标识符
在 Python 里,标识符由字母、数字、下划线组成。
在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。
Python 中的标识符是区分大小写的。
以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 foo 代表 Python 里特殊方法专用的标识,如 init() 代表类的构造函数。
Python 可以同一行显示多条语句,方法是用分号 ; 分开
Python 保留字符
下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。
and | exec | not |
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |
行和缩进
学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py
if True:
print ("Answer")
print ("True")
else:
print ("Answer")
# 没有严格缩进,在执行时会报错
print ("False")
多行语句
Python语句中一般以新行作为语句的结束符。
但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:
total = item_one + \
item_two + \
item_three
语句中包含 [], {} 或 () 括号就不需要使用多行连接符。如下实例:
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']
Python 引号
Python 可以使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须的相同类型的。
其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。
word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""
Python注释
python中单行注释采用 # 开头。等同于别的语言的//
Python空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
Phthon的变量类型
基本数据类型 | 中文解释 |
---|---|
Numbers | 数字 |
String | 字符串 |
List | 列表 |
Tuple | 元组 |
Dictionary | 字典 |
数字类型
一些数值类型的实例:
int | long | float | comples |
---|---|---|---|
10 | 51924361L | 0.0 | 3.14j |
100 | -0x19323L | 15.20 | 45.j |
-786 | 0122L | -21.9 | 9.322e-36j |
080 | 0xDEFABCECBDAECBFBAEl | 32.3e+18 | .876j |
-0490 | 535633629843L | -90. | -.6545+0J |
-0x260 | -052318172735L | -32.54e100 | 3e+26J |
0x69 | -4721885298529L | 70.2E-12 | 4.53e-7j |
- 长整型也可以使用小写 l,但是还是建议您使用大写 L,避免与数字 1 混淆。Python使用 L 来显示长整型。
- Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。
- 注意:long 类型只存在于 Python2.X 版本中,在 2.2 以后的版本中,int 类型数据溢出后会自动转为long类型。在 Python3.X 版本中 long 类型被移除,使用 int 替代。
Python字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。它是编程语言中表示文本的数据类型。
python的字串列表有2种取值顺序:
从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
image.png
Python列表
List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。
列表用 [ ] 标识,是 python 最通用的复合数据类型。
列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
image.png
Python 元组
元组是另一个数据类型,类似于 List(列表)。
元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
Python 字典
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
基本类型总结
python的基本数字类型与java与C类似,支持int,long,float,complex四种类型
python的字符串类型只有String类型
Python的list使用 []标识,相当于java或者C中的数组
Python的元组使用()标识,作用相当于Java或C中的枚举,一经定义就无法重新复制
python的字典使用{}标识,作用相当于java中的List<Object>集合
基本类型的True与False
再说这个之前,我先说一个问题,就是True与false的问题,这个问题我大脑一直转不过来,为什么10 20一个Int类型的值能和true扯上关系,结果我查到了,原因如下
- 数字类型:0为False ,其他的均为True
- 空串“”为False,其他的均为True
- 空List[] 元祖()字典{}都为False,其他的均为True
- 简单来说 数字为0,字符串为空,集合数值为空的没有值的类型均分false,有值的均为true
基本运算符
基本运算符的使用与java跟C完全一样,因此我直接忽略了此部分
逻辑运算符(使用在变量)
Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 20。 |
or | x or y | 布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
成员运算符(使用在list)
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
身份运算符
运算符 | 描述 | 实例 |
---|---|---|
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。 |
Python运算符优先级
以下表格列出了从最高到最低优先级的所有运算符:
运算符 | 优先级 | |
---|---|---|
** | 指数 (最高优先级) | |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) | |
* / % // | 乘,除,取模和取整除 | |
+ - | 加法减法 | |
>> << | 右移,左移运算符 | |
& | 位 'AND' | |
^ | 位运算符 | |
<= < > >= | 比较运算符 | |
<> == != | 等于运算符 | |
= %= /= //= -= += *= **= | 赋值运算符 | |
is is not | 身份运算符 | |
in not in | 成员运算符 | |
not and or | 逻辑运算符 |
条件语句
if else elif while for break continue 语句与java 不同的是可以不再if后面加(),但是在语句的后面需要加上:,别的没有什么变化
还有一个关键字pass,看说明是不做任何事,只是站位,不明白这个是做什么的
if 判断条件:
执行语句……
else:
执行语句……
Python的class
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Employee: #定义类Employee
'所有员工的基类'
empCount = 0#全局变量
def __init__(self, name, salary): #构造函数
self.name = name #self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print ("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print ("Name : ", self.name, ", Salary: ", self.salary)
在上面的代码中创建了一个Employee的类
输出的结果.png
我们可以看到python中调用的方法与java类似
class的属性操作
你可以使用以下函数的方式来访问属性:
- getattr(obj, name[, default]) : 访问对象的属性。
- hasattr(obj,name) : 检查是否存在一个属性。
- setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
- delattr(obj, name) : 删除属性。
也可以使用如下操作进行修改
emp1.age = 7 # 添加一个 'age' 属性
emp1.age = 8 # 修改 'age' 属性
del emp1.age # 删除 'age' 属性
from Employee import Employee
var1 = Employee("hello" , 20 )
var1.displayCount()
var1.displayEmployee()
var2 = Employee("hello2" , 21 )
var2.displayCount()
var2.displayEmployee()
var1.salary = 2000
setattr(var2,'salary',3000)
print(var1.name)
print(getattr(var2,'name'))
var1.displayEmployee()
var2.displayEmployee()
输出结果.png
Python中还包含了一些内置属性
image.png
Python的垃圾回收机制
Python 使用了引用计数这一简单技术来跟踪和回收垃圾。
在 Python 内部记录着所有使用中的对象各有多少引用。
一个内部跟踪变量,称为一个引用计数器。
当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是"立即"的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。
垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。
类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
继承语法如下
class 派生类名(基类名)
...
在python中继承中的一些特点:
- 1、如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。详细说明可查看:python 子类继承父类构造函数说明。
- 2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数
- 3、Python 总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。
class SubClassName (ParentClass1[, ParentClass2, ...]):
...
接下来我们看个例子
from Employee import Employee
class ManagerMan([Employee]):
def __init__(self, name, salary,ManagerSalary):
super(ManagerMan,self).__init__(name,salary)
self.ManagerSalary =ManagerSalary
def displayEmployee(self):
print("Name : ", self.name, ", Salary: ", self.salary,", ManagerSalary: ", self.ManagerSalary)
from Employee import Employee
from ManagerMan import ManagerMan
var1 = ManagerMan("hello" , 20 ,10)
var1.displayCount()
var1.displayEmployee()
var2 = ManagerMan("hello2" , 21 ,10)
var2.displayCount()
var2.displayEmployee()
我创建了一个经理的class他继承了Employee的属性,在构造ManagerMan的时候比Employee多了一个ManagerSalary属性,并且我重写了displayEmployee方法
输出如下
image.png
class中单下划线、双下划线、头尾双下划线说明
image.png以上就是Python的基本语法使用,如果想使用IO及其他操作,请参考python的api手册
我学习所使用的的教程网站
有关python自动化测试的帖子
网友评论