Python笔记,常用语法

Python笔记,常用语法

主要内容:
从2019年初入门Python起的学习笔记,亲测有效,整理发文
前半部分是Python常用语句、结构、函数、模块笔记等
后半部分还会加入关于深度学习和pytorch的内容

(持续更新,随手笔记,更新内容不确定)

  1. def Abc(): # 定义函数
    def(<输入参数>):
      <函数体>
      return <结果>
    <输入参数>中必选参数放在前面,调用时必选给定值,可选参数放在后面,调用时不给定值则使用默认值。
    当输入参数的个数不确定时,使用 *<变量名> 代替,如 *p,调用参数时可以输入任意数量值,最后被打包成一个序列。
    lambda函数,也是定义函数的一种方式,但还是建议用def

  2. assert # 断言
    assert W % 32 == 0 # W对32取余必须等于0,否则触发异常中断

  3. 注释
    有两种:一般用 # ,pycharm快捷键[ Ctrl + / ];另一个是多行注释用 两个三引号分别表示注释的开头和结尾。

  4. global # 定义全局变量
    主函数和子函数将同一个变量名定义为global

  5. 定义在主函数中的非全局变量可以直接在子函数中被引用,但是不能被幅值,即出现在等号左边,如果这样做则变成局部变量。
    但是定义在主函数中的列表,其元素可以在子函数中修改

def printf():
    for i in range(2):
        x[i]=x[i]**2
    print(x)
if __name__ == '__main__':
    x=[2,3]
    printf()
>>>[4, 9]
  1. 交互式输入 ,格式 : <变量> = input("<提示信息>")
X=input("请输入X的值:\n")
print(X) 
  1. print打印输出用法
X = 2
# 格式: print(“xxx{}xxx”.format(<要显示的参数>))
print("输出结果为Y={:.2f}".format(X)) 

format用法

# 不设置指定位置,按默认顺序
print("{} {}".format("hello", "world"))  
# 设置指定位置
print("{1} {0}".format("hello", "world")) 
print( "{1} {0} {1} {1}".format("hello", "world") )

format的其他格式
format的其他用法
字符串和数字同理,把上表的d改成s即可。

format的另一种简单写法:

print("{} {}".format("hello", "world"))  
#上一行等于如下
print(f"{'hello'} {'world'}")

print输出彩色字体,可以修改 字体格式、字体颜色,背景颜色

# 4;31;42是三个参数,<显示内容>可修改,其余部分格式固定
print('\033[4;31;42m<显示内容>\033[0m')

三个参数非必选,不重复,只要写上参数系统就能认出
其他参数
print的字体格式

  1. ‘\r \b \t \n ‘ # 操作光标回到当前行首\光标退回一个\输出制表符\换行,
    \b使光标退回一格的同时会删除刚才那一格的内容,同理\r会删除整行。

  2. 不换行输出打印
    print(’ …’,end=’’) # print结束不换行,在行尾继续打印(默认是换行)
    print(’ \r…’,end=’’) # print结束不换行,并将光标回到行首,下次打印时覆盖前面的输出。

  3. 进度条tqdm函数

import tqdm,time
l1 = range(1000)
jdt= tqdm.tqdm(l1,desc= ('<开头添加显示信息>')) #或者在循环中间加
for i in jdt: 
    time.sleep(0.1)
    #do something 
    #jdt.set_description(str('<修改开头信息>'))
    pass 
  1. matplotlib.pyplot 画图函数
    import matplotlib.pyplot as plt # 需要安装PyQt5(5.10版本可以)
    plt.figure(1) #创建图表1
    plt.subplot(223) #创建2*2的图表矩阵,绘制的子图为矩阵中的3序号序号从1开始
    plt.show() #显示所有图,阻塞模式最后必须有这句话才能显示出图,区别于交互模式
    plt.plot(x,y) # 参考链接
    plt.scatter(x,y,c = ‘r’,marker = ‘o’) # 散点图,c = 'r’表示散点的颜色为红色,marker 表示指定三点
    plt.savefig(“filename.png”) # 在plt.plot,plt.scatter 等这些画图函数之后,不一定plt.show()
    plt.grid() # 打开/关闭网格线#
    plt.grid(axis=“x”) # 打开/关闭网x方向的格线
    plt.ion() # 打开交互模式(默认是阻塞模式)
    交互模式下,plt.plot(x)或plt.imshow(x)是直接出图像,不需要plt.show(),但是图像一闪而过,需要使用plt.pause(1e-16)才能使图像显示出来。
    阻塞模式下,使用plt.plot(x)或plt.imshow(x)后,需要plt.show()后才能显示之前想画的所有图像,并且显示图像之后程序在plt.show()处停止不自动往下运行。

    实时绘图需要先打开交互模式,然后加上ply.pause(0.001)显示动态图。
    ###添加图例

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1, 10,0.01)
l1, = plt.plot(x, np.cos(x), 'r')    # 注意逗号
l2, = plt.plot(x, np.log(x), 'b')
plt.legend([l1, l2], ['cos(x)', 'log(x)'], loc='upper right')  # loc表示位置;
plt.show()

	*loc的其他选择*:
	'best'        : 0, (only implemented for axes legends)(自适应方式)
	'upper right'  : 1,
	'upper left'   : 2,
	'lower left'   : 3,
	'lower right'  : 4,
	'right'       : 5,
	'center left'  : 6,
	'center right' : 7,
	'lower center' : 8,
	'upper center' : 9,
	'center'      : 10
#### 动态图 #####
import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure()
plt.ion()  #interactive mode on
for t in range(1800): 
    obsX= np.cos(t)
    obsY= np.sin(t*3)
    line = plt.scatter(obsX,obsY,c='b',marker='.')  
    plt.pause(1e-98)
    # line.remove() # 删除旧个轨迹
########多个figure之间轮流操作########
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
plt.figure('we') # 窗口名称唯一
plt.scatter(np.arange(1, 10,0.01), np.sin(np.arange(1, 10,0.01)), c='b', marker='.')  
plt.pause(1e0)

plt.figure(3)  # 窗口名称唯一
plt.scatter(np.arange(1, 10,0.01), np.sin(np.arange(1, 10,0.01)), c='y', marker='.')  
plt.pause(1e0)

plt.figure('we')  # 切换到该名称的窗口
plt.scatter(np.arange(1, 10,0.01), 1.5*np.sin(np.arange(1, 10,0.01)), c='k', marker='o')  
plt.grid()
plt.pause(1e0)

plt.figure(3)  
plt.scatter(np.arange(1, 10,0.01), 2*np.sin(np.arange(1, 10,0.01)), c='r', marker='.')  
plt.grid(axis="y")
plt.pause(1e0)
  1. for循环结构
    break:打断循环
    continue :在continue处停下,不执行continue后面的语句,然后执行下一次循环
    for i in rang(M,N): # i从M到N-1循环,没有M则默认0
    for i in rang(M,N,k) : # # 从[M,N)以k为步长
    for i in rang(N,M,-1): # i从M到N+1逆序循环
    for i, element in enumerate(list0): #返回索引和列表内容
    for c in s : # 循环读取字符串中的内容
    for i,j in zip(x,y): # 同时循环读取x和y的内容
for i in range(1,15,2) : # 循环
    print(i)
else : #如果循环中没有break,那么循环结束时执行else
    print('end end')
  1. 二进制表示以0b开头,十六进制 0x开头,默认使用十进制。

  2. 浮点数计算注意不确定尾数的存在,即计算结果出现很小幅度的摆动,所以尽量不要用 ‘ = ’ 比较两个浮点型,可以使用函数round(x,d)四舍五入,d是截取保留小数位数,缺省则0,取整数部分
    如果要比较a=b? 可以写成 if abs(a-b)<e-8:

  3. cv2 库函数 # 图像处理相关
    import cv2
    img = cv2.imread(“pic.jpg”) # 读取图片
    cv2.imshow(“Windowname”, img) # 显示图片
    cv2.waitKey(1) # 必须有,延迟时间函数,单位为毫秒,只能用于有窗口的情况,至少等待1ms,才能使图片显示出来。
    cv2.waitKey(10) #等待10ms,若此期间有输入按键则返回按键的ASC2,否则返回-1
    cv2.waitKey(0) #无限延迟,只有摁下任意键才会继续运行
    imwrite(imagefile, frame) # 保存图片,不能包含中文路径
    cv2.imencode(’.png’, img)[1].tofile(<路径+名称>) #保存图片,可以包含中文路径
    img1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # cv2图像三通道的排列格式默认为BGR,用此函数转成RGB
    cv2.namedWindow(“name”,cv2.WINDOW_NORMAL)#新建一个显示图像的窗口,窗口格式默认cv2.WINDOW_AUTOSIZE
    cv2.destroyAllWindows() # 关闭窗口
    namedWindow说明:
    cv2.namedWindow(“name”,cv2.WINDOW_FREERATIO) # 画面不保持当前长宽比
    cv2.namedWindow(“name”,cv2.WINDOW_KEEPRATIO) # 画面保持当前长宽比
    cv2.namedWindow(“name”,cv2.WINDOW_AUTOSIZE) # 画面为原图大小不随窗口变化
    cv2.namedWindow(“name”,cv2.WINDOW_NORMAL) #根据窗口大小自动调节画面大小
    #在图片上写字
    cv2.putText(img,textinf,org=(5,10),fontFace=1,fontScale=1,color=(0,0,255)) # (图片,文字,左上角坐标, 字体=1, 大小=1,颜色=(b,g,r))
    #在图上画矩形框,标签
    cv2.rectangle(frame,pt1=(23,55),pt2=(67,77),color=(0,0,255),thickness=1,lineType=1) # (图片,左上角,右下角,颜色,线宽(b,g,r),线型)

# 使用RTSP协议调用本地网络摄像头,下面的使用海康摄像头没问题
import cv2
user = 'admin' # 打开摄像头的用户名
password = '123456' # 登录密码
ip = '169.254.175.2' # 摄像头的IP地址
url = f'rtsp://{user}:{password}@{ip}'
cap = cv2.VideoCapture(url)
while(cap.isOpened()):
    # Capture frame-by-frame
    ret, frame = cap.read()
    # Display the resulting frame
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
  1. if else 结构
    if <>:
    <>
    elif <>:
    <>
    else <>:
    <>
    另一种写法 t = 1 if ‘a’==‘b’ else 0 # 必须有else

  2. Python的保留字
    保留字

  3. 运算

说明写法
逻辑与x and y
逻辑或x or y
逻辑非not x
大于>
大于等于>=
小于<
小于等于<=
等于==
不等于!=
  1. try … except 异常情况处理
    有时候程序会出现一些错误或异常导致程序终止,用try…except就不会因为异常而中断。把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except,但else和finally不一定有。
import numpy as np
try:
	num=eval(input("请输入整数:")) # 正常输入和处理
	print(np.zeros(shape=(num,num)))	
except Exception as e:
    print('错误类型是',e.__class__.__name__)
    print('错误明细是',e):   # except后面可以加指定类型异常的名称
    
else:
    print("输入的是",num) #如果无异常则执行
finally:
    	print("创建一个全1矩阵") #是否异常都必须执行的语句

try不只是可以用来可能存在异常的语句,还可以当成if else,如

x = [520,'520']
y = '1314'
print('\n>>>if else')
for t in x:
    if isinstance(t,int): # int 的一个实例
        print(f'it is a num')
        print(t+int(y))
    else:
        print(f'it is a str')
        print(t+y)

print('\n>>>try except')
for t in x:
    try:
        print(f'it is a num')
        print(t+int(y))
    except:
        print(f'it is a str')
        print(t+y)
  1. eval() 简单用法
    eval(str) # 将字符串中的内容转化为可执行语句,不能是带等号的幅值
a = "print(f'{b}')"
b = eval('str(520)')
eval(a)

20200430 忙于毕设,好久没更新了,在写,待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值