Python入门
# 使用交互式进入python环境
python
>>> print("Hello, world!")
数值运算:
符号 | 含义 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
** | 次方。如2**3 2^3=8 |
% | 求余 |
用于字符串
时:
符号 | 含义 |
---|---|
+ | 将若干字符串相连,如:”hello” + “world” |
* | 重复该字符串若干次,如:”hello” * 2 |
逻辑运算:
符号 | 含义 |
---|---|
and | 与 |
or | 或 |
not | 非 |
变量及变量类型:
变量 | 类型 |
---|---|
a = 1 | 整形 |
a = 0.3 | 浮点型 |
a = “hello” | 字符串 |
a = True | 布尔型 |
type(a) | type()这个函数可以查看当前变量的类型 |
序列:
- 元组 tuple
a = (1, 0.3, “hello”, (1, 2), True, [3, 4])
元组一旦建立,则无法修改
其中的值!!!
- 列表 list
a = [1, 0.3, “hello”, (1, 2), True, [3, 4]]
列表中的元素可以修改
!!!
访问序列中的单个
值:
>>> a[0]
1
>>> a[3][1]
2
访问序列中的多个
值:
序列名[下限:上限:步长]
>>> a[:5] # 下标0~4的元素,不包括5
>>> a[2:] # 下标2, 3...
>>> a[0:5:2] # 下标为0、2、4的元素
若下限>上限
,如:
>>> a[2:0:-1] # 下标为2、1(从2到0,步长为-1)
>>> a[-3] # 倒数第三个元素
词典:
>>> a = {'Tom': 11, 'Sam': 57, 'lily': 100}
>>> a['Tom']
11
判断及循环结构:
这些结构当中,缩进很重要!!!
- 判断结构:
if ...:
......
elif ...:
......
else:
.....
- 循环结构:
for 元素 in 序列:
......
range(n)
:可以用来使for循环执行n次
while ...:
......
- 跳过和终止:
continue
:跳过本次循环
break
:终止整个循环体
函数:
- 定义函数:
def test(a, b, c=10):
......
定义了一个test(a,b,c)函数,其中a和b以及c是形参,当调用该函数并且没有传递c的值时,c默认为10
- 函数文档:
help(函数名)
自定义函数文档:””“……”””
- 参数传递:
方法一:使用位置
进行参数传递:
test(1, 2)
,则在test()函数中,a=1, b=2, c=10
方法二:使用参数名
进行参数传递:
test(b=1, a=2, c=11)
,则再test()函数中,a=1, b=2, c=11
方法三:包裹传参
1.传递的为元组
def package_position(*tuple)
......
package_position(1, 4, 6)
# 在package_position()函数中,得到一个名为tuple的元组(1, 4, 6)
2.传递为词典
def package_position(**dict)
......
package_position(a=1, b=2, c=3)
# 在package_position()函数中,得到一个名为dict的词典('a':1, 'b':4, 'c':6)
- 解包裹:
使用*
和**
:
def unpackage(a, b, c):
......
args = (1, 3, 4)
unpackage(*args)
此处的args为一个tuple,但是unpackage有三个参数,因此此处使用
*
,是指将tuple中的元素拆成三个
def unpackage(a, b, c):
......
args = {"a": 1, "b": 2, "c": 3}
unpackage(**args)
此处的args为一个dict,但是unpackage有三个参数,因此此处使用
**
,是指将dict中的元素与参数对应
当函数的参数为容器(序列、词典)时,则函数内对该参数做的任何改变,也会影响到该函数外此容器的值!!!!(有点类似于指针的意思)
引入模块:
from 文件名 import 函数名|变量名|*
如:
# 文件名:first.py,函数名:laugh()
from first import laugh
for i in range(10)
laugh()
以及:
# 文件名:first.py,变量名:text
from first import text
print(text)
异常处理:
try:
…
except exception1:
…
except exception2:
…
else:
…
finally:
…
其中: try:将需要处理异常的程序包裹在其中 except:捕捉可能出现的异常 else:只要没有异常,则执行此语句 finally:无论有没有异常,都会执行该语句
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
SystemExit | Python 解释器请求退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
类:
class class_name(object):
…
def method_name(self,...): # 定义类方法,第一个参数必须是代表自己的self!!!
……
def __init__(self,...): # 特殊方法(魔法方法),前后两个下划线,每次创建对象都会调用该方法
……
对象:
object_name = class_name()
继承:(子类对象获得父类的方法以及属性)
class child_name(father_name):
……
属性/方法 覆盖:
当子类
中具有与父类
中同名的方法/属性时,
使用子类
生成对象时,调用的是子类
的方法/属性;
使用父类
生成对象时,调用的是父类
的方法/属性。
调用父类的方法:(使用super()
即可)
在子类
中可以使用super().method_name
调用父类
的方法/属性
列表对象及相关方法:([…])
a = [1, 2, 3, 5, 9.0, “Good”, -1, True, False, “Bye”]
方法 | 方法含义 |
---|---|
a.count(5) | 计数,看有多少个元素5 |
a.index(3) | 获取元素3第一次出现的下标 |
a.append(6) | 在列表最后添加一个新元素6 |
a.sort() | 排序;数值型和str型混合的列表无法排序 |
a.reverse() | 颠倒次序 |
a.pop() | 去除最后一个元素,并将其返回 |
a.remove(2) | 去掉第一次出现的元素2 |
a.insert(0, 9) | 在a的下标0处添加元素9 |
a.clear() | 清空列表 |
元祖与字符串对象及相关方法:
字符串是特殊的元祖
,对字符串的“修改”实际上是将原字符串删除,再生成新的字符串的过程。
str = "Hello World!"
sub = "World"
字符串方法 | 解释 |
---|---|
str.count(sub) | 返回:sub在str中出现的次数 |
str.find(sub) | 返回:从左开始,查找sub在str中第一次出现的位置。若找不到,返回-1 |
str.rfind(sub) | 返回:从右开始,查找sub在str中第一次出现的位置。若找不到,返回-1 |
str.index(sub) | 返回:与find()类似,仅在出错时,返回的是错误 |
str.rindex(sub) | …… |
str.isalnum() | 返回:若所有字符都是字母或数字,True |
str.isalpha() | 返回:若所有字符都是字母,True |
str.isdigit() | 返回:若所有字符都是数字,True |
str.istitle() | 返回:若所有词(以空格为分隔符)的首字母都是大写,True |
str.isspace() | 返回:若所有字符都是空格,True |
str.islower() | 返回:若所有字符都是小写字母,True |
str.isupper() | 返回:若所有字符都是大写字母,True |
str.split([sep,[max]]) | 返回:从左开始,以sep为分隔符,最多分割max次,返回一个列表 |
str.rsplit([sep,[max]]) | ……从右开始…… |
str.join(s) | 返回:将str作为分隔符,插入s,形成新的字符串 |
str.strip([sub]) | 返回:去掉字符串开头和结尾的sub |
str.replace(sub,new_sub) | 返回:用new_sub代替原串中的sub |
str.capitalize() | 返回:将str的第一个字母大写 |
str.lower() | 返回:将str全部字符改为小写 |
str.upper() | ……大写 |
str.swapcase() | 返回:将str中大写变小写,小写变大写 |
str.title() | 返回:将str中每个词(以空格为分隔)的首字母大写 |
str.center(width) | 返回:长度为width的串,并将原串至于该串中间 |
str.ljust(width) | ……左边 |
str.rjust(width) | ……右边 |
词典对象及相关方法:
for k in dict.keys(): # 词典的keys()方法,用于获取词典的元素的关键字
print(dict[k])
for v in dict.values(): # 词典的values()方法,用于获取词典的元素的值
print(v)
for k,v in dict.items(): # 词典的items()方法,用于获取词典的元素的关键字及值
print(k,v)
dict.clear() # clear()方法,清空词典
循环对象:
内置函数iter()
可以将序列转变为一个循环对象,如:a = iter([1, 2])
循环对象可以调用__next__()
方法,直到出现StopIteration出现,停止调用__next__()方法
在for循环中,会自动调用__next()方法
借助生成器,自定义循环对象:
def generator_name():
a = 100
yield a
a = a*8
yield a
yield 1000
for i in generator_name():
print(i) # 第一次输出100,之后输出800,再输出1000