Python语法基础三

12.range()函数

python 的 range() 函数可用来创建一个整数列表,一般用在 for 循环中.

  • **range()语法:**range(start, stop[, step])
  • **start:**计数从start开始,默认是从0开始(闭区间),如:range(5)等价于range(0,5).
  • **stop:**计数到stop结束,但不包括stop(开区间).如:range(0,5)是[0, 1, 2, 3, 4],不包含5.
  • **step:**步长,相邻两个值的差值,默认为1.如:range(0,5)相当于range(0, 5, 1).

13.列表推导式

列表推导式(list comprehension)是指循环创建列表.

# 列表推导式
list_b = [b for b in range(5)]
print(list_b)

上面分别是用for循环和列表推导式创建列表的代码,list_a和list_b的结果是一样的,都是[0, 1, 2, 3, 4].

下面来看复杂点的列表推导式:

# in后面跟其他可迭代对象,如字符串
list_c = [7 * c for c in "python"]
print(list_c)# 带if条件语句的列表推导式
list_d = [d for d in range(6) if d % 2 != 0]
print(list_d)# 多个for循环
list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
print(list_e)# 嵌套列表推导式,多个并列条件
list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0]
print(list_g)

运行结果:

['ppppppp', 'yyyyyyy', 'ttttttt', 'hhhhhhh', 'ooooooo', 'nnnnnnn']
[1, 3, 5]
[(0, 25), (0, 100), (1, 25), (1, 100), (2, 25), (2, 100)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]]

代码解释:

  1. 列表推导式会遍历后面的可迭代对象,然后按照for前的表达式进行运算,生成最终的列表.
  2. 如果有if条件语句,for遍历后紧跟着进行条件判断.
  3. 3.如果有多个for循环,则最终的数据数量为多个for循环的笛卡尔积.
  4. 4.可以进行嵌套的列表推导,与嵌套for循环的原理相同.

14.字典推导式

如果列表推导的概念已经为你所熟知,接受字典推导并不难.直接看代码吧:

# 因为key是唯一的,所以最后value都是1
dict_a = {key: value for key in 'python' for value in range(2)}
print(dict_a)# 可以根据键来构造值
dict_b = {key: key * key for key in range(6)}
print(dict_b)# 遍历一个有键值关系的可迭代对象
list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
dict_c = {key: value for key, value in list_phone}
print(dict_c)

运行结果:

{'p': 1, 'y': 1, 't': 1, 'h': 1, 'o': 1, 'n': 1}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
{'HUAWEI': '华为', 'MI': '小米', 'OPPO': 'OPPO', 'VIVO': 'VIVO'}

15.集合推导式

同样的,直接看代码,这样可以直观的看到集合推导式

# 遍历一个可迭代对象生成集合
set_a = {value for value in '有人云淡风轻,有人负重前行'}
print(set_a)

运行结果:

{'负', '有', '人', '轻', '前', '云', '重', ',', '淡', '风', '行'}

集合是无序且不重复的,所以会自动去掉重复的元素,并且每次运行显示的顺序不一样。

16.创建类

使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:

class ClassName:'类的帮助信息'   #类文档字符串class_suite  #类体

类的帮助信息可以通过ClassName.__doc__查看。

class_suite 由类成员,方法,数据属性组成。

实例

以下是一个简单的 Python 类的例子:

#!/usr/bin/python
# -*- coding: UTF-8 -*-class Employee:'所有员工的基类'empCount = 0def __init__(self, name, salary):self.name = nameself.salary = salaryEmployee.empCount += 1def displayCount(self):print "Total Employee %d" % Employee.empCountdef displayEmployee(self):print "Name : ", self.name,  ", Salary: ", self.salary
  • empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
  • 第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
  • self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self代表类的实例,而非类

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

创建实例对象

实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。

以下使用类的名称 Employee 来实例化,并通过 init 方法接收参数。

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000) 

访问属性

您可以使用点号 . 来访问对象的属性。使用如下类的名称访问类变量:

emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

执行以上代码输出结果如下:

Name :  Zara ,Salary:  2000
Name :  Manni ,Salary:  5000
Total Employee 2

你可以添加,删除,修改类的属性,如下所示:

emp1.age = 7  # 添加一个 'age' 属性
emp1.age = 8  # 修改 'age' 属性
del emp1.age  # 删除 'age' 属性

你也可以使用以下函数的方式来访问属性:

  • getattr(obj, name[, default]) : 访问对象的属性。
  • hasattr(obj,name) : 检查是否存在一个属性。
  • setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
  • delattr(obj, name) : 删除属性。
hasattr(emp1, 'age')    # 如果存在 'age' 属性返回 True。
getattr(emp1, 'age')    # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(emp1, 'age')    # 删除属性 'age'

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

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

相关文章

vue 实现 word/excel/ppt/pdf 等文件格式预览操作

效果图: 问题描述:一般情况下使用iframe标签就可以实现文件预览,但是这个标签只针对于ppt和pdf是有效的。对于doc文件就需要借助第三方插件(vue-office/docx)来实现预览了。下面介绍使用方法。 安装插件:n…

Lua C API

Lua 5.4 Reference Manual - contents官方网站

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表) 文章目录 力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)一、31. 下一个排列二、4. 寻找两个正序数组的中位数三…

量化交易策略:定义及其重要性

量化交易是华尔街和硅谷的秘密结合点,在这里数学和算法与金钱和市场相遇。虽然它曾经是金融巨头的专属领域,但现在它比以往任何时候都更易于接触。 但不要被愚弄,量化交易仍然是一种高速、高压的游戏,在毫秒间可以赚到或失去财富…

FlashST 短期交通预测领域的插件式创新

FlashST: A Simple and Universal Prompt-Tuning Framework for Traffic Prediction:一篇在短期交通预测领域的插件式创新,主要解决不同数据集和任务下的分布漂移问题。 方法:采用二阶段训练的方法,一阶段在PEMS03478数据集上进行…

STM32CubeIDE复制工程文档

目录 1. 粘贴复制2. 重命名 1. 粘贴复制 复制粘贴 重命名,别重名,点击- copy 结果 2. 重命名 重命名 ioc文件 编译 OK

IDEA 安装与激活详细教程最新(附最新激活码)2099年亲测有效!

我们先从 IDEA 官网下载 IDEA 2024.1 版本的安装包,下载链接如下: https://www.jetbrains.com/idea/download/ 点击下载(下载Ultimate版),静心等待其下载完毕即可。 激活方式: 正版专属激活码领取

教程:Spring Boot中如何集成GraphQL

教程:Spring Boot中如何集成GraphQL 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 引言 随着现代应用程序的复杂性增加,API的设计和…

基本的网络设备:集线器、中继器、网桥、交换机、路由器、防火墙等

基本的网络设备:集线器、中继器、网桥、交换机、路由器、防火墙等 基本功能、原理、优缺点集线器(Hub)中继器(Repeater)网桥(Bridge)交换机(Switch)路由器(Ro…

手机越用越慢?试试这4个秘籍,让手机流畅如新

智能手机作为日常生活的得力助手,最初总是以惊人的速度和流畅性给我们留下深刻印象。 但你有没有发现,随着时间的推移,手机似乎开始变得不那么敏捷,甚至出现了反应迟缓和卡顿的情况? 别让这个问题困扰你,下面是四个关…

Linux关闭swap分区操作[适用于CDH报警等]

1.查看swap分区挂载路径(没卵用) swapon -s 2.设置配置文件的swap配置 echo “vm.swappiness 0” > /etc/sysctl.conf 3.设置内存中的swap状态。有时候配置文件为0,但集群或服务仍然使用了swap分区,可能原因就是内存没有同步配置 echo “0” > …

step5:“串口设置”逻辑(下)

文章目录 文章介绍效果图SerialPort.qml代码v1代码v2代码v3 文章介绍 文章qml/c:基础界面的“串口设置”逻辑1实现了 1、串口连接,连接成功的弹窗提示 2、读取数据。 本篇文章需要实现的功能是 1)接收数据后更新“已接收”的行数 效果图 Se…

【代码随想录算法训练营第五十天|1143.最长公共子序列、1035.不相交的线、53.最大子数组和、392.判断子序列】

文章目录 1143.最长公共子序列1035.不相交的线53.最大子数组和392.判断子序列 1143.最长公共子序列 和最长连续子序列的区别是,除了在text1[i]text2[j]的时候要令dp[i][j] dp[i-1][j-1] 1之外,在不相等的时候dp[i][j]同样需要赋值,在text1…

Map的五种遍历方式

在Java中,Map是一种键值对的集合,用于存储键值对的数据结构。它提供了一种通过键来查找和访问值的方式,每个键都是唯一的,而值可以重复。 特点和常见实现类 键值对的存储:Map以键值对(key-value pair&#…

文本分类-RNN-LSTM

1.前言 本节介绍RNN和LSTM,并采用它们在电影评论数据集上实现文本分类,会涉及以下几个知识点。 1. 词表构建:包括数据清洗,词频统计,词频截断,词表构建。 2. 预训练词向量应用:下载并加载Glove的…

鸿蒙星河NEXT学习笔记

1.1 字符串 // 变量的存储和修改(string number boolean) // 1. 变量存储 // 1.1 字符串 string 类型 // 注意点1:字符串需要用引号引起来(单引双引号)字符串 "字符串" // 注意点2:存储的时候&a…

Elasticsearch开启认证|为ES设置账号密码|ES账号密码设置|ES单机开启认证|ES集群开启认证

文章目录 前言单节点模式开启认证生成节点证书修改ES配置文件为内置账号添加密码Kibana修改配置验证 ES集群开启认证验证 前言 ES安装完成并运行,默认情况下是允许任何用户访问的,这样并不安全,可以为ES开启认证,设置账号密码。 …

FPGA无网络芯片实现千兆TCP/IP协议栈,基于1G/2.5G Ethernet PCS/PMA or SGMII方案,提供18套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我这里已有的以太网方案网络芯片版本-->千兆网 TCP-->服务器 方案网络芯片版本-->千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案1G/2.5G Ethernet PCS/PMA or SGMII 方案AXI 1G/2.5G Ethernet Subs…

Java内存模型以及多线程并发深度剖析

文章目录 Java内存模型JMM的基本概念缓存一致性与处理器优化happens-before原则总结主内存以及cpu的多级缓存模型的实现原理主内存(Main Memory)CPU多级缓存模型实现原理:多线程并发运行时可能引发的数据不一致问题总线加锁机制和MESI缓存一致性协议的工作原理总线加锁机制M…

AI大模型安全挑战和安全要求解读

引言 随着人工智能技术的飞速发展,大模型技术以其卓越的性能和广泛的应用前景,正在重塑人工智能领域的新格局。然而,任何技术都有两面性,大模型在带来前所未有便利的同时,也引发了深刻的安全和伦理挑战。 大模型&…