关于python的复习

Python的基础

  • 自动声明: 在 Python 中,不需要显式声明变量类型,变量的类型是在赋值时根据值自动推断的。

  • 动态类型: Python 是动态类型语言,变量的类型可以在运行时改变。

  • x = 10       # 整数
    x = "hello"  # 现在是字符串

变量作用域

Python
  • 作用域规则: Python 使用 LEGB(Local, Enclosing, Global, Built-in)规则来解析变量的作用域。

  • 全局变量: 可以在函数内部使用 global 关键字来修改全局变量。

 python语法:

在Java中布尔表达都是用括号括起来的 python中可用可不用
if 布尔表达式1:
	代码块
elif 布尔表达式2:
	代码块
elif 布尔表达式3:
	代码块
....
else:
	代码块

s = int(input("请输入分数:"))

if 80 >= s >= 60:
    print("及格")
elif 80 < s <= 90:
    print("优秀")

elif 90 < s <= 100:
    print("非常优秀")

else:
    print("不及格")

while 布尔表达式: 
	代码块


for 变量 in 可迭代对象:
    # 执行的代码块
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

#python中循环十次,也是从0开始,但是对比起来就比Java轻便多了
for i in range(10):
    if i == 5:
        break  # 当 i 等于 5 时退出循环
    if i % 2 == 0:
        continue  # 跳过偶数
    print(i)

 python和Java定义数组的区别,此外python还有一个叫元组的:

Java 数组

在 Java 中,数组是固定大小的并且类型是严格的。定义数组的语法如下:

// 声明和初始化一个整型数组
int[] myArray = new int[5]; // 定义一个长度为5的整型数组

// 直接初始化数组
int[] anotherArray = {1, 2, 3, 4, 5};

int firstElement = myArray[0]; // 访问第一个元素

myArray[0] = 10; // 修改第一个元素的值

Python 列表

在 Python 中,数组通常是用列表(list)来表示。列表是动态大小的,可以包含不同类型的元素。在 Python 中,列表是动态的,可以随时添加或删除元素,定义数组的语法如下:

# 定义一个列表(相当于数组)
my_list = [1, 2, 3, 4, 5]

# 列表可以包含不同类型的元素
mixed_list = [1, "two", 3.0, True]

first_element = my_list[0]  # 访问第一个元素

my_list[0] = 10  # 修改第一个元素的值

# 获取列表的长度
length = len(my_list) 

# 动态添加元素
my_list.append(6)


#列表的操作
切片操作:变量[起始下标:结束下标] 	#结束下标取不到
l = [1, 2, 3, 4, 5]
print(l[0:4])

l = [2, 3, 4, 6]
print(5 not in l)	#输出“5不在列表l中”这句话的真假

 

 元组:

1. 不能修改,不可变类型
2. 用()的形式
3. 元组也是可迭代对象
4. 元组是有序的,下标操作,支持切面操作[:]
1. 创建:
	直接创建,例如  t = (1,2,3,4,5)
2. 访问:
	t[下标]  #获取元素
3. 切片操作:
	t[:] 返回元组
t = (1, 2, 3, 4, 5)
print(t[2]) #输出下标为2的元组元素
n = t[2:4]  #切片,范围是下标2~4
print(n)
t = (1, 2, 3, 4, 5)
print(5 not in t)	#5不在元组里面

元组有的方法和列表一样。 

 字典:

1. 直接创建
		语法: d = {} 	#空字典
		例如: d = {"name":"不良人","apple":"苹果"}
2.用dick函数创建:
my_dict = dict(name='Alice', age=30, city='New York')

# 或者使用 items() 方法
my_dict = {
    'name': 'Alice',
    'age': 30,
    'city': 'New York'
}
#循环把字段的值遍历出来
for key, value in my_dict.items():
    print(f"{key}: {value}")
#打印前加f再在里面使用{}就可以使用变量了。而Java的话你就需要变成
#例如println("我的名字"+name)
print(f"My name is {name} and I am {age} years old.")
#输出My name is Alice and I am 30 years old.

 

python中的函数:

# animals.py
class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        return f"{self.name} says woof!"

class Cat:
    def __init__(self, name):
        self.name = name

    def meow(self):
        return f"{self.name} says meow!"


# main.py
from animals import Dog, Cat
#这里有个小细节如果你给类里的这些方法前面加一个静态的装饰器,那么就不需要实例化对象了,
#可以直接Dog点方法。
my_dog = Dog(name="Buddy")
my_cat = Cat(name="Whiskers")

print(my_dog.bark())  # 输出: Buddy says woof!
print(my_cat.meow())   # 输出: Whiskers says meow!

# a.py
class A:
    sqldress = "sadasd"  # 类属性

# main.py
from a import A

print(A.sqldress)  # 输出: sadasd

# a.py
class A:
    def __init__(self):
        self.sqldress = "sadasd"  # 实例属性

# main.py
from a import A

a_instance = A()          # 创建类的实例
print(a_instance.sqldress)  # 输出: sadasd

在 Python 中,函数不一定需要定义在类里面。函数可以定义在模块的全局作用域中,也可以定义在类内部。

函数的文档

写代码的时候我们经常需要写文档,前面有提过#和三引号可以进行代码的注释,但在这里要介绍一种新的方法,也是写代码时常用的函数文档书写格式:在函数体的第一行用 “”" “”" 进行文档说明,这是标准化的函数文档书写。

例如:

 

 python中的函数的闭包的理解和使用:

使用闭包的条件:
1. 必须是一个内嵌函数
2. 外部函数必须返回内部函数的函数对象
3. 内部函数必须使用外部函数的局部变量
闭包本身在 Python 中是一个非常强大和优雅的特性,特别是在需要动态生成函数和保留状态时。
到底什么是闭包,为什么要使用闭包,下面举个例子实现计数器的功能你就知道了。
分别用闭包和类实现一样的功能
#使用闭包
def make_counter():
    count = 0  # 每个计数器都有自己的状态

    def counter():
        nonlocal count  # 使用外部函数的 count 变量
        count += 1
        return count

    return counter

# 创建多个计数器
counter1 = make_counter()

print(counter1())  # 输出: 1
print(counter1())  # 输出: 2


#使用类
def make_counter():
    count = 0  # 每个计数器都有自己的状态

    def counter():
        nonlocal count  # 使用外部函数的 count 变量
        count += 1
        return count

    return counter

# 创建多个计数器
counter1 = make_counter()

print(counter1())  # 输出: 1
print(counter1())  # 输出: 2

#相似性:闭包和类在封装和状态管理方面确实有相似之处。闭包可以看作是一个轻量级的封装工具,而类
#则提供了更为丰富和强大的特性。
#区别:闭包适合更简单的任务和轻量级的功能,而类则适合复杂的应用程序和结构化的代码设计。

关于在自动化框架的python补充: 

class Event:

    @staticmethod
    @allure.step('立即购买并点击提交订单')
    def event_submit_order(driver):
        """
        立即购买并点击提交订单
        :param driver:
        :return:
        """
        try:
            driver.get(ENV.url + '18/')
            # driver.sel_click((By.XPATH, '//body/div[5]/div[2]/ul[1]/li[1]/a[1]/img[1]'))
            driver.sel_click((By.XPATH, "(//a[contains(text(),'立即购买')])[1]"))
            driver.sel_click((By.XPATH, "//a[contains(text(),'去结算')]"))
            driver.sel_click((By.XPATH, "//a[@id='order_btn']"))
            sleep(1)
        except Exception as e:
            log.error(f'立即购买并点击提交订单事件异常,为:{e}')
            raise e

关于字符串的小细节:在 Python 中,字符串可以用单引号 (') 或双引号 (") 来定义,这两个选项是等效的。选择使用哪一种主要取决于代码的可读性和对字符串内容的需求。 在Python中,字符和字符串没有区别。可能有些同学学过其他的语言,例如Java,在Java中,单引号’a’表示字符’a’,双引号"abc"表示字符串"abc",但在Python当中,它们没有区别,都统称字符串。

关于自动化框架的修饰器补充: 

@staticmethod

 @allure.step('立即购买并点击提交订单')

这两个放置的先后顺序有关系吗?

在 Python 中,装饰器的应用顺序是有关系的,装饰器的叠加效果是从内到外,从下到上执行的。

@staticmethod
@allure.step('立即购买并点击提交订单')
def event_submit_order(driver):
    ...

具体效果

  1. @allure.step:

    • 这个装饰器会将 event_submit_order 方法标记为一个 Allure 测试步骤。这意味着每次调用这个方法时,Allure 会记录这个步骤,并在测试报告中显示。
  2. @staticmethod:

    • 这个装饰器会将 event_submit_order 方法定义为一个静态方法,使得这个方法可以通过类名直接调用,而不需要实例化类。
    • @staticmethod 是 Python 中的一个装饰器(decorator),用于将类中的方法定义为静态方法(static method)。静态方法是与类本身相关联的方法,而不是与类的实例相关联。它不需要访问类的实例(通过 self)或类本身(通过 cls)。
@allure.step('立即购买并点击提交订单')
@staticmethod
def event_submit_order(driver):



#以下代码是解释@staticmethod装饰器的
class MathUtils:
    @staticmethod
    def add(x, y):
        return x + y

    @staticmethod
    def subtract(x, y):
        return x - y

# 使用静态方法
result1 = MathUtils.add(5, 3)
result2 = MathUtils.subtract(5, 3)

那么 event_submit_order 方法会首先被 staticmethod 装饰器处理,然后再被 allure.step 装饰器处理。这会导致 allure.step 装饰器的作用无法正确应用,因为它会尝试将一个静态方法作为测试步骤,但静态方法不是一个实例方法,因此 Allure 可能无法正确记录这个步骤。

总结

装饰器的顺序非常重要。在你的例子中,保持 @staticmethod 在上面,@allure.step 在下面的顺序是正确的,确保方法既是一个静态方法,又能够被 Allure 正确记录。如果改为反向顺序,很可能导致 Allure 记录失败。因此,务必注意装饰器的顺序以确保预期的功能正常运作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HBuilderX运行微信小程序,编译的文件在哪,怎么运行

1. 点击HBuilderX顶部的运行-运行到小程序模拟器-微信开发者工具&#xff0c;就会开始编译 2. 编译完成后的文件在根目录找到 unpackage -- dist -- dev -- mp-weixin, 这里面就是编译后的文件&#xff0c;如果未跳转到开发者工具&#xff0c;那可能是没设置启动路径&#xff0…

自然语言处理在客户服务中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 自然语言处理在客户服务中的应用 自然语言处理在客户服务中的应用 自然语言处理在客户服务中的应用 引言 自然语言处理概述 定义…

【学习笔记】Kylin-Desktop-V10-SP1 麒麟系统知识4——设备设置

提示&#xff1a;学习麒麟Kylin-Desktop-V10-SP1系统设备设置相关知识&#xff0c;包含设备设置进入方法、配置打印机、设置鼠标、键盘相关参数&#xff08;包含输入法的配置&#xff09;、以及管理快捷键组合、和多屏协同相关配置 一、前期准备 成功安装麒麟系统&#xff08…

Gen-RecSys——一个通过生成和大规模语言模型发展起来的推荐系统

概述 生成模型的进步对推荐系统的发展产生了重大影响。传统的推荐系统是 “狭隘的专家”&#xff0c;只能捕捉特定领域内的用户偏好和项目特征&#xff0c;而现在生成模型增强了这些系统的功能&#xff0c;据报道&#xff0c;其性能优于传统方法。这些模型为推荐的概念和实施带…

【国内中间件厂商排名及四大中间件对比分析】

国内中间件厂商排名 随着新兴技术的涌入&#xff0c;一批国产中间件厂商破土而出&#xff0c;并在短时间内迅速发展&#xff0c;我国中间件市场迎来洗牌&#xff0c;根据市占率&#xff0c;当前我国中间件厂商排名依次为&#xff1a;东方通、宝兰德、中创股份、金蝶天燕、普元…

PVE纵览-备份与快照指南

PVE纵览-备份与快照指南 文章目录 PVE纵览-备份与快照指南摘要1 备份与快照概述定义与区别备份与快照在PVE中的应用场景 2 PVE 备份功能详解备份类型与策略配置备份任务自动化备份管理 3 PVE 快照功能详解快照的工作原理快照的创建与恢复机制快照对系统性能的影响快照的使用场景…

解非线性方程组

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的&#xff1a;进一步熟练掌握解非线性方程组牛顿迭代算法&#xff0c;提高编程能力和解算非线性方程组问题的实践技能。 实验内容&#xff1a; 设有非线性方程组(此方程组是非标准型) 实验说明&#xff1…

JavaWeb合集23-文件上传

二十三 、 文件上传 实现效果&#xff1a;用户点击上传按钮、选择上传的头像&#xff0c;确定自动上传&#xff0c;将上传的文件保存到指定的目录中&#xff0c;并重新命名&#xff0c;生成访问链接&#xff0c;返回给前端进行回显。 1、前端实现 vue3AntDesignVue实现 <tem…

设计模式-七个基本原则之一-开闭原则 + SpringBoot案例

开闭原则:(SRP) 面向对象七个基本原则之一 对扩展开放&#xff1a;软件实体&#xff08;类、模块、函数等&#xff09;应该能够通过增加新功能来进行扩展。对修改关闭&#xff1a;一旦软件实体被开发完成&#xff0c;就不应该修改它的源代码。 要看实际场景&#xff0c;比如组内…

图形几何之美系列:仿射变换矩阵(二)

“ 在几何计算、图形渲染、动画、游戏开发等领域&#xff0c;常需要进行元素的平移、旋转、缩放等操作&#xff0c;一种广泛应用且简便的方法是使用仿射变换进行处理。相关的概念还有欧拉角、四元数等&#xff0c;四元数在图形学中主要用于解决旋转问题&#xff0c;特别是在三维…

python识别ocr 图片和pdf文件

#识别图片 pip3 install paddleocr pip3 install paddlepaddle#识别pdf pip3 install PyMuPDF 重点&#xff1a;路径不能有中文&#xff0c;不然pdf文件访问不了 from paddleocr import PaddleOCR from rest_framework.response import Response from rest_framework.views im…

使用Ubuntu快速部署MinIO对象存储

想拥有自己的私有云存储&#xff0c;安全可靠又高效&#xff1f;MinIO是你的理想选择&#xff01;这篇文章将手把手教你如何在Ubuntu 22.04服务器上部署MinIO&#xff0c;并使用Nginx反向代理和Let’s Encrypt证书进行安全加固。 即使你是新手&#xff0c;也能轻松完成&#xf…

EasyUI弹出框行编辑,通过下拉框实现内容联动

EasyUI弹出框行编辑&#xff0c;通过下拉框实现内容联动 需求 实现用户支付方式配置&#xff0c;当弹出框加载出来的时候&#xff0c;显示用户现有的支付方式&#xff0c;datagrid的第一列为conbobox,下来选择之后实现后面的数据直接填充&#xff1b; 点击新增&#xff1a;新…

【神经科学学习笔记】基于分层嵌套谱分割(Nested Spectral Partition)模型分析大脑网络整合与分离的学习总结

一、前言 1.学习背景 最近在学习脑网络分析方法时&#xff0c;笔者偶然读到了一篇发表在Physical Review Letters上的文章&#xff0c;文章介绍了一种名为嵌套谱分割(Nested-Spectral Partition, NSP)的方法&#xff0c;用于研究大脑功能网络的分离和整合特性。 传统的脑网络分…

如何优雅处理异常?处理异常的原则

前言 在我们日常工作中&#xff0c;经常会遇到一些异常&#xff0c;比如&#xff1a;NullPointerException、NumberFormatException、ClassCastException等等。 那么问题来了&#xff0c;我们该如何处理异常&#xff0c;让代码变得更优雅呢&#xff1f; 1 不要忽略异常 不知…

海量数据迁移:Elasticsearch到OpenSearch的无缝迁移策略与实践

文章目录 一&#xff0e;迁移背景二&#xff0e;迁移分析三&#xff0e;方案制定3.1 使用工具迁移3.2 脚本迁移 四&#xff0e;方案建议 一&#xff0e;迁移背景 目前有两个es集群&#xff0c;版本为5.2.2和7.16.0&#xff0c;总数据量为700T。迁移过程需要不停服务迁移&#…

macOS开发环境配置与应用开发(详细讲解)

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 macOS作为Apple公司推出的桌面操作系统&#xff0c;以其稳定性、优雅的用户界面和强大的开发工具吸引了大量开发者。对于…

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 文章目录 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和…

前端学习之ES6+

1.ES6是什么 ES6&#xff0c;全称是ECMAScript 6&#xff0c;是JavaScript语言的下一代标准&#xff0c;由ECMA国际组织在2015年6月正式发布。ES6也被称作ECMAScript 2015&#xff0c;从这个版本开始&#xff0c;ECMA组织决定每年发布一个新的ECMAScript版本&#xff0c;以使J…

查缺补漏----用户上网过程(HTTP,DNS与ARP)

&#xff08;1&#xff09;HTTP 来自湖科大计算机网络微课堂&#xff1a; ① HTTP/1.0采用非持续连接方式。在该方式下&#xff0c;每次浏览器要请求一个文件都要与服务器建立TCP连接当收到响应后就立即关闭连接。 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引…