文章目录
一. 标准数据类型
包括:数字、字符串、元组(不可变数据)以及 集合、字典、列表(可变数据) 。
- 使用
type()
查看数据类型,使用isinstance(a, int)
判断数据类型。isinstance
和type
的区别在于:
type()
不会认为子类是一种父类类型。isinstance()
会认为子类是一种父类类型。 is
是判断两个标识符是不是引用自一个对象。 如:x is y
, 类似id(x) == id(y)
, 如果引用的是同一个对象则返回True,否则返回 False。
注:is
与 ==
区别:is
用于判断两个变量引用对象是否为同一个, ==
用于判断引用变量的值是否相等。
二. 字符串
-
使用单引号,双引号完全相同。
-
多行
''' """
自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。 -
\
表示转义。 -
使用
r
可以让语句中的转义取消。 -
+
表示连接,*
表示重复。 -
按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
-
Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
-
Python中的字符串不能改变。
-
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
-
字符串的截取的语法格式如下:变量[头下标:尾下标:步长],左闭右开。
如:print(str[2:5])
# 输出从第三个开始到第五个的字符;print(str[0:-1])
# 输出第一个到倒数第二个的所有字符 -
Python字符串格式化
%
等于格式化字符串的函数str.format()
,在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
如:print("我叫 %s 今年 %d 岁!" % ('小明', 10))
=print("我叫{}今年{}岁!".format('小明', 10))
三. 元组的构建
- 逗号分隔序列值
如:tup = 4,5,6,(7,8) #(4,5,6,(7,8))
- tuple函数创建元组。
- 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
- 元组不可变,元组存在可变对象是可以改变可变对象的。
+
可以增加元组的长度。- 元组的拆包
tup = (4,5,6)
a, b, c = tup #得到b = 5
a, b = b, a #可以直接进行交换
a, *resto or *_ = tup #*resto or *_可以获取剩下的参数
四. 列表
- 创建:
[] or list()
。 - 增,删
append() #末尾插入
insert(pos,value) #特定位置插入
pop() # 末尾删除
pop(0) # 索引删除
remove(value) # 按值删除,只删除第一个
del num[0] # 删除num的第一个元素,del还可以用于删除字典中的键值对
num.sort() # 永久修改,sort(reverse=True) 反序
sorted(num) # 临时排序
num.reverse() # 永久逆置
len()
list(range(2,8,2)) # 2到8的每次+2的数字列表
min()
max()
sum()
2 in num # 检查特定值是否不在列表可以用 not in
- 连接列表:
+ or extend()
。 - 复制列表必须使用切片复制,单纯的复制时行不通的,两个变量指代的是同一个列表。
五. 嵌套推导式
- 列表、集合和字典的推导式
[expr for val in collection if condition] # 先for再condition最后expr
{key-expr:value-expr for val in collection if condition}
{expr for val in collection if condition}
- 嵌套列表推导式
[ [expr for val in collection for val in collection if condition]
#for表达式的顺序应该与嵌套列表推导式里的for循环顺序一致。先第一个for再第二个for再condtion最后expr
- 列表推导式中的列表推导式
[ [expr for val in collection if condition] for val in collection if condition]
#先后面的for再前面的for
六. 参数
- 包括位置参数和关键字参数。
- 位置参数必须再关键字参数的前面,任意顺序指定关键字参数,也可用关键字参数向位置参数传参。
- python函数可以返回多个值。
- 柯里化:部分参数的应用。
如:
add_five = lambda y:add_numbers(5, y) #只使用add_nnumbers()中的y
七. 生成器和迭代器
- 迭代器协议:一种令对象可遍历的通用方法
- 迭代器:一种用于上下文中(for循环)向python解释器生成对象的对象。
- 生成器:包含了yield关键字的函数,它也是一种迭代器,只是它可以返回一个多结果的序列(有多个元素,都会返回出来),每一个元素产生之后会暂停
- 生成器表达式与推导式类似,只是中括号替换为小括号,它可以作为函数的参数。
八. lambda 匿名函数
e=lambda x: x*2 # 变量乘二函数
九. 随机生成二维数组
随机生成(x,y),使用的是tuple,可以换成list
random_points = [(random.randint(1, 100), np.random.randint(1, 100)) for _ in range(100)] # 随机生成100个点
为什么用tuple而不用list呢?
是因为如果想要用set()去除重复的(x,y)需要传入的参数是可以哈希的,tuple可以但是list不可以。
参考:https://blog.csdn.net/pyufftj/article/details/72366631
如果需要list呢?
那就转换呗,需要注意的是如果想最终转换为numpy.ndarray类型,建议先list()再变成np.array()。因为这样输出来的好看些。
points = set(random_points) # 去除重复的点
point = np.array(points)
# point = np.array(list(points))
类型转换参考:https://blog.csdn.net/qq_17753903/article/details/82185012
十. 以某个固定值初始化列表
sample_list = [initial_value]*list_length
十一. 找到列表最大值并且替换
if distance < max(arr):
arr[arr.index(max(arr))] = distance
十二. 二维数组转为一位数组
arr4.flatten()
其他
try/expect/else/finally
:else,try成功之后执行,finally,无论报不报错都要执行Sys.argv[ ]
其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。
详细说明:https://www.cnblogs.com/aland-1415/p/6613449.html
- 使用
with
打开文件再with
结束以后就会自动关闭文件
with
通过__enter__
方法初始化,然后在__exit__
中做善后以及处理异常。
紧跟with
后面的语句会被求值,返回对象的__enter__()
方法被调用,这个方法的返回值将被赋值给as关键字后面的变量,当with
后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()
方法。
详细说明:https://www.cnblogs.com/xiaxiaoxu/p/9747551.html
enumerate(),返回(索引,值);
zip(),将列表、元组或者其他序列的元素配对,新建一个元组构成的列表;
zip(*pitchers),把给定的配对拆分;
reversed(), 倒叙,是个生成器;
sort() 的参数key,可以表示用什么来当作排序的依据;
hash(),用于检测一个对象是否可以成为字典的键;
map(函数,序列)后面的序列按照前面的函数来执行;
strip(),移除字符串开头or结尾的字符,默认为空格or换行符或者字符序列中的字符;
- 文件字节数读和二进制模式读字数是不一样的,
f.tell()
告诉句柄的位置其实是以1开始数的,f.seek(3)
改变位置到3其实到了4的位置上,之后直接读出4的数。