python基础语法笔记(有C语言基础之后)
input()用于输入,其有返回值(即用户输入的值),默认返回字符串。括号里可放提示语句
一行代码若想分为多行来写,需要在每一行的末尾加上“\”
单个“/”表示数学中的除法,不会取整。“//”才会向下取整。
字符串类型可以乘以整数类型,相当于这个字符串被复制了整数倍,若做输出,即会重复输出。
条件语句
if [条件] :
[执行语句][执行语句]
elif [条件二]:
[执行语句]
else :
[执行语句]
(要有缩进,[条件]外面不用中括号也不用小括号)
逻辑关键词
(not 非) > (and 与) > (or 或)
方法与函数
方法:对象.方法名()
函数:函数名()
列表(list)
-
与普通数据类型(字符串,整型,浮点型,布尔型)的区别:列表在调用函数或方法对其代表的值进行改变时,其本身值确实会被改变;而普通数据类型调用函数或方法进行改变时,其本身的值不会被改变,相当于是其值被复制了一遍,改变的是复制后的值,然后进行输出或其他操作。
-
常用方法:
.remove(【元素】)(移除),.append(【元素】)(添加).min(【列表】)(返回列表中的最小值).max(【列表】)``.sort(【列表】)(给列表排序)len(【列表】)(返回列表长度) -
命名方式:
a = [【元素】,【元素】](可以为空,里面可以有任何元素(但必须是同一类型),用逗号分隔) -
赋值:
a[1] = 【另一个元素】
字典(dictionary)
-
命名方式:
a = { 【key】 : 【value】, 【key】 : 【value】 }(key必须是不可变的数据结构) -
旧键赋新值或新增键值对:
a[【key1】] = 【value2】 -
判断某个键是否已经存在:
【key】 in a,若存在,则该表达式的值为True,否则为False -
删除键值对:
del a[【key1】] -
常用方法:
.keys()(返回里面的所有键).values()(返回里面的所有值).items()(返回里面的所有键值对)
元组(tuple)
-
命名方式:
a = (【元素】, 【元素】) -
不可变,可作为字典的key
-
访问元组中的元素:a[1]、a[0]
循环(for)
-
写法:
for 【变量名】 in 【可迭代的对象】:(变量名处可以是多个变量,相应的可迭代对象得有同样多数量的值) -
range(a, b):a≤ x<b range(a, b, c) :c为步长
格式化字符串
用format()方法或直接在字符串前加 ‘ f ’,举例
y = 90
a = 90.2
c = "jijin"
str1 = "嘻嘻哈哈{0}红红火火{2}恍恍惚惚{1}是啊{0}".format(y, a, c)
#或者如下
str2 = "嘻嘻哈哈{y2}红红火火{c2}恍恍惚惚{a2}是啊{y2}".format(y2 = y, a2 = a, c2 = c)
#或者如下
str3 = "嘻嘻哈哈{y2}红红火火{c2}恍恍惚惚{a2}是啊{y2}".format(y2 = 90, a2 = 90.2, c2 = "jijin")
#或者如下
str4 = "嘻嘻哈哈{y}红红火火{c}恍恍惚惚{a}是啊{y}".format(y = y, a = a, c = c)
#或者如下
str5 = f"嘻嘻哈哈{y}红红火火{c}恍恍惚惚{a}是啊{y}"
#或者如下
str6 = f"嘻嘻哈哈{90}红红火火{'jijin'}恍恍惚惚{90.2}是啊{90}"#打印结果皆如下
嘻嘻哈哈90红红火火jijin恍恍惚惚90.2是啊90
若要控制浮点数的小数位数,比如三位小数,则在具体值或者变量的后面加上“:.3f”
函数
- 写法:
def fun1():#函数体#。。。def fun2(a, b): #无需说明参数类型,也无需说明函数类型c = a+bprint(c)return a #若没写 return 语句会有默认的 return None
引入模块
-
import 【模块】
-
from 【模块】 import 【函数】
-
from 【模块】 import *
-
引入第三方库,需要先在互联网上下载,用命令pip install来安装,pypi.org这个网站可以对第三方库进行搜素。
类
#定义一个类
class Cat:def __init__(self, name, age): #构造函数,必写,名字固定为 __init__() (注意,左右各两个横线) 第一个参数必须是self,代表自己self.name = name #左侧即为对象拥有的属性,在构造函数里定义,不能在外面定义。self.age = ageself.color = "white"def meow(self): #自定义方法,第一个参数也必须是selfprint(f"{self.name} is meowing.")def show_info(self):print(f"{self.name} is {self.age} years old and {self.color} in color.")#创建一个对象
cat1 = Cat("Fluffy", 3) #创建对象的时候可以不用传入self的值
cat1.meow() #调用方法的时候也可以不用传入self的值
cat1.show_info()#输出结果
Fluffy is meowing.
Fluffy is 3 years old and white in color.
继承
class Mammal:# 定义哺乳动物类,初始化时接受一个名字参数def __init__(self, name):self.name = nameself.has_tail = Truedef speak(self):print(f"{self.name} speaks.")class Dog(Mammal):# 定义狗类,继承自哺乳动物类,初始化时接受一个名字参数def __init__(self, name):super().__init__(name)# 重写说话方法,打印狗叫的信息def speak(self):print(f"{self.name} barks.")# 定义取物方法,打印狗取物的信息def fetch(self):print(f"{self.name} is fetching.")class Human(Mammal):# 定义人类,继承自哺乳动物类,初始化时接受一个名字参数def __init__(self, name):super().__init__(name)self.has_tail = Flase #修改父类继承过来的属性# 重写说话方法,打印人说话的信息def speak(self):print(f"{self.name} talks.")# 打印人是否有尾巴的信息def show_has_tail(self):print("Do humen have tails? " + str(self.has_tail))# 创建一个Dog对象,名字为Rufus
dog = Dog("Rufus")
dog.speak() # 调用Dog对象的speak方法
dog.fetch() # 调用Dog对象的fetch方法# 创建一个Cat对象,名字为Whiskers
human = Human("Jack")
human.speak() # 调用Human对象的speak方法
human.show_has_tail() # 调用human对象的show_has_tail方法# 输出结果
Rufus barks.
Rufus is fetching.
Jack talks.
Do humen have tails? False
文件路径常识(对于Windows系统来说)(相对路径)
在同一目录下的文件,如果想要相互找到彼此的话,可以直接使用文件名,不用前面再加一个“./”
读取文件
-
使用函数
open(),open("【文件路径】", "【模式】", "【encoding=】") -
【文件路径】:可以写绝对路径,也可以写相对路径。
-
【模式】:传入一个字符串,常用的有"r"(只读),和"w"(只写)两种模式。若不写,则默认为只读模式。读取模式下,如果程序找不到对应的文件名的话,就会报一个
"FileNotFoundError"的错误。 -
【encoding】:也是可选的参数,可不写
-
open()函数会返回一个文件对象,可以后续对它进行读取和写入的操作。 -
读取(“r”):
-
例如,把文件对象赋值给一个变量
f,f.read()就可以一次性读取文件里的所有内容,并以字符串返回,print(f.read())即可将其打印出来。 -
一个文件对象的read()方法不可以连续调用,因为每次调用都会读取全部的内容出来,并且它会记录上次读取到哪。所以,第一次调用完之后,第二次调用时只能读取到空的字符串了。
-
若不想全部读取,那就传入一个数字作为参数,表示一次读取多少字节。
-
f.read(10) # 第一次,读1-10字节的文件内容
f.read(10) # 第二次,读11-20字节的文件内容
f.readline() # 每次读一行的文件内容,根据换行付来判断什么时候本行结束
f.readlines() # 会读取全部内容,并把每行作为列表元素返回,常与for循环结合
f.close() # 关闭文件,释放资源# 若容易忘记调用close()方法,可用如下写法:
with open("./data.txt") as f : # 用with写法print(f.read()) # 对文件进行操作 要记得缩进
# 这样,当缩进部分的代码执行完后,资源会自动释放
-
写入(“w”):
-
写入模式下,如果找不到文件名,会自动在路径下创建一个新的文件。
-
若文件是存在的,那么会将文件原有内容清空,然后写入新的内容。若不想原有内容被清空,则应该用“a”模式(附加模式)
-
用write()方法来进行写入。如
write("aaaa")。
-
-
其他模式:
-
“r+”:可读也可写入
-
“a+”:可读也可追加
-
写入和追加是有区别的。追加是在文件末尾进行写入。而写入是看当前指针在哪个位置,最开始指针位置为1,如果之有过read操作,那么指针会后移,这时再调用write()的话,就是从上次read的结束位置开始写入。
-
异常处理
try:user_weight = float(input("Enter your weight in kilograms: "))user_height = float(input("Enter your height in meters: "))bmi = user_weight / (user_height ** 2)
except ValueError: # If user enters non-numeric inputprint("Invalid input. Please enter a number.")
except ZeroDivisionError: # If user enters height as zeroprint("Invalid input. Height cannot be zero.")
except: # If any other error occursprint("An error occurred. Please try again.")
else: # If no error occursprint("Your BMI is:", bmi)
finally: # This block is always executedprint("Thank you for using our BMI calculator.") again.")
测试
调用python自带的库:unittest
# 被测试函数所在文件 add_calculator
def add2(a, b):return a + b# 测试文件 test_add_calculator
import unittest
from add_calculator import add2class TestAdd2(unittest.TestCase): # 写一个子类继承于unittest.TestCase# 每一个方法就是一个测试用例,命名方式必须以test_开头,只有这样才能被unittest当作测试用例def test_positive_with_negative(self): self.assertEqual(add2(100, -100), 0)def test_positive_with_positive(self):self.assertEqual(add2(100, 100), 200)def test_negative_with_negative(self):self.assertEqual(add2(-100, -100), -200)def test_negative_with_positive(self):self.assertEqual(add2(-100, 100), 0)if __name__ == '__main__':unittest.main()# 输出结果
.... # 通过为 . 不通过为 F
----------------------------------------------------------------------
Ran 4 tests in 0.000sOK
本质上,assertTrue可以代替这些所有的方法。
但推荐使用更有针对性的方法,因为更有针对性的方法会给出更详细具体的原因。
高阶函数
高阶函数可以把函数作为参数。作为参数的函数是直接把函数名作为参数传入,后面不要带括号和参数,因为如果带括号和参数,传入的就是函数的返回值了,而不是函数本身了。
匿名函数
无需名字,即用即扔。关键字:lambda
def calculate_and_print(num1, num2, calc_func): print(calc_func(num1, num2))calculate_and_print(7, 5, lambda num1, num2: num1 * num2) # 输出35
# num1、num2为传给匿名函数的参数,匿名函数不需要专门写 return,直接放上要放回的结果即可(即上面冒号后面的 “num1 * num2”# lambda表达式的语法:lambda 参数1, 参数2, ... : 表达式
# lambda表达式也可以直接作为一个函数来计算,如下:
(lambda num1, num2: num1 * num2)(7, 5) # 输出35
# 但是一般不推荐这么做,因为lambda表达式的可读性不高。# 匿名函数也有局限,即它的冒号后面不能有复杂的语句,只能是一行表达式。
本文是学习b站up主“林粒粒呀”《三小时python课程》时记的笔记
课程链接:你觉得自己这辈子都学不会编程?超超超基础Python课程,3小时快速入门 【自学Python教程合集】【3小时快速入门Python】
相关文章:
python基础语法笔记(有C语言基础之后)
input()用于输入,其有返回值(即用户输入的值),默认返回字符串。括号里可放提示语句 一行代码若想分为多行来写,需要在每一行的末尾加上“\” 单个“/”表示数学中的除法,不会取整。“//”才会向下取整。 …...
【面试八股总结】线程基本概念,线程、进程和协程区别,线程实现
一、什么是线程? 线程是“轻量级进程”,是进程中的⼀个实体,是程序执⾏的最小单元,也是被系统独立调度和分配的基本单位。 线程是进程当中的⼀条执行流程,同⼀个进程内多个线程之间可以共享代码段、数据段、打开的文件…...
Java核心技术【二十】Java泛型的基本概念和原理详解
Java泛型的基本概念和原理详解 一、泛型的基本概念 Java泛型(Generics)是Java SE 1.5(JDK 5)引入的一个新特性,它提供了一种在编译时期进行类型检查的方式,允许程序员在定义类、接口和方法时指定类型参数…...
Android Studio Download Gradle 时慢问题解决
1.腾讯gradle 下载:后面拼接版本(gradle-8.0-bin.zip) https://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip 2.Android Studio 配置:setting-->gradle-->Use Gradle from 选择本地文件夹(解压后的bi…...
【Qt5】入门Qt开发教程,一篇文章就够了(详解含qt源码)
目录 一、Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二、创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2.1 main函数中 2.2.2 类头文件 2.3 .pro文件 2.4 命名规范 2.5 QtCreator常用快捷键 三、Qt按钮小程序 …...
阿里MotionShop——AI视频工具:一键替换视频人物为3D虚拟角色~
近期AI相关的新奇应用层出不穷,今天小元老师要给大家安利一个由阿里巴巴研发的AI视频生成技术——MotionShop! 1、一键替换3D虚拟角色 MotionShop通过视频处理、角色检测、背景修复等多重步骤,能够将视频中的人物角色,一键转换成…...
Jetpack Compose实战教程(五)
Jetpack Compose实战教程(五) 第五章 如何在Compose UI中使用基于命令式UI的自定义View 文章目录 Jetpack Compose实战教程(五)一、前言二、本章目标三、开始编码3.1 先让自定义控件能跑起来3.2给自定义控件使用compose的方式赋值…...
【vueUse库Watch模块各函数简介及使用方法--上篇】
vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseWatch函数1. until2. watc…...
JavaScript中的LHS和RHS
LHS和RHS之前我们先来回忆一下最简单的赋值操作! var test100; console.log(test); 以上代码的意思简单我们理解为把右边的值赋值给左边的test变量,然后输出打印结果。 可是我们要是深入理解你就会发现在这个过程当中,还发生了一些其他的事情 而这些事情就是今天…...
appium 实战问题 播放视频时无法定位到元素
背景 在做UI自动化时,有播放详情页的用例,但是发现视频在播放的时候无法定位到元素或者很慢,了解到appium在动态的页面实时获取布局元素导致定位变慢。所以只能将视频暂停在操作元素,点击到暂停按钮又是个问题,通过ad…...
鸿蒙‘ohpm‘ 不是内部或外部命令,也不是可运行的程序-解决方案
🔥 博客主页: 小韩本韩! ❤️ 感谢大家点赞👍收藏⭐评论✍️ 在鸿蒙的DevEco Studio的终端下输入 ohpm -v 或者 你需要下载第三方ohpm包的时候提示‘ohpm‘ 不是内部或外部命令,也不是可运行的程序- 主要是因为我们…...
方法引用 异常 file
目录 一.方法引用 1.方法引用概述 2.引用静态方法 3.引用成员方法 i.引用其他成员方法 ii.引用本类成员方法 iii.引用父类成员方法 4.引用构造方法 5.其他调用方式 i.使用类名引用成员方法 ii.引用数组的构造方法 二、异常 1.异常的作用 2.异常的处理方式 i.JVM…...
比较(六)利用python绘制径向柱图
比较(六)利用python绘制径向柱图 径向柱图(Circular Barplot)简介 径向柱图基于同心圆网格来绘制条形图,虽然不如普通条形图表达准确,但却有抓人眼球的效果。其衍生的南丁格尔玫瑰图则广为人知。 快速绘制…...
为什么需要重写equals和如何重写equals
首先先看Java中的 ,比较的两个对象的地址值。 如果是基本数据类型,那么就是比较的是值。 如果是引用数据类型,比较的就是地址. object类中的equals方法也是用的; 所以要比较两个对象的大小,去调用默认的equals方法…...
C#字符串操作:判断一个字符串是否存在于另一个字符串按特定字符分割后的子字符串中的几种方法
要判断一个字符串是否存在于另一个字符串按特定字符分割后的子字符串中,可以使用以下几种方法: 方法一:使用Split和Array.Exists 你可以使用 Split 方法将字符串分割成子字符串数组,然后使用 Exists方法检查目标字符串是否在数组…...
Hi3861 OpenHarmony嵌入式应用入门--MQTT
MQTT 是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输 协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、 高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器…...
[22] Opencv_CUDA应用之 使用背景相减法进行对象跟踪
Opencv_CUDA应用之 使用背景相减法进行对象跟踪 背景相减法是在一系列视频帧中将前景对象从背景中分离出来的过程,它广泛应用于对象检测和跟踪应用中去除背景 背景相减法分四步进行:图像预处理 -> 背景建模 -> 检测前景 -> 数据验证 预处理去除噪声背景建模,以便与…...
Maven在Windows中的配置方法
本文介绍在Windows电脑中,下载、配置Maven工具的详细方法。 Maven是一个广泛使用的项目管理工具,主要针对Java项目,但也可以用于其他类型的项目;其由Apache软件基金会维护,旨在简化和标准化项目构建过程,依…...
一、redis-万字长文读懂redis
高性能分布式缓存Redis `第一篇章`1.1缓存发展史&缓存分类1.1.1 大型网站中缓存的使用带来的问题1.1.2 常见缓存的分类及对比与memcache对比1.2 数据类型选择&应用场景1.2.1 string1.2.2 hash1.2.3 链表1.2.4 set1.2.5 sortedset有序集合类型1.2.6 总结1.3 Redis高级应…...
搞清楚[继承],易如反掌
穷不失义,达不离道。——孔丘《论语》 继承 1、简单理解2、继承2、1、继承的概念2、2、继承定义2、3、基类和派生类对象赋值转换2、4、继承中的作用域2、5、派生类默认成员函数2、6、继承中的特点2、6、1、友元2、6、2、静态成员2、6、3、菱形继承及菱形虚拟继承 3、…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
