关于python的各种小补充

1. python2中文本的默认编码方式为ASCII,有中文字符的话开头必须指定编码方式:

 否则会出现编码错误:

2. 一些特别的内置函数:

 1 #执行python代码
 2 exec("print('hello')")
 3 
 4 #函数用于检查一个对象是否是可调用的。如果返回 True,object 仍然可能调用失败;但如果返回 False,调用对象 object 绝对不会成功。
 5 callable(type)
 6 
 7 #complex() 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数
 8 complex(1, 2)
 9 
10 #bytearray() 方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256
11 bytearray([1,2,3])
12 
13 #vars() 函数返回对象object的属性和属性值的字典对象
14 vars(type)
15 
16 #zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表,且元素个数与最短的列表一致
17 a = [1,2,3]
18 b = [4,5,6]
19 zipped = zip(a,b)
20 print(*zipped)
View Code

 3. 系统终端中运行代码的时候,注意换行符\n或者\r\n也占用一个字符位置

 4. 模拟一个进度条

\r 代表回到行头

import time
import sys
a = range(20)
for num, i in enumerate(a):
    time.sleep(0.2)
    sys.stdout.write('\r' + '[' + ''*(num + 1)  + '  '*(len(a) - num) + ']' )
    sys.stdout.flush()

5. 改变字体和背景颜色

实现过程:
      终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。
      转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033)。
 
书写格式:
     开头部分\033[显示方式;前景色;背景色m + 结尾部分:\033[0m
     注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个;另外由于表示三个参数不同含义的数值都是唯一的没有重复的,所以三个参数的书写先后顺序没有固定要求,系统都能识别;但是,建议按照默认的格式规范书写。
     对于结尾部分,其实也可以省略,但是为了书写规范,建议\033[***开头,\033[0m结尾。
 
数值表示的参数含义:
显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、 5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)

常见开头格式
\033[0m            默认字体正常显示,不高亮
\033[32;0m       红色字体正常显示
\033[1;32;40m  显示方式: 高亮    字体前景色:绿色  背景色:黑色
\033[0;31;46m  显示方式: 正常    字体前景色:红色  背景色:青色
实例:
  (1)print("\033[1;31;40m您输入的帐号或密码错误!\033[0m")  
  上方代码的输出格式为:字体高亮,红色前景,黄色背景      PS:前景色也就是字体的颜色
  
  (2)print("\033[0;31m%s\033[0m" % "输出红色字符")
  #上方代码的输出格式为:字体默认,红色前景
  
1 import time
2 import sys
3 a = range(30)
4 for num, i in enumerate(a):
5     time.sleep(1)
6     fill = '\033[33;m■\033[0m'
7     sys.stdout.write('\r' + '[' + fill*(num + 1)  + '  '*(len(a) - num) + ']' )
8     sys.stdout.flush()
带色彩的进度条

 #numpy 补充

#numpy.where

numpy.where() 有两种用法:

1. np.where(condition, x, y)

满足条件(condition),输出x,不满足输出y。

 1 import numpy as np
 2 
 3 a = np.array([[1,2,3,4],[3,4,5,6]])
 4 # 将 1 < a < 5 之外的元素设置为nan
 5 c = np.where(a > 1, a, 0)
 6 print(c)
 7 d = np.where(c < 5 , c, 0)
 8 print(d)
 9 print(np.where(d == 0, np.nan, d))
10 
11 # 将 2 < a < 5之间的数设为nan
12 c = np.where(a < 2, a, 0)
13 print(c)
14 d = np.where(a > 5 , a, c)
15 print(d)
16 print(np.where(d == 0, np.nan, d))

 

2. np.where(condition)

只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

#matplotlib补充

#path

将多个点创建成多边形,并可判断点是否在多边形内

from matplotlib import path
#创建多边形
a = path.Path(np.array([[0,0],[2,0.5],[0,1],[1,0],[0.5,2],[2,2]]))
#判断是否在其内
print(a.contains_point([1.9,0.5]))

 #collections下的各种实用方法

#有序的字典OrderedDict()与Counter()

 1 #利用有序的字典来完成计数并排序(计数相同的以第一次出现的顺序排列)
 2 import collections
 3 data = [2, 1, 1, 1, 4, 3, 5, 5, 6]
 4 dic = collections.OrderedDict()
 5 for i in data:
 6     if dic.get(i):
 7         dic[i] += 1
 8     else:
 9         dic[i] = 1
10 count = sorted(dic.keys(), key=lambda x: dic[x], reverse=True)
11 print(count)
12 
13 #利用Counter可以更快的实现此功能
14 print(collections.Counter(data).most_common())

 

#位运算

https://blog.csdn.net/Caysen/article/details/78129113

 

posted @ 2019-11-22 14:49  Matrixssy  阅读(229)  评论(0)    收藏  举报