Python入门知识点

基本变量与运算

  • 整数:10xff00int('123')int(1.23)
  • 浮点数:1.231.23e21.2e-5float('1.23')
  • 字符串:'abc'str(123)str(1.23)
  • 布尔值、运算符、布尔表达式:TrueFalseandornot3 > 2
  • 变量(类型不固定,因此无需定义类型):a = 1,a = 'abc'
    vi. 精确除:/,例如 10 / 3 的结果为3.33333333…
    vii. 整数除://,例如10 // 3的结果为3
    viii. 格式化字符串:'Age: %s. Gender: %s' % (25, True)
    ix. 条件判断:(注意python是用缩进来代替{}的,注意判断语句后的冒号)
if a == 0:
    print("a == 0")
elif a == 1:
    print("a == 1")
else:
    print("a is not 0 or 1")

x. 循环:可以用break和continue。

  1. for循环,数组迭代。
for x in [1,2,3]:
    print("x = ", x)
  1. for循环,range迭代。用range(N)生成0 ~ N - 1的整数序列
for x in range(5): 
     print("x = ", x)
  1. while循环。
x = 0
while x < 3:
    x += 1

常用容器类型

list

  • 说明:list也就是常用的数组/链表,数据按顺序存储。
  • 定义:s = ['Apple', 123, ['asp', 'php'],True]
  • 初始化:s = [0] * 100
  • 取出元素:s[1]s[2][1]s[-1](等价于 s[len(s) - 1]
  • 计算长度:len(s)
  • 追加元素:s.append('Adam')
  • 插入:s.insert(1, 'Jack')
  • 扩展(追加列表):s.extend(ss)
  • 删除元素:s.pop(1),默认不加参数为删除最后一个(index = -1)。
  • 排序:s.sort()
  • 查找元素序号:pos = s.index(value)
  • 切片:
    • s[ :3](取前3个元素)
    • s[1:4] (取1~3共3个元素)
    • s[-3: ](取最后3个元素)
    • s[ :10:2] (取前10个元素,每2个取1个,从第一次切片中的0元素开始计数)
    • s[::5](所有元素,每5个取1个,从0元素开始计数)
    • s[:](原样复制一个list)
    • 备注:tuple和字符串也可以按照如上切片规律操作
  • Counter:Counter(list)来计算list中的set以及各个元素出现的次数。

tuple

  • 说明:tuple也即元组,是一旦初始化就不能修改的list
  • 定义:t = ('Michael', 'Bob', 'Tracy'),特例:定义一个元素的tuple, t = (1, )

set

  • 说明:set也即集合,类似于没有重复元素的list
  • 定义:s = set([1, 2, 3]) (要创建一个set,需输入一个list以供初始化)
  • 添加一个元素:s.add(4)
  • 删除一个元素:s.remove(4)
  • 求两个set的交集、并集:s1 & s2s1 | s2

dic

  • 说明:dic也即字典,也就是map,通过键值对(key value)存储数据。
  • 定义:d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
  • 通过key取value:d['Michael']
  • 通过key给value赋值(覆盖value,或者添加键值对):d['Bob'] = 67, d['Az'] = 69
  • 将dict2添加到dict中:dict.update(dict2)
  • 判断元素存在:'Thomas' in d或者d.get('Thomas', -1)
  • 删除键值对:d.pop('Bob')
  • 遍历key:for key in dic:,按排序后的key遍历:for i in sorted (dic) :

常用语法

main函数

main函数可以简单认为是python脚本的起始点,但实际在main之前会执行全局代码段,因此实际不用main函数代码也可以执行。
main函数写法如下:

if __name__ == '__main__':
    print("hello world!")

说明:__name__变量是一个特殊的内置Python变量,它显示当前模块的名称。如果当前函数对应文件为程序执行文件,则__name__被标记为'__main__',否则__name__被标记为模块名称,这可以用于区分当前文件是执行文件还是作为模块被导入的文件。通过下述这种方式在python脚本中标记main函数,可以使得main中的代码在程序作为独立脚本时运行,而作为导入模块时不会运行。

定义函数

格式为:def <函数名>(<参数表>): <表达式>
注意对于python而言,不需要分号断句,但对缩进有严格要求。
函数定义举例如下:

def max(a,b):
   return a if a > b else b

调用函数

直接调即可:
a = max(1,2)

导入函数

格式为:from <文件名> import <函数名> ,文件名不含.py,例如:
from util import timer
如果想全部导入,可以使用:
from util import *

导入模块

直接用import关键字导入即可,例如:
import sys
import numpy as np
如果运行提示没有安装对应模块,可以使用pip install <package name>来安装。

执行顺序

python程序执行顺序是按照全局代码块到main函数来执行的,因此对于下述代码,执行顺序是:
导入sys模块 -> 执行global变量a初始化赋值 -> 执行global打印 -> 执行main函数 -> 执行test函数 -> 执行变量a赋值

import sys
a = 1
print("global")
def test():
    print("test")
if __name__ == '__main__':
    print("main")
    test()
    a = 2

常用第三方库使用方法

numpy

说明:numpy是一个数学库,主要用于数组和矩阵的计算。

  • 生成矩阵:
    • 生成一维矩阵:np.array([1,2,3,4])np.array(range(1,5))np.arrange(5)
    • 生成二维矩阵:np.array([1,2],[3,4])np.array([1,2,3,4]).reshape(2,2)
    • 生成零矩阵:np.zeros(shape=(2,2))
    • 生成一矩阵:np.ones(shape=(2,2))
    • 生成n * n的单位矩阵:np.identity(n)np.diag([1] * n)np.eye(n)
  • 矩阵最大、最小、平均值:np.max(img)np.min(img)np.mean(img)
  • 矩阵按值筛选,生成0、1掩膜矩阵:img < 3.14
  • 矩阵变形:A.reshape(m,n)
  • 带通截止:np.clip(img, thresh_low, thresh_high)
  • 矩阵点乘A·B:np.dot(A,B)或者A.dot(B),按位乘Ai*Bi:A * B
  • 矩阵叉乘AxB:np.cross(A,B)
  • 求矩阵的模:np.linalg.norm(A)
  • 求矩阵的逆:np.linalg.inv(img)
  • 求矩阵的转置:A.TA. transpose()

pyplot

说明:pyplot是Matplotlib 的子库,提供了和MATLAB 类似的绘图API,主要用于科学绘图。

  • 导入pyplot:from matplotlib import pyplot as plt
  • 各种图绘制:
    • 散点图:plt.scatter(x,y, s = 5),其中x、y为数据对应的list,下同。
    • 点线图:plt.plot(x,y,label='a',color='g',marker='o', linewidth=1, alpha=0.6)
    • 直方图:plt.hist(x, color = "g")
    • 柱状图:plt.bar(x,y,label='pass',alpha = 0.6,fc = 'c'),可用Counter(origin_list)将一个有原始数据的list转换为统计频度的map,map的key为list中的各数据,也即x,value为出现的次数,也即y
    • 在同一坐标轴中绘制两套数据:以绘制对比柱状图为例,再次调用plt.bar([x1+0.1 for x1 in x], y, label = 'fail',alpha = 0.6,fc = 'r'),其中x1+0.1是将第二套数据在坐标轴中总体偏移0.1,用于区分两套数据。
    • 绘制多个子图:plt.subplot(NMi),绘制NM列的第i张图,例如121指绘制12列子图中的第1张图。
  • 图片参数修改:
    • 修改图片标题:plt.title(str)
    • 调整x、y轴坐标刻度:plt.xticks(x_label)plt.yticks(y_label),其中x_labely_label为希望标注的刻度值的list。
    • 设置x、y轴标题:plt.xlabel(str)plt.ylabel(str)
    • 设置图例:plt.legend(loc='upper center', shadow=True, fontsize='x-large'),根据plot的label自动设定图例文字。
    • 边缘留白:plt.margins(2, 2)
    • Subplot间距:plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0),前四个参数为整幅图在画面中的上下左右位置,1代表是100%,hspacewspace代表副图间隔与单幅图的大小比例。说明见:https://blog.csdn.net/ggt55ng6/article/details/88879689
    • 图片大小:plt.figure(figsize=(60,60))
    • 可用marker标记:
      image.png

OpenCV

说明:OpenCV是一个计算机视觉库,主要用于图像处理。

  • 读取图像:img = cv2.imread(img_dir, cv2.IMREAD_UNCHANGED)
  • 写出图像:cv2.imwrite(path, img)
  • 获取图像宽高与位数:img.shapeimg.dtype
  • 获取BGRA通道:b,g,r,a = cv2.split(img)
  • 合并成新图:img = cv2.merge((b, g, r, a))
  • 缩放:new_img = cv2.resize(img, (new_w,new_h), fx=x_ratio, fy=y_ratio, interpolation=cv2.INTER_AREA)
  • Padding:new_img = cv2.copyMakeBorder(img, pad_top, pad_bottom, pad_left, pad_right, cv2.BORDER_CONSTANT, value=0)

Dataframe

说明:Dataframe是pandas库的一个表格型的数据结构,在对表操作时会用到。

  • 生成空的Dataframe:df = pd.Dataframe()
  • 从csv中读取:df = pd.read_csv(file_path,index_col="index")
  • 列名列表:df.columns
  • 行名列表:df.index
  • 增加一列:df[key] = val
  • 修改列名:df.rename(columns={'a':'A'})
  • 按行列获取数据:df.loc[index_a, COL_A],获取index_a行,COL_A列的数据
  • 按某一列值获取数据:df.loc[df[df[key_a] == val_a].index.tolist()[0], key_b]key_a列为val_a的第一行中,key_b列的值。
  • 筛选A列数据并返回筛选后的dataframe:df [df[COL_A] > val]
  • 筛选A列数据并返回对应B列的值:list(df [df[COL_A] > val][COL_B])
  • 增加一条数据:
s = pd.Series(list(infoMap.values()),index=infoMap.keys())
df.append(pd.DataFrame({nid:s}).T)
  • 去重:df.drop_duplicates(COL_A)
  • 删除指定列:df.drop(columns=[COL_A, COL_B, COL_C])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容