python笔记

发布时间:2024年09月23日 阅读:91 次

#1.变量

b = "a"    #用单引号‘’也可以,也可以是""表示为空,表示字符串,就是文本

b += "c"    #变成ac,追加一个c

b = 1      #设置b为数值1 

b+=1      #b变成2,追加1

x, y, z = 0, 0, 0  #同时多个变量设置

print(b)    #print(b.title()) 首字母大写,upper全大写,lower全小写

x = int(x)    #x变成数值

 

x = 10   #设置变量等于10

def my_function():

    global x  #声明x是全局变量,否则打印出不来,否则x=20会创建一个内部变量。若是 nonlocal ,则声明是嵌套函数里的局部变量(嵌套函数里的变量下级函数可以直接访问,但是不 nonlocal 不可以修改)

    print(x)       #输出10

    x = 20        #全局x变成了20

    print(x)       #输出20

my_function()     #输出10^n20

 

#2.字符串

c = f"{a} {b}"    #c相当于a连着b,也可以直接print(f"{a} {b}") 

print("a:\b\nc\nd")   #a:bcd每一个字都换行显示

b = b.rstrip()    #删除b右边的空格,lstrip() 是左边,strip()是两侧

b = 是我的.removeprefix('我的')  #去掉我的只剩是

b += a.line.lstrip(),在b后面接着写a,并且去除a的左边空格分割字符串为列表

text = "one-two-three-four"

parts = text.split('-', maxsplit=2)  # 可以括号里空着,指定-分割,不写就用空格,换行分割,指定最多分割2次。

print(parts)  # 输出: ['one', 'two', 'three-four']

 

 

#3.数

#**6是6次方

#+-*/   #加减乘除   

#%  #求余数,比如5%3是2

#print(5+3)是8,print("5+3")是5+3

#浮点数就是小数,有一次浮点,后面都变浮点。除法会产生浮点数,即使4/2数字中加下划线_可以更好辨认,不影响其他

 

 

#4.列表

zimu = ['a', 'b', 'c', 'd']    #abcd内容的列表

a = zimu[-3:]  #切片,倒数3个,输出字母bcd   [0:2]  #输出ab,从a(第0个)开始,索引到2(不包括2)

zimu2 = zimu[:]    #[:] 切片全部,可用于复制列表,但是zimu如果史叠加引用另外的变量列表等仍会继续引用原本的,若写zimu2 = zimu,一旦zimu列表内容变动,会一起变动

zimu2 = copy.deepcopy(zimu)  #这样复制更彻底,直接复制现在的内容,不怕引用。

print(zimu[0].title())   #显示a,并大写(左边第0个),从0开始计数的,-1是最后一个,-2是倒数第二个

#可以用字符串里的f把多个联系起来

zimu[0] = 'e'        #把第一个的a改成e

zimu.append('f')     #把f加到列表最后

zimu.insert(0, 'g'),  #在a前面插入g

del zimu[0]         #删除a(就是第一个)

x = zimu.pop(0)      #把x变量设置为a,并把a从列表里弹出(删除)

zimu.remove('a')     #删除a,只删第一个a,

while 'a' in zimu  

zimu.remove('a')  #可以删除所有a

zimu.sort()  #列表永久按照字母顺序排序

zimu.sort(reverse=True) #字母反向排序

zimu.reverse()  #永久按照原本顺序反向

print(sorted(zimu))  #临时按字母顺序显示列表,列表本身不变,反向reverse=True也可以用

len(zimu)   #输出列表内个数,结果是4

 

 

5.操作列表

for循环

zimu = ['a', 'b', 'c', 'd']

for xx in zimu:

print(xx)   #挨个打印所有zimu内的内容  

range(1,6)  #(调用时才生成)生成整数,从1开始,6之前结束,所以只有1-5

range(start, stop, step)  #生成从 start 开始,每次增加 step ,直到达到或超过 stop (不包括 stop )的整数序列。

numbers = list(range(1, 6))  #创建一个列表1-5

for x in range(30):         for循环30次

 

f = []    #创建一个空列表,名字是f

for value in range(1, 11):

p = value ** 2

f.append(p)     #把1-10的平方放入列表f[1, 4, 9, 16, 25, 36, 49, 64, 81, 100],也可以1/2合并,写成f.append(value**2)

squares = [value**2 for value in range(1, 11)]   #合成一句,叫做列表推导式

min(p) max(p) sum(p)    #这是数值列表中的最大最小和平均值

 

6.元组 

#a = (3,5,)  和列表的差别是不可变,省内存,防止不小心改变,但是可以重新再次赋值,比如再来个a = (3,6,)就覆盖了

 

7.if如果

xx = ['a', 'b', 'c', 'd']

for xy in xx:

if xy == 'b':  #两个等号是是否相等,单个=是赋值,!=是不等于,还有<,>,<=,<=(仅数字),if 'b' in xy:  xy里有b,not in是没有,

if xy == 'b' and xy <c   #可以and连着,也可以or,且或的意思

          print(xy.upper())  #upper()全部大写

      else:

          print(xy)

 

if-elif-else   #第一个if不符合,第二个elif,再不是就else,要是第一个符合就没后面了

if-if-else    #不管第一个if,第二个if都会判断

 

zimu = []

if zimu:  #后面换行继续其他代码,若zimu为空,是flase,不执行if,不为空为true,继续执行if的

 

 

#8.字典

早饭 = {'品种': '包子', '个数':'5'}      #设置一个字典

早饭 = {              #竖着写也可以

    '品种': '包子', 

    '个数':'5'}

print(早饭['品种'])       #输出包子

早饭['大小'] = '小笼包'   #加入早饭字典

早饭['品种'] =' 粥       #把包子改成粥

del 早饭['品种']         #删掉品种

早饭.get('颜色','none(可改或者不写)')     #get() 方法的第一个参数用于指定键,是必不可少的;第二个参数为当指定的键不存在时要返回的值,是可选的,这样用get不怕不存在字典而报错

for k, v in 早饭.items():      #items返回所有键和值,然后变量k为键,v为值。   items可以换成key单独返回键,也可以改value单独返回值

print(k,v)   #输出品种 包子^n个数 5

for k in sorted(早饭.keys()):     #排序后遍历

sorted改set,变成去除重复值,输出的是集合

 

字典 = {'a': 1, 'b': 2, 'c': 3}

value = 字典.pop('d', '不存在(可以自己改)') # 键 'd' 不存在,返回 '不存在',若不指定会返回KeyError。。。若把d改下c,会返回3

print(value) # 输出 'default_value'

 

每天的早饭 = [早饭_0, 早饭_1, 早饭_2]  #列表嵌套字典,打印第一项显示的是{'品种': '包子', '个数':'5'} 

早饭 = {'品种': '包子', '内容': ['a', 'b', 'c', 'd'],}  #这是字典嵌套列表,早饭['内容'])相当于列表

早饭 = {'品种': '包子', '用料':{'材料': '牛肉', '重量':'5斤'}}     #字典套字典,早饭['用料']['重量']代表5斤

 

 

#9.用户输入    

x = input("请输入")   #提示请输入,x为输入法的值,默认为字符串

x = int(x)            #x变成数值

print(x)             #显示输入的东西

 

#10.while循环

a = 1

while a <= 5:   循环到5为止

print(a)     

a += 1  #a追加1

#也可以设置一个变量 x=true,while判断是否为true ,while x :就可以判断,=true可以省略  

 

while a=1:   #运行到break语句时会结束循环,for,while等循环都可以

      x = input(请输入)

      if x == '退出':

          break   #while就结束了,若break改continue,就是函数重新从while循环开始运行。for循环也可以用

 

未验证 = ['a', 'b', 'c']

已验证 = []

while 未验证:        #未验证不为空

      待添加 = 未验证.pop()    #pop()是从列表里提取所有内容赋值到待添加,pop(0)是提取a

      已验证.append(待添加)    #添加到已验证里

while 'a' in zimu        #循环删除zimu列表里所有的a

zimu.remove('a')

 

#11.函数

def xx(y,z):      #y是形参

def xx(y,z="好好"):      默认z等于好好,可以后面不指定用默认值,也可以指定""表示空白

#形参实参  建议不要等号两侧加空格

    print(f"{y} {z}")

    aa = f"{y} {z}"       

   return aa             #返回aa,可以返回字典列表变量都可以

xx("你好","不好")   实参    #打印你好不好,再把aa赋值你好不好   

xx(y="你好",z="不好")       #也可以这样不怕顺序错乱,否则有默认值在前面,不写默认值导致顺序不对

 

变量 =xx(y="你好",z="不好")     #相当于aa  #可以函数外调用

#参数可以是字典,列表等,列表可以用 [:] 切片来复制,防止改动原本列表

def xx(y,*z):           #形参可以是*z,就是元组

print(z)          #还是使用z,输出'a', 'b', 'c'

xx(12, 'a', 'b', 'c')     #让*z接收abc变成一个元组,就第一个参宿放入y,后面其他都放入*z

#*z是创建元组,**z是创建字典,xx(12, 品种 =' 粥')这样使用

 

 

#12.导入模块

#把函数同目录保存为1.py,然后import 1,就可以导入了,相当于把1.py里的函数写入代码,调用时函数名前改成1.函数名

from 1 import 函数_0 函数_1  函数_2     #导入1.py里的部分函数,调用时可以直接用函数名字,如果用*可以一次导入所有

rom 1 import 函数_0 as xx       #把函数0导入并改名成xx

 

 

#13.类   比如车是对象,创建一类车的模板叫类,类里的函数叫方法,特斯拉model叫实例

class Car:   #创建Car类,一般类首字母大写

    def __init__(self, brand, model):    #self可以写成别的,后面对应着都修改,self就是car类本身的意思

        self.d = brand    #可以类里一起用,d一般写成brand,可以改名字

        m = model      #这样写只能这个def里用

        print(m)        #可以输出,但是def外其他地方输出不了

        self.model= model  # 一般这样写可以类里用,或者全局类.self.modle这样调用

        self.xxx = 1      #可以自己再设置别的作为类的属性,可以不写在init里,但是只能在所在的方法被调用,仍可以类外面直接改

    def describe(self):

        print(f"The car is a {self.d} {self.model}.")

# 创建 Car 类的实例   实例字母一般小写

my_car = Car("Tesla", "Model S")   #创建一个实例my_car

# 调用实例方法

my_car.describe()         # 输出: The car is a Tesla Model S     #()里可以填参数,比如3,相应的方法里也需要加参数def describe(self,3):

print(my_car.model)       #访问实例的属性,也可以是不在init的xx,比如my_car.xx = 5 可以直接设置属性

 

#14.子类   

class 电动Car(Car):  #括号一下,括号里是父类,电动Car 继承自 Car

    def __init__(self, brand, model, 电量):   #子类需要的属性

        super().__init__(brand, model)  # 调用父类的构造器来初始化 brand 和 model

        self.b = 电量                #添加新的属性 电量

       self.其他 = 其他()            #属性可以是另一个类,详见后面

 def describe_battery(self):

        print(f"This electric car has a {self.b}-kWh battery.")

my_电动_car = 电动Car("Tesla", "Model 3", "75")   # 创建 ElectricCar 类的实例

my_电动_car.describe()  # 输出: The car is a Tesla Model 3   # 调用继承自父类的方法

my_电动_car.describe_battery()  #  调用子类特有的方法,输出: This electric car has a 75-kWh battery

#可以重写方法,同名优先子类的方法

 

class Engine:  #可以把类当类的属性,创建一个类,作为后面类里的属性

    def __init__(self, horsepower):

        self.horsepower = horsepower

    def display_horsepower(self):

        print(f"This engine has {self.horsepower} horsepower.")

class Car:

    def __init__(self, brand, model, horsepower):

        self.brand = brand

        self.model = model

        self.engine = Engine(horsepower)  # Car 类的属性继续给到engine

    def describe_car(self):

        print(f"The car is a {self.brand} {self.model}.")

        self.engine.display_horsepower()  # 调用 Engine 实例的方法

my_car = Car("Tesla", "Model S", 450)    # 创建 Car 类的实例,同时创建 Engine 类的实例作为 Car 实例的属性

my_car.describe_car()      # 调用 Car 类的方法输出: The car is a Tesla Model S. 和 This engine has 450 horsepower

my_car.engine.display_horsepower()    这样也可以调用,()里可以填参数,这个函数里没有

 

 

from car import Car ,电动car     #类可以保存为py,一个py里写多个类,后导入,使用时就是用Car,和写进入一个样

import car  导入整个模块,后面使用就是car.Car,但是上面那句导入可用Car

#模块可以导入模块不限套娃,也可以导入时as别名

 

#导入其他做好的模块

from random import randint

randint(1, 6)   #输出1-6之间的随机数 包括1/6

from random import choice

    players = ['1', '2', '3']

first_up = choice(players)  #输出123间随机一个

 

#类和函数一般这种都写个""xxx"来作为文档字符串来描述函数干嘛的

 

#14.导入文件

from pathlib import Path

path = Path('pi_digits.txt')  #路径,可以绝对或相对路径,现在是相对路径,省略PY文件所在目录

contents = path.read_text(encoding='utf-8')    #默认会末尾返回一个空字符 ,可以用contents = contents.rstrip()删除最后的空白;(encoding='utf-8')括号里的不填也可以,但是默认编码不一样会读取不到

path.write_text("123")       #在该txt写入123,也可以1/n2/n3这样123换行显示

xx = contents.splitlines()   #按照行分割成列表,比如"第一行\n第二行\r\n第三行\r第四行",输出['第一行', '第二行', '第三行', '第四行']

print(xx)

#相对文件路径:相对于当前工作目录的路径。例如,如果你的当前工作目录是  /home/user ,那么相对路径  myfolder/myfile.txt  将指向  /home/user/myfolder/myfile.txt 。

#绝对文件路径:从根目录开始的完整路径。例如  /home/user/myfolder/myfile.txt  就是一个绝对路径。

 

 

#15.错误处理

try:     #尝试运行下面的代码

    a = 5/q     #q是用户输入的,可能是0

except : xxxError  #如果上面的代码没问题,自动跳过这个,如果是出现写的这个错误,执行print

print("你不能除以0")  #也可以写pass,就是什么也不做。pass在别地方也可以写,就是啥也不做的意思,但可以用来占个地方以后写。

else:     except如果跳过就执行这个,不跳过不执行

    print(a)

#else可选,try-except写了,错误了会继续执行后面代码,否则错误了程序停止,else里的只有try顺利才运行

 

path = Path('username.json')    #path可以省略try

if not path.exists():   #文件不存在就执行,去掉not就是存在时执行

else:  #文件存在执行

 

 

#16.存储数据

from pathlib import Path   

import json

numbers = [2, 3, 5, 7, 11, 13]  # 定义一个数字列表

path = Path('numbers.json')    # 创建一个Path对象,指向将要创建的JSON文件

contents = json.dumps(numbers)  # 将数字列表转换为JSON格式的字符串

path.write_text(contents)        # 将JSON字符串写入文件

contents = path.read_text()

numbers = json.loads(contents)    #返回的就是那个字符串

 

#17.pytest测试

# test_example.py  #创建一个py,可以py里调入其他函数模块来测试,只运行test开头的函数

def add(a, b):

    return a + b

def test_add():

    assert add(2, 3) == 5   #断言1  等于大于小于不等等任何都可以

assert add(5, 0) == 5   #断言2   

 

pytest test_example.py   #cmd运行,会报告断言失败还是成功

 

# test_example.py  在所有测试前运行某个代码,用fixture(夹具),下面是示例

import pytest

@pytest.fixture(scope="module")

def my_fixture():              

    print("Setup: my_fixture")

    yield           #前面的准备运行测试函数前执行,后面的一个测试函数运行完执行

    print("Teardown: my_fixture")

def test_one(my_fixture):

    print("Running test_one")

    assert True

def test_two(my_fixture):

    print("Running test_two")

    assert True

#运行顺序:yield前,测试1,yield后,yield前,测试2,yield后

 

def pytest_sessionstart(session):

print("xx")     #在测试会话开始时调用,整个测试会话只调用一次。可以用来执行一些会话级别的设置

def pytest_sessionfinish(session,exitstatus):    #就是会话结束时运行。session是当前会话的意思,exitstatus参数是一个整数,表示测试会话的退出状态。这个值通常由  pytest设置,若为0是运行成功,根据情况调用。

Tag:
相关文章