Python3的一些基础语法介绍和理解

2023-11-06

作者:心叶
时间:2018-04-23 22:18

此处长期维护一些对帮助快速使用python3的一些基础语法,方便日常算法练习使用。

控制语法

break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。

continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

if条件控制

if 表达式:
    语句
    if 表达式:
        语句
    elif 表达式:
        语句
else:
    语句

while循环

Python中没有do..while循环

while 判断条件:
    语句
else:
    语句

for语句

for <variable> in <sequence>:
    <statements>
else:
    <statements>

range()函数

这个函数不得不提,为什么滴?因为在实际用python练习算法题目时,这个函数真的用的太频繁了。

print(list(range(5,9))) #[5, 6, 7, 8]

for i in range(5):print(i,end=' ') #0 1 2 3 4

for i in range(1,3):print(i,end=' ') #1 2

for i in range(0, 10, 3):print(i,end=' ') #0 3 6 9

for i in range(-10, -100, -30):print(i,end=' ') #-10 -40 -70
    

迭代器与生成器

迭代器

迭代器是什么东西?哈哈,有没有想起java中集合的方法iterator()返回迭代器?是的,就是类似这个的存在。

迭代器有两个基本的方法:iter() 和 next(),这点也很类似java(字符串,列表或元组对象都可用iter()方法创建迭代器对象)。

下面先简单演示一下这二个方法的用法:

list=['中国','美国','俄罗斯','埃塞俄比亚']

#1.使用iter()方法获取迭代器对象
it = iter(list) 

#2.使用next()方法依次获取数据
print (next(it)) #打印结果是'中国'
print (next(it)) #打印结果是'美国'

上面的例子应该已经明白这二个方法的用法了,使用iter()方法获取迭代器对象,再用next(it)方法依次获取集合的数据。

当然,到末尾了已经没有可以取的数据的时候,再次调用会抛出异常,因此我们可以借助这个来实现迭代全部的数据,如下:

list=['中国','美国','俄罗斯','埃塞俄比亚']

it = iter(list)  

flag=True; 

while flag:

    try:
        print (next(it))
        
    except StopIteration:
        print ('迭代结束了',end='\n')
        flag=False

除此之外,使用for可以实现类似的效果,如下:

list=['中国','美国','俄罗斯','埃塞俄比亚']

it = iter(list)

for x in it: 
    print (x, end=" ") #'中国','美国','俄罗斯','埃塞俄比亚'

因此,迭代全部的数据肯定不是迭代器存在的全部意义,更多的时候,你可以把它看成一个管理一列数据的对象,需要的时候告诉他一下,他就会给你下一个数据,不像for循环那样一下子迭代结束,你可以在任何需要的时候获取下一个数据。

记住这一个特点,特别是在设计算法或者模式的时候,会很有用的(当然,具体用好他从来都是经验的事情,祝你好运)。

生成器

TS或者ES6+有所了解的人应该都知道yield函数,基本上和这里的差不多用法。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。

上面的说法可能有点不好理解,ok,下面用大白话说一下:

生成器就是一个可以自定义一个生成迭代器对象函数的概念,生成的迭代器对象每次被询问返回下一个数据的时候,自定义的如果返回,使用的就是yield函数,先看下下面的例子:

#定义一下可以生成迭代器对象的函数,类似上面例子中的iter()方法
def generatorDemo(array):
    index=0
    while(index<len(array)):
        #你每次调用next(it)的时候,就是这里返回给你的数据
        yield array[index]
        index=index+1

#用上面的迭代器对象生成函数生成一个迭代器对象
it=generatorDemo(['中国','美国','俄罗斯','埃塞俄比亚'])
 
#下面就是和之前一样使用
flag=True
while flag:
    try:
        print (next(it), end=" ")
    except StopIteration:
        flag=False

#执行结果:中国 美国 俄罗斯 埃塞俄比亚 
        

因此,你可以从二个角度来理解生成器:

1.一个和迭代器配合使用的迭代器对象生成方法;

2.更本质的理解:yield类似return,可以返回数据,不过不同的是,可以多次返回数据,调用一下返回一下,再次调用返回下一个yield定义返回数据的地方,就如同上面的例子,直到yield语句全部完毕再次调用会抛出错误。

如果你问我什么时候使用他,这具体看业务需求,就好比if语句一样,他就在那里,需要用的时候可以记起来他,就够了。

函数

具体就不用多说明了,直接给出定义,然后说几个重要的问题。

def 函数名(参数列表):
    函数体

参数传递

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

函数中传递参数的时候,不可更改的对象和可以修改的对象在操作影响上是有很大区别的,用一句话说明的话就是:不可更改的对象类似传递的是值,可以修改的对象传递的是'指针',也就是引用传递,应该可以感受出来区别了吧。

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

参数

参数有四点,具体的很多和ES很像,不过在第一点上和ES区别很大,下面来简单说明一下:

1.必需参数:就是你定义函数的时候,定义了几个参数,调用的时候就要传递几个,当然是普通定义方法,不包括下面的不定长参数,这点ES就很随意了;

2.关键字参数:举个例子,比如你定义了一个函数有二个参数age和name,函数名称是getInfo,正常调用是依次传递参数:getInfo(7,'yelloxing'),当然你可以不这样,你还可以这样:

getInfo(name='yelloxing',age=7);

3.默认参数:这个就和ES6差不多意思,举例,定义函数时(没有写全,值写函数头部):

getInfo(age,name='默认名称');

4.不定长参数:定义方法:getInfo(age,name,*vartuple),这样多传递的数据就全部在vartuple中,调用前它是一个空元组。

别的更多细节说明就到此为止,如果后续有必要再添加或单独整理,此时的已经够用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3的一些基础语法介绍和理解 的相关文章

  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 如何在 JFreeChart TimeSeries 图表上显示降雨指数和温度?

    目前 我的 TimeSeries 图表每 2 秒显示一个位置的温度 现在 如果我想每2秒显示一次降雨指数和温度 我该如何实现呢 这是我的代码 import testWeatherService TestWeatherTimeLapseSer
  • 使用 if 语句的网格网格和用户定义函数的真值不明确

    假设我有一个函数f x y 足够光滑 然而 有些值仅在有限的意义上存在 以sin x x的价值x 0只存在于极限 x gt 0 中 在一般情况下 我用一个来处理这个问题if陈述 如果我在情节中使用它meshgrid我收到一条错误消息 Val
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • 没有名为“turtle”的模块

    我正在学习并尝试用Python3制作贪吃蛇游戏 我正在进口海龟 我正在使用 Linux mint 19 PyCharm python37 python3 tk Traceback most recent call last File hom
  • pandas.read_fwf 忽略提供的数据类型

    我正在从文本文件导入数据框 我想指定列的数据类型 但 pandas 似乎忽略了dtype input 一个工作示例 from io import StringIO import pandas as pd string USAF WBAN S
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • 在Python中停止ThreadPool中的进程

    我一直在尝试为控制某些硬件的库编写一个交互式包装器 用于 ipython 有些调用对 IO 的影响很大 因此并行执行任务是有意义的 使用 ThreadPool 几乎 效果很好 from multiprocessing pool import
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 华为云交付项目服务器配置表,云服务器设备配置列表

    云服务器设备配置列表 内容精选 换一换 当您在华为云上部署了弹性云服务器以及其他云服务 想在关联VPC内通过内网域名实现互访 可以为弹性云服务器配置内网域名解析 内网域名可以随意创建 无需注册 只需要保证VPC内唯一 本操作以为弹性云服务器
  • JavaScript设计模式——工厂模式

    在介绍工厂模式之前 首先我们要理解一下什么是设计模式 什么是设计原则 设计模式 通常在我们解决问题的时候 很多时候不是只有一种方式 我们通常有多种方式来解决 但是肯定会有一种通用且高效的解决方案 这种解决方案在软件开发中我们称它为设计模式
  • 字符串的截取

    第二个 开始截取 String orderArr1 order substring order indexOf order indexOf 1 最后一个 开始截取 String orderArr1 order substring order
  • iOS如何提高tableView的性能

    a 重用cell 我们都知道申请内存是需要时间 特别是在一段时间内频繁的申请内存将会造成很大的开销 而且上tebleView中cell大部分情况下布局都是一样的 这个时候我们可以通过回收重用机制来提高性能 b 避免content的重新布局
  • webservice 安全认证请求头信息

    java import java io IOException import java util Enumeration import javax servlet Filter import javax servlet FilterChai
  • 【深度学习

    文章目录 一 前言 二 Computer vision 2 1 Image classification 2 2 Object detection 2 3 Image segmentation 2 4 Depth estimation 三
  • JAVA使用EasyExcel 进行文件的下载

    Spring Boot中使用EasyExcel 进行文件的下载 1 引入依赖
  • Qt中文乱码解决方法

    Qt中文乱码解决方法 一步到位 一 中文乱码解决方法一 1 QString str QStringLiteral 1你好世界 abc 推荐 2 QString str QObject tr 2你好世界 abc 推荐国际化软件使用 其余不推荐
  • Vue3无法用watch监听到通过ref定义的div内容的改变

    源码如下 div设置了contenteditable属性 但是其中的通过ref绑定的数据监听不到变化
  • 【转载】Elasticsearch——QueryBuilder简单查询--模糊搜索

    elasticsearch中存储的全部文档 1 matchAllQuery matchAllQuery 方法用来匹配全部文档 public class QueryTest public static void main String arg
  • 圆的相切相交相离公式_高中数学:直线与圆

    一 直线 1 直线的倾斜角 在平面直角坐标系中 当直线与x轴重合或平行时 规定倾斜角为0 对于与x轴相交的直线 把x轴绕着交点按逆时针方向转到和直线重合时所转的最小正角叫做直线的倾斜角 倾斜角的范围 0 2 直线的斜率 倾斜角不是90 的直
  • 有关eigen库的一些基本使用方法

    矩阵 向量初始化 include
  • hash冲突的4种解决方案

    简介 解决hash冲突 哈希冲突 有以下四种方法 链地址法 再哈希法 建立公共溢出区 开放定址法 法1 链地址法 对于相同的哈希值 使用链表进行连接 HashMap使用此法 优点 处理冲突简单 无堆积现象 即非同义词决不会发生冲突 因此平均
  • 在windows下制作grub2引导的多启动U盘(可启动wepe,安装centos7,debian10等)

    目标 在windows下把一个8GB的u盘制作为grub2引导的多启动U盘 可启动wepe 安装centos7 debian10等 同时支持bios主板和uefi主板 工具准备 a 一个windows 10电脑 b windows 10电脑
  • 要像黑客一样思考,网络安全人员的晋级之道

    学会像黑客一样思考对于任何网络安全专业人士来说都是必要的 这能够让他们更好地理解黑客入侵网络和系统的策略 战术和技术 以及如何保护客户免受此类攻击 为了成为一名有效的安全专业人员 必须能够既具有攻击性又具有防御性的思维 也就是说 必须理解攻
  • QT自定义槽函数

    QT学习 一 QT自定义槽函数 要点 使用举例 一 QT自定义槽函数 要点 槽函数可以是任意的类成员函数 全局函数 静态函数 lambda表达式 隐式函数 槽函数需要与信号相对应 返回值 函数 信号没有返回值 槽函数可以有返回值 举例 vo
  • iMX6ULL学习(一)

    以下部分资料和硬件参考于韦老师的百问网 文章目录 嵌入式linux启动流程 编译流程 链接库的创建使用 一 制作和使用动态链接库 so share object 二 制作和使用静态链接库 a archive 开发前基础库下载 各压缩格式操作
  • STM32F103 驱动32x64双色点阵单元板 (标准HUB08 接口 F3.75)

    MCU STM32F103C8 点阵屏 32 64 F3 75 单元板 红绿双色 显示 接口 标准HUB08 OE 高电平有效 138译码 1 16 扫 欢迎加QQ群 交流讨论 废话不多说 直接贴代码 整个keil工程下载 https do
  • .NET中的视图和过滤器 (DefaultView和RowFilter)

    NET中的视图和过滤器 DefaultView和RowFilter ADO NET中有一层对象 用来创建任意数据源的抽象模型 其中包括DataSet DataTable DataRow DataView DataRelation等等 所有这
  • Python3的一些基础语法介绍和理解

    作者 心叶时间 2018 04 23 22 18 此处长期维护一些对帮助快速使用python3的一些基础语法 方便日常算法练习使用 控制语法 break 语句可以跳出 for 和 while 的循环体 如果你从 for 或 while 循环