-
获取帮助,比如,运行help(str)——这会显示str类的帮助。
-
字面意义上的常量。
- 数:整数、长整数、浮点数和复数
- 字符串
- 单引号、双引号:所有的空白,即空格和制表符都照原样保留
- 三引号(
'''或"""
),可编辑多行字符串,可以在三引号中自由的使用单引号和双引号 - 自然字符串:r或R开头。
r"abcds"
- Unicode字符串:u或U开头,书写北印度语或阿拉伯语等文本时使用。
- 连接:字面量间可用空格或不用空格连接,
+
可连接 变量 或字面量。
-
逻辑行和物理行:物理行是在编写程序时人所看见的。逻辑行是Python看见的单个语句。Python假定每个 物理行对应一个逻辑行 。
- 如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。
- 多个物理行变成一个逻辑行,用
\
放在末尾连接。
-
缩进:缩进在python中很重要,不同缩进层次表示不同语句块。
-
运算符结合规律:运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a= (b = c)。
-
流程控制语句
# if语句
if a > b:
...
elif a == b:
...
else:
...
# python 3.10 及以上支持 match-case 语句
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
# while语句
running = True
while running:
...
# 支持break和continue
else:
...# else用处是若while中有break,并生效后,不执行
# for循环
for i in range(1, 5):
print i
# 支持break和continue
else:
... # else用处是若while中有break,并生效后,不执行
match-case示例
6. 函数
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数,可没有参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。help(函数名)可显示,或者__doc__
属性打印。
- return [表达式]
结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
- 函数内部定义的变量都是局部变量,若要使用全局变量,需声明global 变量名
。
def functionname( parameters ):
'''函数_文档字符串
巴拉巴拉巴拉'''
function_suite
return [expression]
print functionname.__doc__
# 默认参数
def func(a, b=5, c=10):
print('a is', a, 'and b is', b, 'and c is', c)
func(3, 7)
func(25, c=24)
func(c=50, a=100)
-
模块:Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
- 模块的引入:
import module1[, module2[,... moduleN]]
- from 语句让你从模块中导入一个指定的部分到当前命名空间中。
from modname import name1[, name2[, ... nameN]]
,from modname import *
(如果没有__all__
中明确写入下划线开头的对象,则不会引入下划线开头的对象) - 可用
__all__=[a,_c]
定义该模块能被from modname import *
引用的对象 - 搜索路径:模块搜索路径存储在 system 模块的
sys.path
变量中。变量里包含(搜索顺序也如下)- 当前目录
- PYTHONPATH
- 由安装过程决定的默认目录
- 每个模块都有一个名称,程序中可用
__name__
来获取- 当
__name__
为__main__
时,表示是模块自己运行 - 当
__name__
为文件名(即模块名)
时,表示被其他模块引用(被import
)
- 当
- python的包:包就是文件夹,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
- 包的文件夹下必须存在
__init__.py
文件, 该文件的内容可以为空。__init__.py
用于标识当前文件夹是一个包。
- 包的文件夹下必须存在
- dir()函数:用来列出模块定义的标识符。标识符有函数、类和变量。
- dir( m1) 返回模块m1定义的名称列表。
- dir( ) 返回当前模块中定义的名称列表。
- 模块初始化
- 模块只有第一次被导入的时候才会被执行。
- 可以把导入模块作为生成一个新的对象
- 模块变量和类变量都是在模块对象初始化的时候执行的
- 而函数和类的方法,则不会初始化的时候执行,只有在调用的时候才会执行
- 如果在你模块中导入了其他的模块,或者导入了其他模块的方法,效果上相当于我们直接在模块中定义了这个模块和方法
- 模块的引入:
-
拷贝:
v1=v2
,v1,v2指向同一个对象v1=v2[:]
,v1,v2指向不同对象
-
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。一个模块可包含多个类。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用
- 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。
- 实例化:创建一个类的实例,类的具体对象。
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
- 方法:类中定义的函数。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- self:类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值。这个特别的变量指实例本身,按照惯例它的名称是self。
- 初始化:
__del__()
方法,在对象消逝前调用- 默认继承:在Python 3.x中取消了经典类,默认都是新式类,并且不必显式的继承object,也就是说以下一样:
- class Person(object):pass
- class Person():pass
- class Person:pass
class ClassName:
'类的帮助信息' #类文档字符串
class_suite #类体
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Employee:
'所有员工的基类'
empCount = 0 # 类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
def __init__(self, name, salary):
self.name = name # 实例变量
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
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字> as <数据>: # except (exc1, exc2) as var 可以同时捕获多种类别的异常
<语句> #如果引发了'name'异常,获得附加的数据(err)
else:
<语句> #如果没有异常发生
finally:
<语句> #如果没有异常发生
# except不带异常名字
try:
正常的操作
except:
发生异常,执行这块代码 # 捕获所有异常,不推荐
else:
如果没有异常执行这块代码
# 主动触发异常
raise [Exception [, args [, traceback]]]
# 定义函数
def temp_convert(var):
try:
return int(var)
except ValueError as err:
print("参数没有包含数字\n", err)
# 调用函数
temp_convert("xyz")
-
常用标准库:
-
特殊的方法:
方法 | 说明 |
---|---|
__init__(self,...) | 这个方法在新建对象恰好要被返回使用之前被调用。 |
__del__(self) | 恰好在对象要被删除之前调用。 |
__str__(self) | 在我们对对象使用print语句或是使用str()的时候调用。 |
__lt__(self,other) | 当使用小于运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。 |
__getitem__(self,key) | 使用x[key]索引操作符的时候调用。 |
__len__(self) | 对序列对象使用内建的len()函数的时候调用。 |
- 包裹和解包裹:
- 包裹参数分为包裹位置参数(对应元组)和包裹关键字参数(对应字典)
- 包裹(packing)的关键在于定义函数时,在相应元组或字典前加
*
或**
。所有多余的参数被包裹参数收集,合并成一个元组或字典。 - 解包裹(unpacking)是指在函数调用时,将元组参数或字典解开。
- 在定义或者调用参数时,参数的几种传递方式可以混合。但在过程中要小心前后顺序。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字,并且根据上面所说的原理细细分辨。
- 包裹和解包裹并不是相反操作,是两个相对独立的过程。
# 包裹
def func(a,*name):
print type(name)
print name
func(1,4,6)
func(5,6,7,1,2,3)
def func(**dict):
print type(dict)
print dict
func(a=1,b=9)
func(m=2,n=1,c=11)
# 解包裹
def func(a,b,c):
print a,b,c
args = (1,3,4)
func(*args)