【Python】Python语言 3小时速通(有C语言基础版)

python从入门到实践

变量

message="hello world"

并不需要指出变量类型

方法

tittle()#以首字母大写的形式输出单词
upper()#全部大写输出
lower()#全部小写输出

存储数据时经常使用lower,因为无法确保数据是大写还是小写

rstrip()#输出删除字符串尾部多余的空格后的值
lstrip()#输出删除字符串头部多余的空格后的值
strip()#输出删除字符串两边多余的空格后的值

从这里可以看出python对于数据和字符处理具有很多优势

range(1,5,2)#从一到四找一个随机数,步长为2
value**2#value的平方

字符串拼接

message="hello world"
message2="python"
print(message.title()+" "+message2)

直接通过加号的形式拼接

打印换行符和制表符

"\t"#制表符
"\n"#换行符

他们都相当于字符(串)

强转

str(23)

不强转会报错

注释

用#而不是//

列表

增加元素

类似于数组,访问方式同数组

append()#在列表末尾添加一个元素
str.append('a')
insert()#在数组特定位置插入元素
str.insert(0,‘a')

按位置删除

del str[0]#删除第0个元素
str.pop(0)#删除某个位置的元素并返回,如果括号中不传参默认删除最后一个

按值删除

str.remove("0")#删除值为0的元素

排序

str.sort()#正序,sort不能直接在print中调用
str.sort(reverse=True)#反序
sorted(str)#临时输出排序后的数组,不改变原数组顺序

反序

str.reverse()#将数组倒序改变

数组长度

len(a)#返回值为a的长度
a[-1]#永远链接最后一个元素,除非a为空

列表推导式

数学运算

min(列表名),max(),sum()

列表格式操作

number=list(range(1,5))
print(number)
#list()转换为列表

列表解析

square=[value**2 for value in range(1,10,2)]
print(square)

切片

print(square[0:3])

截取0到3的部分

print(square[-3:])

只输出后三个元素

复制

new_square=square[:]#类似于克隆
new_square=square#类似于指针

元组

定义:不可变的列表,区别在于用元括号而非方括号

dimension=(1,100)

修改元组的唯一方式

dimension=(1,100)
print(dimension)dimension=(100,100)
print(dimension)

重新定义元组

循环

for循环

magicians=['alice','bob','dad']
for magician in magicians:print(magician)

有C语言基础一秒看懂

while循环使用方法同上

while magician !="alice":

退出循环

break
continue

用法同C语言

if条件

if d==1:print(d)
if d==1 and d-1==0:print(d)
if d==1 or d-1==0:print(d)
if 1 in dimension:#检查列表里面有没有某个元素print(d)
if 1 not in dimension:#检查列表里面没有某个元素print(d)
if 1 not in dimension:#三重条件判断print(d)
elif 100 in dimension:print(dimension)
else:print(1)

有C语言基础一秒看懂

if birthday in pi:print("你的生日在圆周率里面")

py的这种方式让人感觉非常口语化

字典

字典的作用在于索引,形式上区别在于大括号

alien_0={'color':'green','point':'5'}
print(alien_0['color'])

字典的组成形式为一系列键值对,键值对之间用 , 隔开,键值对前为索引,后为值,通过 : 区分开.

键值对索引可以是任何形式的变量,值也是

alien_0['x_position']=100 #添加(修改)键值对
alien_0["y_position"]=10
print(alien_0)
del alien_0['x_position'] #删除键值对
print(alien_0)
alien_0={1:'green','point':'5'} #遍历键值对(两种方法输出结果不一样
for point in alien_0.items():print(point)print(alien_0)
for key in alien_0.keys()://提取键print(key)
sorted(alien_0) #输出排序后的结果
set() #输出集合后的结果

字典嵌套

alien_0={'1':'green','point':'5'}
alien_1={'1':'green','point':'5'}
alien_2={'1':'green','point':'5'}alien=[alien_0,alien_1,alien_2]
print(alien)
pizza={'1':"asd",'2':[1,2,3]
}
print(pizza)
print(pizza['2'])

输入

message=input("hello")
print(message)

结果是hello和输入的字符

input相当于兼顾了C语言中printf和scanf的功能

int('12') #将字符12强转为数字12

函数

def greet():print("hello")
greet()

先定义,后使用,高度依赖换行和缩进

传参

def greet(name):print("hello"+' '+name)
greet(input())

上面为函数传参的使用

两种传参方式:

def greet(name):print("hello"+' '+name)
greet('bob')def greet(name):print("hello"+' '+name)
greet(name='bob')

默认值,输入具体值以后会冲掉默认值

def greet(name='bob'):print("hello"+' '+name)
greet()

默认值和传参至少有一个,也就是说必须函数里面每个变量都有值

返回值,有C语言基础一秒看懂,返回值类型任意

def greet(name='bob'):print("hello"+' '+name)return "yes"
print(greet())

传入多个参数

def greet(*name):print(name)return "yes"
print(greet('a','b'))

得到的name是一个元组

一个星号创建的是元组,两个星号创建的是字典,并且方式和建立有些不同

def greet(**name):print(name)
greet(asd='123')

导入包

导入函数

from g import greetgreet("alice")

导入文件

import gg.greet("alice")

别名

import g as goodgood.greet("alice")

类是面向对象编程的具体形式,类中具有属性和方法

类的基本声明:

class Dog:def __init__(self,name,age): #self是必须的,剩下两个表示属性self.name=name #对属性分别需要声明self.age=age 

类里面的函数被称为方法,上面的_init__就是类里面的初始化方法(受markdown语法限制这里写法可能不太正确

init的下划线是类里面的方法必须具备的,作为一个标志区别类里面的方法和类外面的函数

实例化对象and访问对象(类相当于一个模板,可以根据一个类创建多个对象)

my_dog=Dog('white',16)print(my_dog.name)

默认属性

class Dog:def __init__(self,name):self.name=nameself.age=12my_dog=Dog('white')print(my_dog.age)

默认属性不需要再init的参数里面体现,在实例化的时候也不需要写出来,但是可以直接调用获取这个值和修改

继承关系

class Dog:def __init__(self,name):self.name=nameself.age=12my_dog=Dog('white')
my_dog.age=16
print(my_dog.age)class NBDog(Dog):def __init__(self,name):super().__init__(name)

上述代码先定义了Dog这个类,并且给定了初始化的方法,接下来重新定义了NBDog,NBDog是继承Dog类的子类,所以在声明变量之前首先需要class NBDog(Dog)表示新的类是继承之前类的,super()表示调用父类的方法(父类也被称为超类),所以调用父类的init的方法进行初始化。

定义子类的属性
class NBDog(Dog):def __init__(self,name):super().__init__(name)self.year=10 #新定义的子类的属性
my_NBdog=NBDog("black")
print(my_NBdog.year)
重写父类方法
class Dog:def __init__(self,name):self.name=nameself.age=12def test(self):print(self.age)my_dog=Dog('white')
my_dog.age=16
my_dog.test()class NBDog(Dog):def __init__(self,name):super().__init__(name)self.year=10def test(self):print(f'my age is {self.age}') #这里要注意
my_NBdog=NBDog("black")
my_NBdog.test()

直接再写一个覆盖了就行

这段代码里面要注意最后一个print,这里输出以后{}中间的内容是年龄具体的变量值,f不会输出,他的作用是将大括号中的内容视为变量值,而不是都作为字符串输出

将类作为属性
class Ear:def __init__(self,length):self.length=lengthclass Dog:def __init__(self, name):self.name = nameself.age = 12self.ear=Ear(100);
my_dog=Dog("black")
print(my_dog.ear.length)

如上,Ear是dog的一部分,结果是100

导入类包
from g import Car #导入方式my_car=Car('tesla')
print(my_car.name)

from g import Car前后顺序不能互换

导入多个类时,在Car后面加逗号然后加入别的类

导入整个包,调用类时用点访问

import gmy_car=g.Car('tesla')
print(my_car.name)

文件操作和异常

读取文件操作

with open("test.txt") as hello: #打开文件,hello可以自定义变量名contents=hello.read() #读取文件中的内容到contents中
print(contents) #打印出contents中的内容

with的作用在于不需要手动关闭文件,表示在代码块中使用

在读取文件后显示的实际上末尾会多出来一个空行,因为文件读取到末尾会返回一个空字符串,而打印出来显示的就是空行

如果不想要这个空行的话可以使用print(contents.rstrip())来删除字符串末尾多余的空格或者换行

py在文件查询的过程中,默认是在与代码文件相同目录的文件夹进行查询,如果需要对子文件进行查询,需要找到其子文件夹

注意:在相对路径中,我们一般使用/这个斜杠,因为\这个反斜杠会被认为是转义字符的标志,如果非要用\这个斜杠的话,那就需要用两个\斜杠,表示对每两个\斜杠都转义为一个\斜杠

读取文件并逐行输出

filename="test.txt"
with open(filename) as hello:for line in hello:print(line)

读取文件内容并且存储到列表中

filename="test.txt"
with open(filename) as hello:lines=hello.readlines()
print(lines)

写入文件

filename="test.txt"
with open(filename,'w') as hello:hello.write("hello")

其中w表示写入模式,可以替换为r(读入模式),r+(读写模式),a(附加模式),如果忽略的话默认以只读模式打开

如果文件原本并不存在的话,open函数将会自动创建一个以其命名的文件

如果用w打开的话,文件内容会是新写入的内容,之前的内容会被清空

如果想要附加的话,要用a模式

异常

使用try和except组合来捕捉异常

try:print(5/0)
except:print("error")

实际上不同的异常,except后面应该接不同的异常,但是对于初学者可以直接都不用加,这样方便很多

如果不需要任何东西的话,在except后接pass就行

杂项

分析文本:

title="alice in bob"
print(title.split())

split方法表示根据空格分开文本,并且生成一个列表

json文件

写入json文件

import jsonnumbers=[1,3,5,9,4,11]
filename="numbers.json"with open(filename,'w') as f:json.dump(numbers,f)

json.dump函数接受两个参数,第一个是传入的内容,第二个是文件名

读取json文件

import jsonfilename="numbers.json"with open(filename) as f:numbers=json.load(f)
print(numbers)

使用json.load函数来读取或存储json文件中的数据

重构

将一整个函数分成多个子功能并且在需要时调用子功能

测试

import unittest #导入单元测试的包
from name_function import get_formatted_name #导入要测试的函数class NamesTestCase(unittest.TestCase): #创建一个Test的类,要继承unittest.TestCase表示单元测试def test_first_last_name(self):formatted_name = get_formatted_name('janis', 'joplin') #后面是函数运行,前面用来接受返回的结果self.assertEqual(formatted_name, 'Janis Joplin') #断言方法相当于一个比较,比较前后是否相等
if __name__ == '__main__':unittest.main()

这个测试是单元测试,首先要导入单元测试的包,然后创建一个表示Test的类,接着定义一个方法,在方法中比较得到的结果与预期是否相符

最后的if是判断特殊变量是不是main,也就是说目前存放代码的文件,是不是你要执行运行的文件,如果是的话,name的值就是main,然后执行后面的测试

unnittest.main()函数每次都会先执行test_打头的函数,所以在定义测试函数的时候要注意函数的命名

常见的断言方法在这里插入图片描述

还有一个方法叫setup,在Test类中被优先调用。在测试自己编写的类时,方法setUp让测试方法编写起来更加容易:可以在setUp()方法中创建一系列实例并设置其属性,再在测试方法中直接使用这些实例。相比于在每个测试方法中都创建实例并设置属性,这种方法要更加容易。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv5中如何使用 1)iAFF加入Neck替代Concat; 💡💡💡Yolov5/Yolov7魔术师,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文…

RabbitMQ 的基本概念

一 MQ 的基本概念 1 MQ概述 MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。消息队列就是所谓的存放消息的队列。 消息队列解决的不是存放消息的队列的⽬的,解决的是通信问…

三、GCC编译:链接

代码准备 main.c extern int shared; extern void func(int *a, int *b); int main(){int a 100;func(&a, &shared);return 0; }func.c int shared 1; int tmp 0; void func(int *a, int *b){tmp *a;*a *b;*b tmp; }静态链接 编译 gcc -static -fno-stack-p…

TypeScript学习笔记、鸿蒙开发学习笔记

变量定义方式 # 变量声明 let msg: string douzi console.log(msg) let num: number 20 console.log(num) let end: boolean true console.log("end" end) let a: any 10 a douzi console.log(a) let p {name:"douzi",age:20} console.log(p.name)…

cmake-将源文件编译为可执行文件

文章目录 准备工作创建cmake文件编译源代码需要的文件不在同一个文件夹的情况 准备工作 首先我们准备三个文件 add.h int add(int a,int b);add.cpp int add(int a,int b) {return ab; }main.cpp #include "add.h" #include <iostream> int main() {in…

Multi-Concept Customization of Text-to-Image Diffusion——【代码复现】

本文是发表于CVPR 2023上的一篇论文&#xff1a;[2212.04488] Multi-Concept Customization of Text-to-Image Diffusion (arxiv.org) 一、引言 本文主要做的工作是对stable-diffusion的预训练模型进行微调&#xff0c;需要的显存相对较多&#xff0c;论文中测试时是在两块GP…

ssh远程登录协议

目录 一、ssh协议定义及特点 &#xff08;一&#xff09;ssh协议简介 &#xff08;二&#xff09;ssh协议的主要特点 二、ssh传输原理 三、sshd服务 &#xff08;一&#xff09;配置文件 &#xff08;二&#xff09;基本用法 1.直接连接 2.连接指定用户 3.指定端口号…

设计模式之策略模式【行为型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

十分钟教你在 k8s 中部署一个前后端应用

好多开发人员&#xff0c;尤其是没接触过 k8s 的人员对如何在k8s中部署一个 前后端应用很模糊&#xff0c;不知如何下手&#xff0c;所以本篇讲一下如何快速在 k8s 部署一个前后端应用&#xff0c;让大家对k8s有个快速认识 前置依赖 k8s集群&#xff0c;如果没有安装&#xff0…

什么是RoPE-旋转位置编码?

RoPE位置编码是大模型中最常见的位置编码之一。像是谷歌的PaLM和meta的LLaMA等开源大模型都是RoPE位置编码&#xff0c;那么RoPE有什么特点呢&#xff1f; 本文将介绍如下内容&#xff1a; RoPE旋转位置编码概要什么是位置编码&#xff1f;RoPE及其特点总结 一、RoPE旋转位置…

stm32学习笔记:DMA

每个DMA通道硬件触发源是不一样的&#xff0c;要使用某个外设的硬件触发源&#xff0c;就必须使用它连接的那个通道 12个独立可配置的通道&#xff1a;DMA1(7个通道)&#xff0c;DMA2(5个通道) 每个通道都支持软件触发和特定的硬件触发 C8T6 DMA资源&#xff1a;DMA1 &#xff…

Python自动化我选DrissionPage,弃用Selenium

DrissionPage 是一个基于 python 的网页自动化工具。 它既能控制浏览器&#xff0c;也能收发数据包&#xff0c;还能把两者合而为一。 可兼顾浏览器自动化的便利性和 requests 的高效率。 它功能强大&#xff0c;内置无数人性化设计和便捷功能。 它的语法简洁而优雅&#x…

数据库和表的操作

文章目录 前言一、库的操作创建数据库字符集和校验规则操纵数据库查看数据库显示创建语句修改数据库删除数据库备份和恢复数据库还原查看连接情况 二、表的操作创建表查看表结构修改表修改表名添加一列修改某一列属性删除某一列 删除表 前言 一、库的操作 创建数据库 语法&am…

【Python机器学习】分类器的不确定估计——决策函数

scikit-learn接口的分类器能够给出预测的不确定度估计&#xff0c;一般来说&#xff0c;分类器会预测一个测试点属于哪个类别&#xff0c;还包括它对这个预测的置信程度。 scikit-learn中有两个函数可以用于获取分类器的不确定度估计&#xff1a;decidion_function和predict_pr…

day06

1.八大基本数据类型整型: byte short int long 浮点: double float字符: char布尔: boolean2.声明变量的语法格式数据类型 变量名字 初始化的值; 3.使用for循环打印等腰三角形for (int i 1; i < 4; i) {for (int j 1; j < 4 - i; j) {System.out.print(" &qu…

计算机毕业设计----SSH电子相册管理系统

项目介绍 本项目分为普通用户与管理员两个角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登陆,用户信息管理,登陆密码修改等功能。 用户角色包含以下功能&#xff1a; 用户登陆,个人信息管理,相册管理,上传照片等功能。 环境需要 1.运行环境&#xff1a;最好…

高效办公:在文件夹名称左边插入关键字,提高文件管理效率

在繁忙的工作环境中&#xff0c;经常要处理大量的文件和文件夹。有效的文件管理是一个挑战&#xff0c;大量的文件和文件夹难以找到所需的资料。下面一起来看云炫文件管理器如何在文件夹名称左边批量插入关键字。 文件夹名称左边添加关键字前后对比图。 文件夹名称左边批量插…

P1379 八数码难题

题目描述 在 33 的棋盘上&#xff0c;摆有八个棋子&#xff0c;每个棋子上标有 1 至 8 的某一数字。棋盘中留有一个空格&#xff0c;空格用 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是&#xff1a;给出一种初始布局&#xff08;初始状态&#xff09;和目标布局&…

哪里能找到好用的PPT模板?12个免费模板网站让你畅快办公!

你是否有过这样的经历&#xff0c;在准备重要会议或者演讲的时候&#xff0c;为找不到合适的PPT模板而困扰&#xff1f;或是在网上漫无目的地搜寻&#xff0c;结果收获的是设计平淡无奇的PPT模板&#xff1f; 如果你有同样的疑问&#xff0c;那么你来对地方了&#xff01;在这…

电脑扩容升级硬盘选1T还是2T

SSD固态有必要升级2TB吗&#xff1f;----------吴中函 某大二学生用的一台笔记本电脑&#xff0c;512GB的硬盘空间已经严重不够用了&#xff0c;想给笔记本扩容升级一下硬盘&#xff1b; 这位学生是学设计专业的、平时也喜欢摄影、电脑里面也装了一些游戏&#xff0c;经常整理、…