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、…...

Perl 语言入门学习指南:探索高效脚本编程的奥秘
引言 Perl,全称Practical Extraction and Report Language,是一种功能强大的编程语言,特别擅长于文本处理、报告生成以及系统自动化管理任务。自1987年诞生以来,Perl凭借其灵活性、强大的内置功能库和广泛的社区支持,…...

【HTML】-解决页面内容无法选择、复制问题
目录 1、网页内容无法选中 1.1、问题原因 1.2、解决脚本 1.2.1、开启控制台窗口 1.2.2、执行脚本命令 2、内容复制弹出阻止框 2.2、解决脚本 1、网页内容无法选中 1.1、问题原因 今天在访问某一网站平台,需要将内容进行选择、复制时发现不可使用。 在使用…...

C#中委托与事件
一、委托 在面向对象中,我们可以将任何数据类型作为参数传递给方法,能否将一个方法作为参数传递给另一个方法?C#中通过委托可以实现将方法作为参数进行传递。 1.1概念 委托是一种引用类型,它可以用于封装并传递方法作为参数。委…...

通用后台管理(二)——项目搭建
目录 前言 一、安装vue-cli依赖 1、使用yarn下载vue-cli 2、使用npm下载 3、检查一下是否下载成功 二、创建项目 1、创建项目,my-app是项目名称 2、 这里选择vue 2,蓝色表示选中的。 3、启动项目 三、下载项目依赖 四、配置项目 1、修改esli…...

多模态大模型之达摩院通义MPLUG
引言 随着人工智能技术的飞速发展,多模态技术逐渐成为研究的热点。它结合了文本、图像、声音等多种数据类型,为机器理解世界提供了更丰富的视角。本文根据严明老师的达摩院通义MPLUG多模态预训练技术分享,及其在电商等行业的应用实践&#x…...

文章翻译记录
以 PINN 为基础,我们开发了一个框架,用于在不同震源位置和速度模型下进行地震建模。本研究的显著贡献包括: 1. 为了提高网络对不同速度模型的泛化能力,必须将速度变量 vp 作为系统的输入参数。本研究从监督学习中汲取灵感…...

C++ 语法习题(2)
第三讲 循环语句 1.偶数 编写一个程序,输出 1 到 100之间(包括 1 和 100)的全部偶数。 输入格式 无输入。 输出格式 输出全部偶数,每个偶数占一行。 输入样例 No input输出样例 2 4 6 ... 100 参考代码: #include <i…...

使用Gstreamer时遇到WARNING: erroneous pipeline: no element “x264enc“(亲测有效)
WARNING: erroneous pipeline: no element “x264enc” 解决: 我下了gstreamer1.0-plugins-ugly包就解决了 sudo apt install -y gstreamer1.0-plugins-ugly...

SAP 新增移动类型简介
在SAP系统中新增移动类型的过程涉及多个步骤,包括复制现有的移动类型、调整科目设置以及进行必要的测试。以下是新增移动类型的一般步骤和关键点: 复制现有的移动类型: 使用事务代码OMJJ进入移动类型维护界面。 勾选移动类型 这里不填写移动类型,然后直接下…...

SQL性能优化策略
发现问题 通过业务监控发现慢SQL或接口响应延迟。利用性能分析工具定位问题。 定位SQL语句 使用监控工具确定影响性能的SQL语句和表。 SQL查询变慢原因 索引失效:查询未使用索引或索引效率低。多表连接:JOIN操作导致性能下降。查询字段过多…...