[Python基础速成]1-Python规范与核心语法

本系列旨在快速掌握Python,实现能够快速阅读和理解 Python 代码,并在可查阅语法的情况下进行 AI 学习。
本篇先了解一下Python基础知识。
本篇内容较菜鸟教程有所删减、方便快速构建大纲,且加入了PEP 8规范说明等有助于理解和编写代码的说明。

因为是Java程序员视角学习Python,所以会有一些与Java的比较。

目录

  • 资料推荐
  • Python格式规范
    • 编码
    • PEP 8规则
    • 标识符
    • 注释
    • 缩进(Python怎么写)
  • Python关键字
  • Python核心语法
    • 变量与数据类型
      • 基本类型
      • 迭代器
      • 类型转换
    • 控制流
    • 函数
      • 定义函数
      • 参数传递机制
      • 装饰器
    • 异常处理
      • 语法
      • with
      • 自定义异常
  • 掌握测试-使用Python来解leetcode

资料推荐

菜鸟教程
《python入门到实践》

Python格式规范

编码

默认情况下,Python3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。

PEP 8规则

Python官方的规范PEP 8。
里面有各种规范,这里简单介绍一下命名规范。

  • 变量
    不要使用I、O字符作为单个字符变量名。
    常量为大写字母+下划线。

  • 模块名
    模块名全小写,下划线分割。

  • 类名
    类名CapWords规范,即同Java一样首字母大写。
    异常类后缀使用Error。

  • 函数名
    小写+下划线。
    实例方法第一个参数用self。
    类方法第一个参数用cls。
    使用下划线优于缩写。

  • 前导线_约定

公开属性不应有前导下划线_
仅对非公共方法和实例变量使用一个前导下划线_
使用双前导下划线__命名可能与设计为子类的类中的属性发生冲突的属性。

标识符

  • 第一个字符必须以字母(a-z, A-Z)或下划线 _ 。
  • 标识符的其他的部分由字母、数字和下划线组成。
  • 标识符对大小写敏感,count 和 Count 是不同的标识符。
  • 标识符对长度无硬性限制,但建议保持简洁(一般不超过 20 个字符)。
  • 禁止使用保留关键字,如 if、for、class 等不能作为标识符。

注释

#!/usr/bin/python3# 第一个注释
# 第二个注释'''
第三注释
第四注释
'''"""
第五注释
第六注释
"""
print ("Hello, Python!")

缩进(Python怎么写)

python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。

缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

缩进一致默认为同一个代码快,使用反斜杠\可以实现多行语句。

Python换行不需要使用分号;来标识结束。

Python关键字

python关键字可以使用下列代码打印出来。

import keywordprint(keyword.kwlist)

[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]

Python核心语法

变量与数据类型

字符串、数字、列表、元组、字典、集合(重点:列表和字典,类似Java的List和Map)。

基本类型

python的变量不需要声明,类型在运行时自动推断,且可随时改变。即动态类型特征。

x = 10
# 整数转换成字符串
x = "hello"

Java10+开始支持var关键字,支持局部变量类型推断,但是不同的是Java的var声明后类型不可以更改。

类型可以随时更改,但是内容不一样。
Python3 的六个标准数据类型中:

  • **不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • **可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

不可变immutable的类型一旦创建,内部内容不可修改,修改操作实际上是创建了一个新的对象。

a = "hello"
a += " world"  # 实际是新建了一个字符串对象,a 指向新对象

可变mutable的类型内部内容可直接修改,而对象本身(内存地址)不变。

  • Tuple示例
    元组中的元素类型也可以不相同。有序。
tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2  )
  • List示例
    和Java不一样,Python的List可存放任意类型(动态类型),运行时动态推断,无编译时类型约束。
    Java的List存Object是编译时类型擦除,需要保证是Object子类,没有Python的灵活。

Python的List是有序的。

list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]  # 定义一个列表
  • Dictionary示例
    字典是无序的对象集合。键值对。
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
  • Set示例
    Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。
sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}

迭代器

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:

list = [1,2,3,4]
# 通过iter方法创建迭代器对象
it = iter(list)
# 使用next()方法获取元素
print(next(it))

类似Java需要实现Iterator接口的hasNext()与next(),Python一个类需要作为迭代器使用需要在类中实现__iter__()与__next__()方法。

类型转换

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

函数描述
int(x [,base])将x转换为一个整数
float(x)将x转换到一个浮点数
complex(real [,imag])创建一个复数
str(x)将对象 x 转换为字符串
repr(x)将对象 x 转换为表达式字符串
eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)将序列 s 转换为一个元组
list(s)将序列 s 转换为一个列表
set(s)转换为可变集合
dict(d)创建一个字典。d 必须是一个 (key, value)元组序列。
frozenset(s)转换为不可变集合
chr(x)将一个整数转换为一个字符
ord(x)将一个字符转换为它的整数值
hex(x)将一个整数转换为一个十六进制字符串
oct(x)将一个整数转换为一个八进制字符串
函数转换为显示转换。

在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。

在使用上,Python的隐式类型转换和Java的自动类型转换效果一样。
即较小类型转换成较大类型以避免精度丢失,如int转double。
都不允许使用不安全活不合理的转换,如字符串直接转数字。

两者在使用上差别为Python支持布尔值转换,布尔值在算术中隐式转为int(True为1,False为0)。
Java不支持布尔值转换,有限转换类型为byte → short → int → long → float → double。

控制流

if、for、while(Python的循环比Java简洁,注意缩进)。

  • if
if condition_1:statement_block_1
elif condition_2:statement_block_2
else:statement_block_3# python3.10新增 match...case 类似Java switch case
match subject:case <pattern_1>:<action_1>case <pattern_2>:<action_2>case <pattern_3>:<action_3>case _:<action_wildcard> # _ 可以匹配一切。 类似default
  • for
    python提供了for…else写法,else在for结束后执行一次。相当于与finally
for <variable> in <sequence>:<statements>
else:<statements>
  • while
    python提供了while…else写法,else执行一次。想当于while+if else
while 判断条件(condition):执行语句(statements)……while counter <= n:sum = sum + countercounter += 1# 或者
while <expr>:<statement(s)>
else:<additional_statement(s)>

Python的continue和break与Java使用相同。

函数

定义、参数(默认参数、可变参数)、lambda表达式。

定义函数

可以使用def关键字定义一个完成函数。
![[Pasted image 20250414133812.png]]

也可以使用lambda来创建一个匿名函数,一般是简单的、单行的函数,通常在需要函数作为参数传递的情况下使用。

lambda arguments: expression
# 无参
f = lambda: "Hello, world!"
print(f())  # 输出: Hello, world!
# 有参
x = lambda a, b : a * b
print(x(5, 6))

lambda 函数通常与内置函数如 map()、filter() 和 reduce() 一起使用,以便在集合上执行操作。例如:

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # 输出: [1, 4, 9, 16, 25]

参数传递机制

Java严格采用值传递(Pass by Value),对象类型传递引用的副本。因此,Java函数内修改传递的值不会修改原值,通过传递的引用修改对象内容会影响原对象,将引用副本指向新的对象不会影响原应用。
Python的参数传递与Java一致。不可变对象表现为值传递,可变对象表现为“传递引用副本”。

装饰器

装饰器(decorators)是 Python 中的一种高级功能,它允许你动态地修改函数或类的行为。
![[Pasted image 20250414140726.png]]
类似于Java的注解。
多个装饰器堆叠在一起,从下到上⬆️顺序依次应用。

异常处理

语法

语法try-except(类似Java的try-catch)。

def test_func():while True:try:x = int(input("请输入一个数字: "))breakexcept ValueError as err:print("您输入的不是数字,请再次尝试输入!")test_func()

和Java一样,一个try可以对应多个except。
语法try/except…else。else 子句放在最后,将在 try 子句没有发生任何异常的时候执行。

try-finally 语句。和Java的finally一样,是否发生异常都将执行最后的代码。

Python 使用 raise 语句抛出一个指定的异常。

raise [Exception [, args [, traceback]]]# 使用raise抛出异常
x = 10
if x > 5:raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

仅使用raise关键字相当于直接抛出。

with

Python的with关键字类似Java的 try-with-resources 。语法如下:

# 文件操作(自动关闭)
with open('file.txt', 'r') as file:data = file.read()# 文件会在代码块结束后自动关闭,即使发生异常

类似的是Java使用try-with-resources 需要类实现了AutoCloseable接口,而Python的需要实现__enter__ 和 exit

自定义异常

异常类需要继承Exception。

class MyError(Exception):def __init__(self, value):self.value = valuedef __str__(self):return repr(self.value)

大多数的异常的名字都以"Error"结尾,就跟标准的异常命名一样。这里类继承相关件后续Python面向对象篇章。

掌握测试-使用Python来解leetcode

每天用Python刷两道简单LeetCode维持手感。

下篇[Python基础速成]2-模块与包与OOP

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

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

相关文章

农民剧团的春天与改变之路

杨天义&#xff0c;男&#xff0c;1966年9月生&#xff0c;中共党员&#xff0c;江西省吉安市吉水县水南农民剧团团长。 杨天义从废品收购起家&#xff0c;凭借自身的努力和奋斗&#xff0c;自筹资金100余万元建设了水南镇的第一座影剧院&#xff0c;组建了江西省吉安市吉水县…

python asyncio 的基本使用

1、引言 asyncio 是 Python 标准库中的一个库&#xff0c;提供了对异步 I/O 、事件循环、协程和任务等异步编程模型的支持。 asyncio 文档 2、进程、线程、协程 线程 线程是操作系统调度的基本单位&#xff0c;同一个进程中的多个线程共享相同的内存空间。线程之间的切换由操…

Leedcode刷题 | Day30_贪心算法04

一、学习任务 452. 用最少数量的箭引爆气球代码随想录435. 无重叠区间763. 划分字母区间 二、具体题目 1.452用最少数量的箭引爆气球452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; 在二维空间中有许多球形的气球。对于每个气球&#xff0c;提供的输…

Ant Design Vue 表格复杂数据合并单元格

Ant Design Vue 表格复杂数据合并单元格 官方合并效果 官方示例 表头只支持列合并&#xff0c;使用 column 里的 colSpan 进行设置。 表格支持行/列合并&#xff0c;使用 render 里的单元格属性 colSpan 或者 rowSpan 设值为 0 时&#xff0c;设置的表格不会渲染。 <temp…

C++ 标准库中的 <algorithm> 头文件算法总结

C 常用 <algorithm> 算法概览 C 标准库中的 <algorithm> 头文件提供了大量有用的算法&#xff0c;主要用于操作容器&#xff08;如 vector, list, array 等&#xff09;。这些算法通常通过迭代器来操作容器元素。 1. 非修改序列操作 std::all_of, std::any_of, s…

程序化广告行业(84/89):4A广告代理公司与行业资质解读

程序化广告行业&#xff08;84/89&#xff09;&#xff1a;4A广告代理公司与行业资质解读 大家好&#xff01;在探索程序化广告行业的道路上&#xff0c;每一次知识的分享都是我们共同进步的阶梯。一直以来&#xff0c;我都希望能和大家携手前行&#xff0c;深入了解这个充满机…

deepin使用autokey添加微信快捷键一键显隐ctrl+alt+w

打开deepin商店&#xff0c;搜索快捷键&#xff0c;找到autokey 快捷键管理&#xff0c;点击安装 点击右键新建文件夹 点击右键新建脚本 打开脚本并添加以下内容 import subprocess import time# ------------------ 配置项 ------------------ WM_CLASS "wechat…

文件内容课堂总结

Spark SQL是Spark用于结构化数据处理的模块&#xff0c;前身是Shark。Shark基于Hive开发&#xff0c;虽提升了SQL-on-Hadoop效率&#xff0c;但对Hive依赖过多。2014年6月1日Shark项目停止开发&#xff0c;团队将资源投入Spark SQL项目。Spark SQL具有诸多优点&#xff0c;如摆…

Zotero PDF Translate 翻译插件使用OpenAI API配置教程

PDF Translate&#xff1a;提升 Zotero 内置 PDF 阅读器的翻译功能 “PDF Translate” 是一款为 Zotero 设计的插件&#xff0c;旨在方便用户在 Zotero 内置的 PDF 阅读器中进行划词或段落翻译&#xff0c;辅助阅读外文文献。 一、 安装插件 下载插件&#xff1a; 访问 PDF T…

火山引擎旗下的产品

用户问的是火山引擎旗下的产品&#xff0c;我需要详细列出各个类别下的产品。首先&#xff0c;我得确认火山引擎有哪些主要业务领域&#xff0c;比如云计算、大数据、人工智能这些。然后&#xff0c;每个领域下具体有哪些产品呢&#xff1f;比如云计算方面可能有云服务器、容器…

C/C++程序中实现Python绑定多种技术路线

在C/C程序中实现Python绑定有多种技术路线&#xff0c;选择合适的方法取决于项目需求、性能要求和开发效率。以下是常见的几种方案&#xff0c;按易用性排序&#xff1a; 1. PyBind11&#xff08;推荐首选&#xff09; 特点&#xff1a;现代C库&#xff0c;语法简洁&#xff0…

【位运算】消失的两个数字

文章目录 面试题 17.19. 消失的两个数字解题思路 面试题 17.19. 消失的两个数字 面试题 17.19. 消失的两个数字 ​ 给定一个数组&#xff0c;包含从 1 到 N 所有的整数&#xff0c;但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗&#xff1f; ​ 以任意…

自然语言处理Hugging Face Transformers

Hugging Face Transformers 是一个基于 PyTorch 和 TensorFlow 的开源库&#xff0c;专注于 最先进的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;如 BERT、GPT、RoBERTa、T5 等。它提供了 预训练模型、微调工具和推理 API&#xff0c;广泛应用于文本分类、机器翻…

vue开发基础流程 (后20)

创建项目命令&#xff1b; 或者 vue create my - vue - router - project这个是创建带路由的项目 22.组件组成 比如说一个页面吧&#xff0c;他三个组件&#xff0c;template就是用来放所有的标签&#xff0c;script用来放业务逻辑&#xff0c;style用来放样式&#xff0c;c…

高性能内存kv数据库Redis

引言 在当今数据驱动的时代&#xff0c;高效的数据存储和检索对于各类应用程序至关重要。Redis&#xff08;Remote Dictionary Server&#xff09;作为一款开源的内存键值数据库&#xff0c;凭借其出色的性能、丰富的数据结构和灵活的特性&#xff0c;在众多场景中得到了广泛应…

自动化测试概念篇

文章目录 目录1. 自动化1.1 自动化概念1.1.1 回归测试 1.2 自动化分类1.3 自动化测试金字塔 2. web自动化测试2.1 驱动2.1.1 安装驱动管理2.1.2 selenium库 3. Selenium3.1 一个简单的web自动化示例3.2 selenium驱动浏览器的工作原理 目录 自动化web自动化测试Selenium 1. 自…

《AI大模型应知应会100篇》第17篇:大模型的偏见与公平性问题

第17篇&#xff1a;大模型的偏见与公平性问题 摘要 在人工智能迅速发展的今天&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经深入到我们的日常生活和工作中。然而&#xff0c;这些模型并非完美无缺&#xff0c;它们可能携带并放大数据中的偏见&#xff0c;导致不公…

【踩坑】GitHub Actions 运行的 Linux 环境中,文件名是大小写敏感的

在使用 VuePress 搭建个人博客并部署到 GitHub Pages 的过程中&#xff0c;我遇到了一个颇为棘手的问题&#xff1a;本地打包一切正常&#xff0c;但在 GitHub Actions 自动执行打包流程时&#xff0c;却提示找不到 README.md 文件&#xff0c;导致整个流程失败。经过一番深入排…

C# 13新特性 - .NET 9

转载&#xff1a; C# 13 中的新增功能 | Microsoft Learn C# 13 包括以下新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 9 SDK 尝试这些功能&#xff1a;Introduced in Visual Studio 2022 Version 17.12 and newer when using C# 13 C# 13 中的新增功能 | Micr…

numpy.ma.masked_where:屏蔽满足条件的数组

1.函数功能 屏蔽满足条件的数组内容&#xff0c;返回值为掩码数组 2.语法结构 np.ma.masked_where(condition, a, copyTrue)3. 参数 参数含义condition屏蔽条件a要操作的数组copy布尔值&#xff0c;取值为True时&#xff0c;结果复制数组(原始数据不变)&#xff0c;否则返回…