美文网首页
类型和运算

类型和运算

作者: szn好色仙人 | 来源:发表于2018-03-30 22:06 被阅读0次

杂记

  • dir获取对象属性, help获取帮助, type得到对象类型,isinstance可以用来类型测试
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> help(list.pop)
Help on method_descriptor:

pop(...)
    L.pop([index]) -> item -- remove and return item at index (default last).
    Raises IndexError if list is empty or index is out of range.

>>> type([])
<class 'list'>
>>> isinstance([], list)
True

数字

  • python数字类型的完整工具包括:整数和浮点数、复数、固定精度的十进制数、有理分数、集合、布尔类型、无穷的整数精度、各种数字内置函数和模块
#八进制、十六进制、二进制、复数
>>> 0o10, 0x0A, 0b1100, (3 + 4j) + complex(1, 2), len(str(2 ** 100))
(8, 10, 12, (4+6j), 31)
  • hex、oct、bin把一个整数转换为对应进制表示的字符串。int(str, base)根据给定的进制把字符串转为一个整数
#数字与字符串转换
>>> hex(0x12), oct(0o10), bin(10), int('0x12', 16), int('10', 9)
('0x12', '0o10', '0b1010', 18, 9)
  • 表达式操作符
操作符 描述 例子 结果
x if y else z 三元选择表达式 1 if True else 2
1 if False else 2
1
2
x or y 逻辑或
x and y 逻辑与
not x 逻辑非
in, not in 成员关系 1 in [1, 2] True
is, is not 对象实体关系测试
(基于内存身份的比较)
/ 除法 1 / 2 0.5
// 除法 向下取整 -5 // 2, 5 // 2, 5.0 // 2 (-3, 2, 2.0)
** 幂运算 2 ** 3 8
(...) 元组,表达式,生成器表达式
{...} 列表,列表解析
[...] 字典、集合、集合和字典解析
x[i:j:k] 分片 [1, 2, 3, 4, 5, 6][1:4:2] [2, 4]
< <= > >= == != |
^ & << >> ~ + - * x[i] x(...) x.attr
与C中表现一致

比较操作可以连续进行:1 < 2 < 0, 1 < 2 < 3 结果:(False, True)

>>> [0 and 'a', 1 and 'b', 2 or 'c', False or 'd', True and 'a' or 1]
[0, 'b', 2, 'd', 'a']
  • math模块包含了C语言中math库的绝大部分工具
>>> import math
>>> math.log10(100)
2.0
  • random模块提供了随机数支持
>>> import random
>>> random.random()  #提供0-1之间的任意浮点数
0.5158813464733368
>>> random.randint(1, 10)
9
>>> random.choice([1, 3, '4'])
3
  • 小数是具有固定精度的浮点值 由 decimal 模块进行支持

  • 分数明确的保留了分子和分母,由 fractions 模块进行支持

  • 集合是一些唯一的、不可比变的对象的无序组合,支持数学理论上的集合的操作。集合只能包含不可变的对象类型,因此字典和列表不能嵌到集合中

>>> set({1, 'a', 2 - 1})
{'a', 1}
  • 集合解析:运行一个循环并在每次迭代时收集一个表达式结果,通过一个循环变量来访问当前迭代值以用于集合表达式中
>>> {x ** 2 for x in [1, 2, 3]}
{1, 9, 4}

动态类型

  • 在python中,类型属于对象而非变量名,每一个对象有两个标准头部信息:一个类型标示符,一个引用的计数器(python中的垃圾收集主要基于引用计数器)。每当一个变量名被赋予一个新对象时,之前那个对象若没有被别的变量名或对象引用的话,那么其占用内存就会被释放,这种计数被称为垃圾收集。变量总是一个指向对象的指针,而不是可改变的内存区域的标签,给变量赋一个新的值,并不是替换了原始的对象,而是让这个变量去引用了另一个完全不同的对象
>>> v0 = 1
>>> v1 = v0
>>> v1 = 2
>>> print(v0, ',', v1)
1 , 2
>>> L0 = [1]
>>> L1 = L0
>>> L2 = L0
>>> L1 += ['a']
>>> L2 = 1
>>> print(L0, ',', L1, ',', L2)
[1, 'a'] , [1, 'a'] , 1
  • sys模块getrefcount()可以得到对象的引用次数
>>> import sys
>>> sys.getrefcount(1)
1127

字符串

  • python中并有没单个字符这种类型,取而代之的是可以使用一个字符的字符串。字符串被划分为不可变序列这一类别,意味着其不可在原处被更改。空字符不会去结束一个字符串,实际上,python中没有字符会结束一个字符串。python会以十六进制显示非打印字符。

  • 转义

转义 意义
\newline 表示连续
\other 不成转义时,保留\
其他 类似C的转义

raw可以抑制转义,raw字符串不能以奇数个\结尾

  • 常见的字符串表达式
操作 解释 结果
'' 空字符串
's"zn' 双引号和单引号相同 's"zn'
's\0\z\n' 转义 's\x00\\z\n'
r's\0\z\n' Raw字符串 's\\0\\z\\n'
"""..."""
'''...'''
三重引号字符串块
'a' + 'b' 合并 'ab'
'a' * 3 乘法 'aaa'
'abc'[1]
'abc'[-1]
索引 'b'
'c'
len('a') 求长度 1
'abc'.find('bc') 搜索 1
'abc'.replace('ab', 'sz') 替换 'szc'
'abc'.split()
'a b c'.split()
'a,b,c'.split(',')
分隔 ['abc']
['a', 'b', 'c']
['a', 'b', 'c']
'-'.join('abc') 插入分隔符 'a-b-c'
'你好'.encode('utf8')
'你好'.encode('gb2312')
'你好'.encode()
'你好'.encode('utf16')
转码 b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xc4\xe3\xba\xc3'
b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xff\xfe`O}Y' #0xFFFE是前缀
b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode()
b'\xc4\xe3\xba\xc3'.decode('gb2312')
b'\xff\xfe`O}Y'.decode('utf16')
b'\x60\x4f\x7d\x59'.decode('utf16')
解码 你好
你好
你好
你好
'a'"b"'c' 自动合并 "abc"
  • 索引与切片


>>> s0 = '0123456789'
>>> s0[:]
'0123456789'
>>> s0[::]
'0123456789'
>>> s0[2:5]
'234'
>>> s0[2::2]
'2468'
>>> s0[::2]
'02468'
>>> s0[::-2]
'97531'
>>> s0[3:-2]
'34567'
>>> s0[5:1:-1]
'5432'
  • 字符串转换
函数 说明 例子 结果
chr 将ASCII码转为字符 chr(115) 's'
ord 将字符转为ASCII码 ord('s') 115
int 将字符串转为整数,可指定进制
float 将字符串转为浮点值 float('1.1') 1.1
str 转为字符串 str([12, '3'])
str({1})
str('1')
"[12, '3']"
'{1}'
'1'
repr 转为字符串 repr([12, '3'])
repr({1})
repr('1')
"[12, '3']"
'{1}'
"'1'"
  • 尽管str(),repr()在特性和功能方面都非常相似,事实上repr()返回的是一个对象的“官方”字符串表示,也就是说绝大多数情况下可以通过求值运算(使用内建函数eval())重新得到该对象,但str()则有所不同。str()致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值,但很适合用于print语句输出。需要再次提醒的是,并不是所有repr()返回的字符串都能够用 eval()内建函数得到原来的对象。eval()将字符串当成有效的表达式来求值并返回计算结果,往往运行较慢,它实际上会作为程序的一个片段编译并运行这个字符串。

  • 字符串格式化方法一:
    字符串格式化表达式:是基于C语言的printf模型:在%操作符的左边放置一个需要进行格式化的字符串,这个字符串带有一个或多个嵌入的转换目标均已%开头,在%操作符右边放置一个或多个对象,这些对象将会插入到左侧格式化字符串中

格式化操作符 意义
s 字符串或任意对象
r s, 但使用repr,而不是str
c 字符
d 十进制整数
i 整数
u 无符号整数
o 八进制整数
x, X 十六进制整数
e, E 浮点指数
f, F 浮点十进制
g, G 浮点e E或f F
% 常量%
>>> 'Hello %% %s %s %s szn' % ([1, '2'], 3, {4})
"Hello % [1, '2'] 3 {4} szn"
控制 意义 例子 结果
- 左对齐 '%-05.2f' % 1.234 '1.23 '
+ 正负号 '%+5.2f' % 1.234 '+1.23'
0 补零 '%05.2f' % 1.234 '01.23'
* 表示由用户指定 '%0*.*f' % (5, 2, 1.1) '01.10'

基于字典的字符串格式化:

>>> '%(n)s %(x)s' % {"n" : 1, "x" : 'szn'}
'1 szn'
  • 字符串格式化方法二:
    字符串格式化调用方法:可以通过位置或者key,可以添加键、属性、偏移量
>>> '{0}, {2}, {1}, {name}'.format('a', 'b', 'c', name = 1)
'a, c, b, 1'
>>> import sys
>>> '{N[0]}, {0.platform}, {1[H]}'.format(sys, {"H" : "W"}, N = [1, 2])
'1, win32, W'

添加格式具体化(稍微举几个例子,书里BBB一大堆,不乐意看)

>>> '{0}, {1:0>10}'.format(0, 's')
'0, 000000000s'
>>> '{0}, {1:0<10}'.format(0, 's')
'0, s000000000'
>>> '{0}, {1:0^10}'.format(0, 's')
'0, 0000s00000'
>>> '{0:b}'.format(10)
'1010'
>>> '{0:X}'.format(10)
'A'
>>> '{0:.2f}'.format(1.234)
'1.23'
>>> '{0:0{1}.{2}f}'.format(1.234, 5, 2)
'01.23'

列表与字典

  • 列表与字典都可以在原处修改,也可以增长或缩短,可以包含任意对象或被嵌套。列表是有序的,可以通过下标访问。字典是无序的,可以通过键访问

  • 常用的列表操作

操作 解释 结果
list('abc') 由可迭代项目生产一个列表 ['a', 'b', 'c']
len([1, 2, 3]) 获取长度 3
[1, 2, 3][:]
[1, 2, 3][1: 3]
切片 [1, 2, 3]
[2, 3]
[1, 2] * 2 乘法 [1, 2, 1, 2]
L[i:j] = [] 切片赋值
[...] 列表解析
>>> L = list('0123456')
>>> del(L[0])
>>> del[L[1:3]]
>>> L
['1', '4', '5', '6']

>>> L = list('0123456')
>>> L[0:3] = list('abc')
>>> L
['a', 'b', 'c', '3', '4', '5', '6']

>>> [x * 2 for x in "123"]
['11', '22', '33']

>>> list(map(abs, [-1, 1]))
[1, 1]
  • 常用字典操作
>>> d = {'v' : 1, 'n' : 's'}
>>> len(d)
2
>>> del d['v']
>>> d
{'n': 's'}
>>> {x : x ** 2 for x in [1, 2]}
{1: 1, 2: 4}
>>> dict([('n', 'v'), (1, 2)])
{1: 2, 'n': 'v'}
  • 任何不可变对象都可以作为字典的键

  • dict.keys()返回的python3.0的视图对象类似于集合,支持交并集等集合操作,dict.values()返回的视图不是唯一的,所以不支持集合操作,dict.items()支持

元组、文件及其他

  • 元组不能在原处进行修改,是有序的,支持包含其他复合对象,支持嵌套。元组的不变性只适用于元组本身顶层,不适用与元组中的元素
>>> (10)
10
>>> (10,)
(10,)
>>> tuple("123")
('1', '2', '3')
>>> t = ([],)
>>> t[0].append(1)
>>> t
([1],)
  • 文件
常见文件操作 解释
fp = open(r'D:\1.dat', 'w') open创建文件输入输出,默认打开方式为 r
fp.read 一次性读取文件或读取指定的N个字节到字符串
fp.readline 读取一行到字符串
fp.readlines 读取整个文件到字符串列表
fp.write 写入字符串到文件
fp.writelines 把列表内的所有字符串写入文件
fp.close 关闭文件
fp.flush 刷新
fp.seek 设置文件位置
fp.tell 获取文件位置
for line in open(r'D:\1.dat') : use line 迭代使用文件
open(r'D:\1.dat', encoding = 'utf8') 打开utf8文件
  • pickle模块能让我们直接在文件中存储几乎任何python对象
>>> fp = open(r'D:\1.dat', 'wb')
>>> v = [1, [2, {3, 'a'}, {4 : 'b'}], 5]
>>> import pickle
>>> pickle.dump(v, fp)
>>> fp.close()
>>> 
>>> fp = open(r'D:\1.dat', 'rb')
>>> vOut = pickle.load(fp)
>>> vOut
[1, [2, {3, 'a'}, {4: 'b'}], 5]
  • 切片以及copy方法只能做顶层复制,不能够复制嵌套的结构,若需要拷贝深层嵌套则需要使用copy模块的deepcopy
>>> v = [[0], 1]
>>> v1 = v.copy()
>>> v2 = v[0:1]
>>> v1[0].append('a')
>>> v1[1] = 2
>>> v, v1, v2
([[0, 'a'], 1], [[0, 'a'], 2], [[0, 'a']])

>>> v = [[0], 1]
>>> import copy
>>> v1 = copy.deepcopy(v)
>>> v1[0].append('a')
>>> v, v1
([[0], 1], [[0, 'a'], 1])

相关文章

  • 代码学python

    * coding: utf-8 * """类型和运算----类型和运算----类型和运算----类型和运算----...

  • 类型和运算

    杂记 dir获取对象属性, help获取帮助, type得到对象类型,isinstance可以用来类型测试 数字 ...

  • PHP入门之︰数据类型转换

    PHP中的变量的运算,必须是同类型才能运算,如果类型不同,要转成同类型才能运算。变量类型转换分为:自动转换和强制转...

  • scala 数据类型和操作符

    1.值类型和引用类型值类型是类类型,没有基本数据类型和包装类之分 操作符 数学运算符:+-*/%关系运算符:< >...

  • Python学习记录

    变量、运算符与数据类型 注释: 运算符 变量和赋值 数据类型与转换

  • C语言的指针(进阶篇章之一)

    指针运算 切记一点就是:指针的运算包括数值和类型。 一、赋值运算 在进行指针的赋值运算时,要注意的是不同类型指针虽...

  • 2019-07-20

    数据类型和运算符。

  • MySQL 中的运算符(一)

    MySQL 支持多种类型的运算符,来连接表达式的项。这些类型主要包括算术运算符、比较运算符、逻辑运算符和位运算符。...

  • 3、运算符

    JS有四种运算类型,分别是:算术运算、赋值运算、比较运算和逻辑运算。 算术运算符: 1、+ 加运算- 用于numd...

  • 基本数据类型和复杂数据类型的转化和运算归纳

    一、基本类型的运算 1、字符串之间的运算 2、数字类型之间,数字类型与字符串类型之间的运算 二、复杂类型的运算 三...

网友评论

      本文标题:类型和运算

      本文链接:https://www.haomeiwen.com/subject/acdwcftx.html