PYTHON学习
目录
一级目录
二级目录
三级目录
bin的用法
Python中的bin的用法是将输入的十进制数转换成二进制的数
如:
print(bin(4)) # 0b100
运算符—is & not is
is比较的是两个变量的内存地址,not is同理
比如:
a=["hello"]
b=["hello"]
print(a is b) #False
但是对于字符串变量(str)来说,它两没有区别,因为字符串是地址不可变型,此时is 和 not is等同于逻辑运算符 == 和!=
比如:
a="hello"
b="hello"
print(a is b,a==b) #True
List—pop函数
列表的声明为
a=['1','2','3']
pop函数的作用是移除列表中的一个元素(默认是最后一个元素)
比如:
a=['1','2','3']
print(a.pop())#['3']
print(a) #['1','2']
当然也可以根据索引来指定删除(索引大小不可超过列表长度)
查看对象中的类—type()
a=1
print(type(a)) #int
python中查看对象的方法是dir(),比如:
b=dir(int)
print(b)
还有一种函数可以查看类型:bitlength()
a=1031
print(a.bitlength())
getcontext().prec用来调整精度,比如:
decimal.getcontext().prec=4
print(Decimal(1)/Decimal(3))
bool型变量
bool变量在打印输出时,会以整形输出,比如:
print(True + True) #2
bool变量在赋值的时候可以以bool(X)来进行,比如:
a = bool(1) #a=True
a = bool(0) #a=False
在使用上述方法进行bool型变量的赋值的时候,如果是容器变量,则当容器变量为空时,认为赋值False,比如:
a = bool([]) #a=False
a = bool([0]) #a=True
变量转换
转换方法是:
int( x , base=10 )
str( object= ' ' )
float( x )
print函数
print基本格式
python中的print函数参数为:
print( *object, seq = ' ' , end= '\n', file = sys.stdout, flush = False )
上述中的参数含义:
一、seq是多个参数输出时,中间的分隔符
二、end是在输出结束时的字符,默认时换行符 ‘\n’
三、file是定义流输出的文件,可以是标准的输出sys.stdout,也可以是其他的
四、flush是立即将内容输出到流文件,不做缓存
print的格式化输出
最常见的一种方法是:
s = 'Hello'
x = len(s)
print(" the length of %s is %d"(s,x))
在上面的表达式中,
(1)%表示标记转换字符的开始
(2)转换标志:-表示左对齐;+表示在转换值之前要加上正负号;“”(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充
(3)最小字段宽度:转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出
(4)点(.)后跟精度值:如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将从元组中读出
常见的字符串格式化转换类型
项目 | Value |
---|---|
转换类型 | 含义 |
d,i | 带符号的十进制整数 |
o | 不带符号的八进制 |
u | 不带符号的十进制 |
x | 不带符号的十六进制(小写) |
X | 不带符号的十六进制(大写) |
e | 科学计数法表示的浮点数(小写) |
E | 科学计数法表示的浮点数(大写) |
f,F | 十进制浮点数 |
g | 如果指数大于-4或者小于精度值则和e相同,其他情况和f相同 |
G | 如果指数大于-4或者小于精度值则和E相同,其他情况和F相同 |
C | 单字符(接受整数或者单字符字符串) |
r | 字符串(使用repr转换任意python对象) |
s | 字符串(使用str转换任意python对象) |
python 中的负数的补码
前面所述,bin的作用是输出一个数的二进制表达式,如,bin(4)=0b100。对于负数的bin输出,bin一个负数的输出是数本身的二进制码的负数,如,bin(-4)=-0b100。
所以如果想获取负数的补码,则需要手动将其和0xffffffff进行按位与,然后交给bin进行输出。
条件语句,if-elif-else
在python中,由于没有’{}‘,所以在每次判断时,使用的是缩进,比如:
temp = input('请输入成绩:')
source = int(temp)
if 100 >= source >= 90:
print('A')
elif 90 > source >= 80:
print('B')
elif 80 > source >= 60:
print('C')
elif 60 > source >= 0:
print('D')
else:
print('输入错误!')
注意此处,每一个后面都加入了‘:’符号
assert语句
assert通过判断后面的表达式是否为True,如果为真,不执行assert;如果为假,assert就会抛出异常,异常类型为AssertionError
,在后面异常处理部分中的常见异常表会列举出这种类型的异常。
assert用法见下:
assert 4 > 7
# AssertionError
循环语句
基本循环语句 While
循环语句的基本格式:
while 布尔表达式:
代码块
while-else
在python中,while可以搭配else使用,比如:
count = 0
while count < 5:
print("%d is less than 5" % count)
count = count + 1
else:
print("%d is not less than 5" % count)
for循环和for-else
for循环比如:
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for key, value in dic.items():
print(key, value, sep=':', end=' ')
for-else循环
for num in range(10, 20): # 迭代 10 到 20 之间的数字
for i in range(2, num): # 根据因子迭代
if num % i == 0: # 确定第一个因子
j = num / i # 计算第二个因子
print('%d 等于 %d * %d' % (num, i, j))
break # 跳出当前循环
else: # 循环的 else 部分
print(num, '是一个质数')
range的用法
上述循环中的range函数作用是生成一个从start
参数的值开始到stop
参数的值结束的数字序列,该序列包含start
的值但不包含stop
的值
range([start,] stop[, step=1])
enumerate()函数
enumerate(sequence, [start=0])
- sequence:一个序列、迭代器或其他支持迭代对象。
- start:下标起始位置。
- 返回 enumerate(枚举) 对象
可以说,enumerate函数会将sequence序列进行遍历并且进行序列标号,标号的起始位置是start参数设置的。
languages = ['Python', 'R', 'Matlab', 'C++']
for language in languages:
print('I love', language)
print('Done!')
# I love Python
# I love R
# I love Matlab
# I love C++
# Done!
for i, language in enumerate(languages, 2):
print(i, 'I love', language)
print('Done!')
# 2 I love Python
# 3 I love R
# 4 I love Matlab
# 5 I love C++
# Done!
break,continue,pass用法
break,continue的用法同其他语言里一样,在python中,pass的作用是保证程序结构的完整性,当在不确定该位置放置啥样的代码块的时候,可以用pass语句跳过。比如:
def a_func():
pass
此时这个定义的函数 a_func()将不会做出任何操作
推导式
列表推导式
x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)
# [-8, -4, 0, 4, 8]
a取值是x中的各个指,然后乘以2,列表推导式中可以有两个或多个条件或变量,比如:
x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x)
# [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]
a = [(i, j) for i in range(0, 3) for j in range(0, 3)]
print(a)
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
x = [[i, j] for i in range(0, 3) for j in range(0, 3)]
print(x)
# [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
x[0][0] = 10
print(x)
# [[10, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
a = [(i, j) for i in range(0, 3) if i < 1 for j in range(0, 3) if j > 1]
print(a)
# [(0, 2)]
元组推导式
和列表推导式相区别,当方括号变成⚪括弧时,推导式变成元组推导式,如,
a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x0000025BE511CC48>
print(tuple(a))
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
如果上面的是方括弧,第一个输出就是[0 1 2 3 4 5 6 7 8 9]
字典推导式
b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)
# {0: True, 3: False, 6: True, 9: False}
字典推导式的结构是:
{ key_expr: value_expr for value in collection [if condition] }
集合推导式
同上述,存在集合推导式,如,
{ expr for value in collection [if condition] }
比如,
c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)
# {1, 2, 3, 4, 5, 6}
区别在于是大括弧
注意:无论是元组推导式还是列表推导式,使用如下类型的函数时,返回的结果是相同的,例如,
s = sum([i for i in range(101)])
print(s) # 5050
s = sum((i for i in range(101)))
print(s) # 5050
python中的异常
python中标准异常:
- BaseException:所有异常的 基类
- Exception:常规异常的 基类
- StandardError:所有的内建标准异常的基类
- ArithmeticError:所有数值计算异常的基类
- FloatingPointError:浮点计算异常
- OverflowError:数值运算超出最大限制
- ZeroDivisionError:除数为零
- AssertionError:断言语句(assert)失败
- AttributeError:尝试访问未知的对象属性
- EOFError:没有内建输入,到达EOF标记
- EnvironmentError:操作系统异常的基类
- IOError:输入/输出操作失败
- OSError:操作系统产生的异常(例如打开一个不存在的文件)
- WindowsError:系统调用失败
- ImportError:导入模块失败的时候
- KeyboardInterrupt:用户中断执行
- LookupError:无效数据查询的基类
- IndexError:索引超出序列的范围
- KeyError:字典中查找一个不存在的关键字
- MemoryError:内存溢出(可通过删除对象释放内存)
- NameError:尝试访问一个不存在的变量
- UnboundLocalError:访问未初始化的本地变量
- ReferenceError:弱引用试图访问已经垃圾回收了的对象
- RuntimeError:一般的运行时异常
- NotImplementedError:尚未实现的方法
- SyntaxError:语法错误导致的异常
- IndentationError:缩进错误导致的异常
- TabError:Tab和空格混用
- SystemError:一般的解释器系统异常
- TypeError:不同类型间的无效操作
- ValueError:传入无效的参数
- UnicodeError:Unicode相关的异常
- UnicodeDecodeError:Unicode解码时的异常
- UnicodeEncodeError:Unicode编码错误导致的异常
- UnicodeTranslateError:Unicode转换错误导致的异常
异常体系内部有层次关系,Python异常体系中的部分关系如下所示:
python中标准警告
- Warning:警告的基类
- DeprecationWarning:关于被弃用的特征的警告
- FutureWarning:关于构造将来语义会有改变的警告
- UserWarning:用户代码生成的警告
- PendingDeprecationWarning:关于特性将会被废弃的警告
- RuntimeWarning:可疑的运行时行为(runtime behavior)的警告
- SyntaxWarning:可疑语法的警告
- ImportWarning:用于在导入模块过程中触发的警告
- UnicodeWarning:与Unicode相关的警告
- BytesWarning:与字节或字节码相关的警告
- ResourceWarning:与资源使用相关的警告
try-except语句
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
try 语句按照如下方式工作:
- 首先,执行
try
子句(在关键字try
和关键字except
之间的语句) - 如果没有异常发生,忽略
except
子句,try
子句执行后结束。 - 如果在执行
try
子句的过程中发生了异常,那么try
子句余下的部分将被忽略。如果异常的类型和except
之后的名称相符,那么对应的except
子句将被执行。最后执行try - except
语句之后的代码。 - 如果一个异常没有与任何的
except
匹配,那么这个异常将会传递给上层的try
中。
注意: - 一个
try
语句可能包含多个except
子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。 - 使用多个
except
代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。 - 一个
except
子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。
当处理多个异常组成的元组时,代码编写见下:
try:
s = 1 + '1'
int("abc")
f = open('test.txt')
print(f.read())
f.close()
except (OSError, TypeError, ValueError) as error:
print('出错了!\n原因是:' + str(error))
# 出错了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'
try - except - finally 语句
基本格式:
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
finally:
无论如何都会被执行的代码
不管`try`子句里面有没有发生异常,`finally`子句都会执行。
比如:
def divide(x, y):
try:
result = x / y
print("result is", result)
except ZeroDivisionError:
print("division by zero!")
finally:
print("executing finally clause")
divide(2, 1)
# result is 2.0
# executing finally clause
divide(2, 0)
# division by zero!
# executing finally clause
divide("2", "1")
# executing finally clause
# TypeError: unsupported operand type(s) for /: 'str' and 'str'
try - except - else 语句
基本格式:
try:
检测范围
except:
出现异常后的处理代码
else:
如果没有异常执行这块代码
比如:
try:
fh = open("testfile.txt", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print("Error: 没有找到文件或读取文件失败")
else:
print("内容写入文件成功")
fh.close()
#内容写入文件成功
raise语句
raise是用于抛出指定异常,比如:
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
# An exception flew by!