【python】基础语法

news2024/10/6 18:30:49

文章目录

  • 元组
  • 列表
  • 字典
  • 集合
  • 推导式
  • 函数
  • 错误和异常处理
  • 文件和操作系统


元组

元组是一个固定长度,不可改变的Python序列对象。创建元组的最简单方式,是用逗号分隔一列值。

  1. 创建

在这里插入图片描述
2. 元组不可修改的解释

对于元组对象不可变的说明,通俗一点就是,不能更换里面的对象,但是里面对象本来就是可以修改,那我们可以修改原本对象的内容:
在这里插入图片描述3. 其他一些小知识
(1)可以通过加号将多个元组串联起来
在这里插入图片描述(2)元组乘以一个整数,像列表一样,会将几个元组的复制串联起来:(对象本身并没有被复制,只是引用了它)

在这里插入图片描述
(3)元组可以拆分

在这里插入图片描述如何只需要元组的前两个值,后面的不需要,舍弃,该怎么操作:
在这里插入图片描述
(4)count方法,也适用于列表,可以统计某个值得出现频率:

在这里插入图片描述


列表

与元组对比,列表的长度可变、内容可以被修改。你可以用方括号定义,或用list函数:

  1. 创建

在这里插入图片描述在这里插入图片描述
2. 添加元素

在这里插入图片描述
3. 删除元素
在这里插入图片描述
4. 用in可以检查列表是否包含某个值:
在这里插入图片描述
5. 与元组类似,可以用加号将两个列表串联起来:
在这里插入图片描述在这里插入图片描述
6. 排序

(1)sort 将一个列表原地排序(不创建新的对象)

在这里插入图片描述在这里插入图片描述

(2)二分法插入数据(bisect模块不会检查列表是否已排好序,进行检查的话会耗费大量计算。因此,对未排序的列表使用bisect不会产生错误,但结果不一定正确)
在这里插入图片描述

  1. 切片操作
    切片输出,赋值。切片的起始元素是包括的,不包含结束元素
    在这里插入图片描述在这里插入图片描述
  2. 序列函数enumerate
    在这里插入图片描述
  3. sorted函数
    sorted函数可以从任意序列的元素返回一个新的排好序的列表:
    在这里插入图片描述
  4. zip函数
    zip可以将多个列表、元组或其它序列成对组合成一个元组列表:
    在这里插入图片描述
    zip可以处理任意多的序列,元素的个数取决于最短的序列:

在这里插入图片描述zip的常见用法之一是同时迭代多个序列,可能结合enumerate使用:

在这里插入图片描述
给出一个“被压缩的”序列,zip可以被用来解压序列。也可以当作把行的列表转换为列的列表。
在这里插入图片描述
11. reversed函数

reversed可以从后向前迭代一个序列:

在这里插入图片描述


字典

哈希映射或关联数组。它是键值对的大小可变集合,键和值都是Python对象。创建字典的方法之一是使用尖括号,用冒号分隔键和值:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述将两个序列配对组合成字典:

mapping = {}
for key, value in zip(key_list, value_list):
    mapping[key] = value

或:

mapping = dict(zip(key_list, value_list))

找某个key的value,没有返回default_value:

value = some_dict.get(key, default_value)

通过首字母分类:

在这里插入图片描述或:
在这里插入图片描述字典的值可以是任意Python对象,而键通常是不可变的标量类型(整数、浮点型、字符串)或元组(元组中的对象必须是不可变的)。


集合

集合是无序的不可重复的元素的集合。你可以把它当做字典,但是只有键没有值。可以用两种方式创建集合:通过set函数或使用尖括号set语句:

set([2, 2, 2, 1, 3, 3]) #{2, 2, 2, 1, 3, 3}

相关用法:
在这里插入图片描述


推导式

  1. 列表、集合和字典推导式
result = [expr for val in collection if condition]

等价于:

result = []
for val in collection:
    if condition:
        result.append(expr)

示例:
在这里插入图片描述字典:

dict_comp = {key-expr : value-expr for value in collection if condition}

集合:

set_comp = {expr for value in collection if condition}
  1. 嵌套列表推导式
    在这里插入图片描述元组展平:
    在这里插入图片描述for表达式的顺序是与嵌套for循环的顺序一样(而不是列表推导式的顺序)
    上述还原代码:
flattened = []

for tup in some_tuples:
    for x in tup:
        flattened.append(x)

在这里插入图片描述


函数

函数使用def关键字声明,用return关键字返回值:

def my_function(x, y, z=1.5):
    if z > 1:
        return z * (x + y)
    else:
        return z / (x + y)

其他一些特色:
(1)可返回多个值:【该函数其实只返回了一个对象,也就是一个元组,最后该元组会被拆包到各个结果变量中】

def f():
    a = 5
    b = 6
    c = 7
    return a, b, c

a, b, c = f()

(2)用内建的字符串方法和正则表达式re模块去除空白符、删除各种标点符号、正确的大写格式等
在这里插入图片描述等价于:

def remove_punctuation(value):
    return re.sub('[!#?]', '', value)

clean_ops = [str.strip, remove_punctuation, str.title]

def clean_strings(strings, ops):
    result = []
    for value in strings:
        for function in ops:
            value = function(value)
        result.append(value)
    return result

还可以将函数用作其他函数的参数,比如内置的map函数,它用于在一组数据上应用一个函数:

for x in map(remove_punctuation, states):
    print(x)

(3)匿名(lambda)函数
它仅由单条语句组成,该语句的结果就是返回值。它是通过lambda关键字定义的,这个关键字没有别的含义,仅仅是说“我们正在声明的是一个匿名函数”。

def short_function(x):
    return x * 2
# 等价
equiv_anon = lambda x: x * 2

常见用法:

def apply_to_list(some_list, f):
    return [f(x) for x in some_list]

ints = [4, 0, 1, 5, 6]
apply_to_list(ints, lambda x: x * 2)

在这里插入图片描述(4)柯里化:部分参数应用,对于某些函数,我们可以直接给定某些参数,方便后面调用
在这里插入图片描述(5)生成器
在这里插入图片描述
可以用下面迭代器代码来代替上面:

ict_iterator = iter(some_dict)  # 迭代器是一种特殊对象
list(dict_iterator)

生成器(generator)是构造新的可迭代对象的一种简单方式。一般的函数执行之后只会返回单个值,而生成器则是以延迟的方式返回一个值序列,即每返回一个值之后暂停,直到下一个值被请求时再继续。要创建一个生成器,只需将函数中的return替换为yeild即可:

def squares(n=10):
    print('Generating squares from 1 to {0}'.format(n ** 2))
    for i in range(1, n + 1):
        yield i ** 2

调用该生成器时,没有任何代码会被立即执行,直到你从该生成器中请求元素时,它才会开始执行其代码:

gen = squares() # 并不会立即执行
for x in gen:  # 该生成器中请求元素,开始执行
   print(x, end=' ')

(6)生成器表达式
另一种更简洁的构造生成器的方法是使用生成器表达式(generator expression)。这是一种类似于列表、字典、集合推导式的生成器。其创建方式为,把列表推导式两端的方括号改成圆括号:

gen = (x ** 2 for x in range(100))
# 等价于
def _make_gen():
    for x in range(100):
        yield x ** 2
gen = _make_gen()

(7)itertools模块
标准库itertools模块中有一组用于许多常见数据算法的生成器。例如,groupby可以接受任何序列和一个函数。它根据函数的返回值对序列中的连续元素进行分组。下面是一个例子:

import itertools
first_letter = lambda x: x[0]
names = ['Alan', 'Adam', 'Wes', 'Will', 'Albert', 'Steven']
for letter, names in itertools.groupby(names, first_letter):
	print(letter, list(names)) # names is a generator

在这里插入图片描述常用到的itertools函数:
在这里插入图片描述


错误和异常处理

(1)把有异常放到try/except代码块中处理
在这里插入图片描述except去捕获异常时,可以元组指定异常的类型(多个异常类型),如果需要捕获所以异常就不需要指定。

常见的文件处理:

f = open(path, 'w')

try:
    write_to_file(f)
except:
    print('Failed')
else:
    print('Succeeded')
finally:
    f.close()

文件和操作系统

(1)简单的文件操作
在这里插入图片描述常常用with语句来代替上面的:这样可以在退出代码块时,自动关闭文件。

with open(path) as f:
	lines = [x.rstrip() for x in f]

关于open()第二参数说明,默认是f = open(path, 'r')
在这里插入图片描述对于可读文件,一些常用的方法是read、seek和tell。read会从文件返回字符。字符的内容是由文件的编码决定的(如UTF-8):

在这里插入图片描述
改变句柄的位置使用seek函数
在这里插入图片描述
写文件:
在这里插入图片描述其他方法:
在这里插入图片描述


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

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

相关文章

自学成为一名黑客

前言:想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安…

【操作系统】调度算法的评价指标和三种调度算法

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 操作系统 一、调度算法的评价指标1.1 CPU利…

使用cpolar端口映射的方法轻松实现在Linux环境下SVN服务器的搭建与公网访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

深入剖析ThreadLocal使用场景、实现原理、设计思想

前言 ThreadLocal可以用来存储线程的本地数据,做到线程数据的隔离 ThreadLocal的使用不当可能会导致内存泄漏,排查内存泄漏的问题,不仅需要熟悉JVM、利用好各种分析工具还耗费人工 如果能明白其原理并正确使用,就不会导致各种意…

【Verilog 教程】6.2Verilog任务

关键词:任务 任务与函数的区别 和函数一样,任务(task)可以用来描述共同的代码段,并在模块内任意位置被调用,让代码更加的直观易读。函数一般用于组合逻辑的各种转换和计算,而任务更像一个过程&a…

win10搭建Selenium环境+java+IDEA(2)

接着上一个搭建环境开始叙述:win10系统x64安装java环境以及搭建自动化测试环境_荟K的博客-CSDN博客 上一步结尾的浏览器驱动,本人后面改到了谷歌浏览器.exe文件夹下: 这里需要注意,这个新路径要加载到系统环境变量中。 上一步下…

2023-9-28 JZ26 树的子结构

题目链接:树的子结构 import java.util.*; /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;}} */ public class Solution {public boolean HasSubtree(TreeNode root1,TreeNode root2) …

吉利微型纯电,5 万元的快乐

熊猫骑士作为一款主打下层市场的迷你车型,吉利熊猫骑士剑指宝骏悦也,五菱宏光 MINI 等热门选手。 9 月 15 日,吉利熊猫骑士正式上市,售价为 5.39 万,限时优享价 4 .99 万元。价格和配置上对这个级别定位的战略车型有一…

力扣刷题-哈希表-判断两个字符串_其他中元素是否一致

242 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输入: s “rat”, t “car” 输出: false 说明: 你可以假设字符串只包含小写字母。 解释&#x…

云安全之身份认证与授权机制介绍

认证与授权技术概述 认证,用于证实某事是否真实或有效的过程。认证一般由标识(ldentification)和鉴别(Authentication)两部分组成。 认证技术分类 身份认证:口令认证、生物特征识别 报文认证:报文源的认证、报文宿的认证、报文内容的认证…

网络爬虫--伪装浏览器

从用户请求的Headers反反爬 在访问某些网站的时候,网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫,用来作为反爬取的一种策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资…

MQ - 34 基础功能:在消息队列内核中支持WebSocket的设计

文章目录 导图概述WebSocket 是什么双工(双向)通信特点和应用场景客户端使用示例WebSocket 协议和消息队列内核中支持 WebSocket 协议支持功能生产消费协议设计支持 WebSocket Server主动消息推送RabbitMQ / Pulsar 如何支持 WebSocket 协议总结导图

Java基础面试题精选:深入探讨哈希表、链表和接口等

目录 1.ArrayList和LinkedList有什么区别?🔒 2.ArrayList和Vector有什么区别?🔒 3.抽象类和普通类有什么区别?🔒 4.抽象类和接口有什么区别?🔒 5.HashMap和Hashtable有什么区别&…

百数服务商——顶杰云,为建筑行业数字化转型“添砖加瓦”

杭州顶杰科技有限公司: 顶杰科技是国内一家行业领先的软件与信息技术服务提供商同时也是百数在建筑业的垂直领域服务商,通过低代码、云计算、AI大数据、IOT、区块链等先进的产品和技术,致力服务于政府、运营商、央国企、制造、金融、教育、能…

AI项目十:Swin Transformer目标检测环境搭建

若该文为原创文章,转载请注明原文出处。 Swin Transformer是做什么的这里不做介绍,主要是记录下学习的全过程,Swin Transformer在搭建和训练的过程中,折腾了很久,主要是在折腾环境。 一、AutoDL租用实例 个人没有GP…

多线程的学习中篇下

volatile 关键字 volatile 能保证内存可见性 volatile 修饰的变量, 能够保证 “内存可见性” 示例代码: 运行结果: 当输入1(1是非O)的时候,但是t1这个线程并沿有结束循环, 同时可以看到,t2这个线程已经执行完了,而t1线程还在继续循环. 这个情况,就叫做内存可见性问题 ~~ 这…

初识Java 11-2 函数式编程

目录 高阶函数 闭包 函数组合 柯里化和部分求值 本笔记参考自: 《On Java 中文版》 高阶函数 ||| 高阶函数的定义:一个能接受函数作为参数或能把函数当返回值的函数。 把函数当返回值的情况: import java.util.function.Function;inter…

26551-2011 畜牧机械 粗饲料切碎机

声明 本文是学习GB-T 26551-2011 畜牧机械 粗饲料切碎机. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了粗饲料切碎机的产品型号、技术要求、试验方法、检验规则、标志、包装、运输与贮存。 本标准适用于加工农作物秸秆等粗饲料…

Python接口自动化之unittest单元测试

以下主要介绍unittest特性、运行流程及实际案例。 一、单元测试三连问 1、什么是单元测试? 按照阶段来分,一般就是单元测试,集成测试,系统测试,验收测试。单元测试是对单个模块、单个类或者单个函数进行测试。 将…

迅为龙芯2K1000开发板通过汇编控制GPIO

上一小节,我们使用了 C 语言控制了 gpio,这一小节我们来看一下如何使用汇编来控制 gpio 呢?有的 同学可能会有疑问了,既然我们可以使用 C 语言来控制 gpio,为什么我们还要使用更底层的汇编语言呢, 如果我…