Python - 特点

  1. 简单易学
  2. 交互式编程
  3. 解释性
  4. 面对对象

Python - 基础

  1. 编码

    默认情况下,py3源码以UTF-8编码,所有字符都是Unicode字符串

    指定不同的编码:

    # -*- coding: cp-1252 -*-
  2. 标识符

    • 第一个字符必须是字母表中字母或下划线 _
    • 标识符的其他的部分由_字母_、_数字_和_下划线_组成。
    • 标识符对大小写敏感

    注:在py3中,可以用中文等非ASCII标识符

  3. 保留字(关键字)

  4. 注释

    • 单行注释以#开头

    • 多行注释用多个#

  5. 行与缩进

    python以缩进区分行,缩进有问题时会报错

    • python 通常一行写一条语句,如果语句很长可以在尾部加反斜杠\来实现多行语句
    • []{}()中的多行语句不需要反斜杠
  6. 数据类型

    1. Number(数字)

      • int(整型)

      • bool(布尔型)

      • float(浮点型)

      • complex(复数)

    2. String(字符串)

      • 字符串用单引号'或者双引号"括起来,同时使用反斜杠\转义特殊字符,在字符串添加一个r取消转义

      • 在python中,单引号和双引号的使用基本相同

      • 字符串可以用+连接

    • 字符串的截取语法格式(包含头不包含尾):

      变量名[头下标:尾下标]

Python - 运算符

算术运算符

Python 中提供了 7 个基本的算术运算符,与数学方法中基本类似,见下表。(其中 a = 3, b = 4)

运算符 名称 示例
+ 加法 a + b = 7
- 减法 a - b = -1
* 乘法 a * b = 12
/ 除法 a / b = 0.75
% 取模 a % b = 3
** 乘方 a ** b = 81
// 整除 a // b = 0
b // a = 1

赋值运算符

在 Python 中,允许使用复合赋值运算符,包括 +=, -=, *=, /=, %=, **=, //=七种。

关系运算符

又叫 比较运算符 ,结果是一个布尔值,有 ==, !=, >, <, >=, <= 六种。

逻辑运算符

在 Python 中,逻辑运算符包括 and(与),or(或),not(非) 三种。

其返回值不一定是布尔值

运算符 举例 说明
and x and y 如果 x 为 False,无需计算 y 的值,返回 x 的值;否则返回 y 的值
or x or y 如果 x 为 True,无需计算 y 的值,返回值为 x;否则返回 y 的值
not not x 如果 x 为 True,返回值为 False;否则返回值为 True

成员运算符

在 Python 中,成员运算符 用于判断一个元素是否在某个序列中,包括in(存在),not in(不存在) 两种。

返回值是布尔值。

身份运算符

在 Python 中,身份运算符 用于判断两个变量的引用对象是否指向同一个内存对象5,包括is,is not 两种。

返回值是布尔值。

位运算符

指二进制位的运算,包括&(与),|(或),^(取反),~(取反),<<(左移),<<(右移) 六种。

Python - 交互语句

input

**input()**方法用于从标准输入读入一行文本

>>>str = input("please input something: ")
>>>print("your input: ",str)

print

**print()**方法用于打印输出,基本语法:

print(*objects, sep=' ', end='\n', file=sys.stdout)

objects –表示输出的对象。输出多个对象时,需要用 , (逗号)分隔

sep – 用来间隔多个对象

end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符

file – 要写入的文件对象

  • 无论什么类型的数据都可以直接输出

  • 数据的格式化输出类似于C中的printf

  • 使用_end_分割字符,默认为换行

**str()repr()**用于将输出的值转成字符串

Python - 条件控制语句

if

一般格式:

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3
  • 每个条件后用冒号:结束
  • 用缩进划分语句块
  • 如果循环体中就一条语句,你可以写在同一行

switch

python中没有Switch语句

Python - 循环控制语句

while

一般格式:

while condition:
    statements_block_1
else:
    statements_block_2
  • 如果循环体中就一条语句,可以写在同一行

for

一般格式:

for variable in sequence:
    statements_block_1
else:
    statements_block_2
  • python 中的for循环可以遍历任何可迭代对象,如一个列表或一个字符串

**range()**:在循环中使用,用于生成数列

for i in range(5) # 0 1 2 3 4

for i in range(0,6) # 0 1 2 3 4 5

for i in range(0,10,3) # 0 3 6 9

break

break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。

continue

continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

Python - 迭代器

  • 迭代器是访问集合元素的一种方式

  • 迭代器是一个可以记住遍历的位置的对象

  • 迭代器从集合的第一个元素开始访问,直到所有元素被访问完,且只能往前不能后退

  • 两个基本方法:iter()next()

>>>list = [1,2,3,4]
>>>it = iter(list)    # 创建迭代器对象
>>>print(next(it))    # 使用next输出迭代器的下一个元素
1
>>>print(next(it))
2
>>>for x in it : print(x,end=" ")    # 直接用常规for语句进行遍历
1 2 3 4 

Python - 列表

类似于C中的数组,用[]定义。

列表可以进行的操作包括_索引_,_切片_,_加_,_乘_,_检查成员_。

函数

关于列表的一些函数

len(list)		# 列表元素个数
max(list)		# 返回列表元素最大值
min(list)		# 返回列表元素最小值

方法

通过append()方法来添加或者更新项

list.append('nayst')

通过del()方法来删除项

list.del('nayst')

其他方法

list.count()		# 统计某个元素在列表中出现的次数
list.index()		# 从列表中找出某个值第一个匹配项的索引位置
list.pop()			# 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove()		# 移除列表中某个值的第一个匹配项
list.reverse()		# 反向列表中元素
list.sort()			# 对列表进行排序

Python - 元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用()定义。

虽然不能修改元组中的元组,但是可以连接元组

tup1 = (1,2,3)
tup2 = (4,5)

tup3 = tup1 + tup2

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python - 字典

字典用{}定义,由键值对构成。

字典的每个 key=>value (键值对)用冒号 : 分割,每个键值对之间用逗号 , 分割。

字典内的键名不能重复且不可变。

函数

len(dict)		# 计算字典中元素个数,即键总数
str(dict)		# 将值转化为适于人阅读的形式,以可打印的字符串表示

方法

dict.clear()					# 删除字典内所有元素
dict.copy()						# 返回一个字典的浅复制
dict.fromkeys(list1,list2)		# 创建一个新字典,以序列 list1 中元素做字典的键,list2 为字典所有键对应的初始值
dict.get(key,default=?)			# 返回指定键的值,如果值不在字典中返回default值
dict.has_key(key)				# 如果键在字典dict里返回 True,否则返回 False
dict.items()					# 以列表返回可遍历的(键, 值) 元组数组
dict.keys()						# 以列表返回一个字典所有的键
dict.values()					# 以列表返回字典中的所有值

Python - 函数

定义函数的规则:

  1. 函数代码以def关键词开头,后接函数标识符名称和圆括号
  2. 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
  3. 内容以冒号:开始,并且缩进
  4. return [表达式]结束函数,不设置默认返回None

Python - 文件

  1. open

    **open()**方法将会返回一个file对象,基本语法:

    open(filename,mode)
    
    # filename -- 包含了你要访问的文件名称的字符串值。
    # mode -- 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
    mode describt
    b 二进制模式。
    w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被覆盖。如果该文件不存在,创建新文件。
    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    a 打开一个文件用于追加。文件的指针将会放在文件的开头。如果该文件不存在,创建新文件。
    + 以多模式打开。
  2. read

    读取一个文件的内容并作为返回值返回,基本语法:

    fileObject.read([count])
    
    # count -- 要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果未给定或为负则读取所有。
  3. readline

    从文件中读取单独的一行,包括 \n 字符,最后一行默认为空,基本语法:

    fileObject.readline(size)
    
    # size -- 从文件中读取的字节数
  4. write

    将参数写入到文件中,然后返回写入的字符数

  5. close

    关闭文件,刷新缓冲区里任何还没写入的信息,释放系统的资源,不再进行读写操作,基本语法:

    fileObject.close()
  6. tell

    返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。

Python - 异常

  1. try…except

    用于捕捉异常

    • 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
    • 如果没有异常发生,忽略 except 子句,try 子句执行后结束。
    • 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
    • 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。
  2. try…else

    在 try 没有发生任何异常的时候执行。

  3. try…finally

    无论是否发生异常都将执行最后的代码

Python - 面对对象

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重载:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重载。
  • 实例变量:定义在方法中的变量,只作用于当前实例的类。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个 Dog 类型的对象派生自 Animal 类,这是模拟”是一个(is-a)”关系(例:Dog 是一个 Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 方法:类中定义的函数。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

类对象

使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾,如:

class people:
    name = ""
    age = 0
    \_\_weight = 0		# 两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。
    
    def \_\_init\_\_(self, n, a, w):
        self.name = n
        self.age = a
        self.\_\_weight = w
   
	def \_\_secretFunction(self):		# 两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。
        print("you can't read me")
    
    def speak(self):
        print("%s say: I'm %d years old."%(self.name, self.age))

p = people("nayst", 10, 30)
p.speak()		# nayst say: I'm 10 years old.

除 self 参数外,还包含 3 个参数,且这 3 个参数没有设置默认参数,因此在实例化类对象时,需要传入相应的 n ,a ,w 值(self 参数是特殊参数,不需要手动传值,Python 会自动传给它值)。

无论是类属性还是类方法,对于类来说,它们都不是必需的,可以有也可以没有。

self

类的方法中必须有首个参数self,这里的 self 指向类的实例,而非类(self.class 指向类)。

类似于 PHP 中的 this

类的专有方法

专有方法开头和结尾各有 2 个下划线,且中间不能有空格。

  • __init__ : 构造函数,在生成对象时调用
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __truediv__: 除运算
  • __mod__: 求余运算
  • __pow__: 乘方